Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Tuesday, 1 January 2019

The end of China’s ride-sharing gig

Over the last few years, millions of Chinese workers managed to earn extra money by being ride-hailing drivers. Many picked the gig because of its flexible schedule. For those who could not otherwise afford to own a car in China’s pricy metropolises, driving around is also a status symbol, even if they are paying off car loans every month.

Most drivers on Didi Chuxing — the startup that captured 90 percent of China’s e-hailing trips in 2017 per consulting firm Bain & Company — were part-time. That’s according to a report Didi put out in October 2017, which said half of its drivers worked less than two hours a day.

The report also hailed Didi as the epitome of China’s “sharing economy,” something that Beijing has been keen to promote to spur economic growth. The all-encompassing term, which includes shared platforms from mobility to elderly care services, raked in $764 billion in 2017, shows a report by China’s Sharing Economy Research Center of the State Information Center.

But gig work in China’s fledgling ride-hailing industry is coming to an end as new regulations make part-time driving overly expensive.

No more gigs

On January 1, ride-hailing apps in China start banning drivers who operate without the required “double licenses”: one for drivers and another for the cars they steer. Municipal governments across the country have nuanced stipulations for what these certificates entail, but in general, the fresh rules aim to more closely vet drivers transporting passengers around.

To obtain the ride-hailing driver’s permit in certain cities, drivers must own a local hukou, the residency permit that controls where people can legally work. A lot of ride-hailing drivers don’t have an urban hukou as they are migrant workers from rural parts of China, so they immediately become ineligible for ride-hailing apps.

The car license, on the other hand, requires the vehicle to operate as a commercial one, bringing additional costs to drivers who must absorb the costs of car insurance and maintenance, and scrap their vehicle after 8 years.

didi chuxing

All ride-hailing vehicles in China must possess the required license (circled in red) to be on the roads starting January 1, 2019. Photo credit: TechCrunch

Under the new legal framework, drivers can still work as independent contractors. But in effect, the policy shift is driving out casual workers. “No part-time drivers want to register their private car as a commercial one because of the high costs that come with it,” a Shenzhen-based Didi driver tells TechCrunch. “Being part-time doesn’t pay the bills anymore.”

Didi’s dilemma

Like a lot of China’s nascent industries, ride-hailing took off quickly in part thanks to relatively lax government oversight at the start. The first set of industry laws took effect in 2016 when the country officially legalized apps like Uber, which was later acquired by its local competitor Didi. Since then Chinese authorities have gradually rolled out more rules and the strictest regulations, including the rollout of the double licenses, came following the deaths of two passengers who used Didi last year.

The new policies have put a squeeze on driver and car numbers. In the Tier 2 city of Nanjing alone, Didi claims to have weeded out more than 160,000 illegal vehicles, local media reported. The sharp decline in cars available on the roads inevitably leads to longer wait time and user frustration, and the $56 billion giant will need to think of ways to maintain a constant supply of drivers.

Didi took off on account of generous subsidies for both users and drivers, but its staggering loss — which is said to stand at $585 million in the first half of 2018 — means it may not be offering cash-heavy incentives in the near term. To retain labor, Didi is offering test prep for drivers. It’s also lowered the barriers to entry by letting drivers rent licensed cars it sources from car rental and automaker partners. A catchphrase started to pop up on Didi’s mobile app for drivers in December: “You supply the manpower, we provide the car.”

Aside from regulatory hurdles, Didi also faces new challengers like BMW and Volkswagen’s China partner SAIC Motor, traditional carmakers that are entering the ride-hailing scene.

“Didi has educated China about what is ride-hailing. If it doesn’t react swiftly to changing dynamics, the billions of yuan it’s burned through will suffer from low returns,” Dong Feng, founder of a Chinese car rental startup suggests to TechCrunch.



from TechCrunch https://tcrn.ch/2F1KuQv
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support