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();

Wednesday, 26 June 2019

Pinduoduo cements position as China’s second-largest ecommerce player

Alibaba and JD.com have been in a war over the Chinese e-commerce space for a decade or so, but a third player called Pinduoduo has managed to shake up the duopoly in recent times. The startup, which was founded in 2015 by an ex-Googler and went public on the Nasdaq last July, has further flexed muscles during the recent “6/18” shopping spree.

According to data provider QuestMobile, Pinduoduo’s daily active users have outnumbered JD’s for at least the past 12 months, and it came out of the mid-year sales festival — first popularized by JD as a counterpart to archrival Alibaba’s “11/11” shopping day — with 135 million DAUs.

JD, in comparison, ended with 88 million DAUs and Alibaba’s Taobao retained its top spot at 299 million. That result further solidified Pinduoduo’s position as China’s second-biggest ecommerce company by number of users.

The boom of Pinduoduo is in part attributable to ties with its investor Tencent — also a backer of JD — which enables it to sell via WeChat’s lite app and tap the giant’s vast social network. Alibaba, on the other hand, has for years been prevented from selling through WeChat.

In terms of sales, Pinduoduo still remains some miles behind JD, which focuses on large-ticket items like home appliances and targets China’s urban, deep-pocketed shoppers. Pinduoduo took a more rural tack and has built a reputation for hawking ultra-cheap goods at small-city consumers.

In 2018, Pinduoduo racked up 471.6 billion yuan ($68.6 billion) in gross merchandise volume, a somewhat problematic term for gauging sales as it totals the value of orders placed, regardless of whether they are actually sold, delivered or returned. (Alibaba stopped revealing GMV a few years ago.) JD’s GMV was almost four times that of Pinduoduo at 1.68 trillion yuan ($243.9 billion) last year.

One has to keep in mind that JD is a 21-year-old firm born out of the PC era, whereas Pinduoduo has been up and running on mobile for less than four years. The startup’s continued growth is undeniable. In a March report, investment bank UBS’s Evidence Lab predicted that Pinduoduo could overtake JD in GMV as early as 2021.

But Pinduoduo’s story is not all roses. Currently trading at $20.54, its stock has plunged about 35 percent since a March high. The online marketplace has also been chided for selling counterfeits and subpar goods, an endemic problem that’s long plagued Chinese e-commerce. This year Pinduoduo was put on the U.S. government’s “notorious” blacklist alongside rival Alibaba for selling fakes, while the company claims it’s actively working to root out problematic listings.



from TechCrunch https://ift.tt/2NgUqer
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support