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

Monday, 1 July 2019

China silences podcast and music apps as online crackdown widens

Audio apps are flying high in China. In 2018, online listeners in the country grew 22.1% to surpass 400 million, at a rate far exceeding that of the mobile video and e-reading populations, according to market researcher iiMedia.

But the fledgling sector is taking a hit. On Friday, a total of 26 audio-focused apps were ordered to terminate, suspend services, or have talks with regulators as they were investigated and deemed to have spread “historical nihilism” and “pornography,” according to a notice posted by the Cyberspace Administration of China (CAC).

The clampdown has, in a way, been foreshadowed by a recent attack of user-generated audio content. Last month, Apple restricted Chinese users from accessing podcasts that aren’t hosted by its local partners, effectively preventing those with a Chinese Apple account from consuming content unchecked by Chinese censors.

It’s not uncommon for Chinese authorities to take aim at a rising media field. As short-form videos took off in 2018, the government issued similar directives demanding Douyin (TikTok for China), Kuaishou and many others to purge “illicit” content. The year before, a raft of live streaming apps were in the crosshairs.

CAC, the country’s top internet regulator, only disclosed four of the apps it’s attacking. These services are dwarfed in user size by mega-apps like WeChat or Douyin, with the most successful one — Soul — used on six million devices in May, per data from analytics firm iResearch.

Nonetheless, people reported on social media that more prominent services have also gone missing from app stores. China’s top podcast sharing app Himalaya FM and its smaller rival Lizhi FM, for example, have been pulled from certain Chinese Android markets including one operated by Xiaomi.

Himalaya FM has been pulled from a number of Chinese Android stores. Screenshot: TechCrunch

Music apps seem to be under fire as well. Searches for “NetEase Cloud Music,” a music streaming service operated by internet titan NetEase, on a few local Android stores returned the alert that the app is unavailable for download due to ongoing “maintenance”.

NetEase Cloud Music has been pulled from a number of Chinese Android stores. Screenshot: TechCrunch

As of Monday afternoon, Himalaya FM, Lizhi FM and Netease Cloud Music are still available for download via Apple’s Chinese App Store, where Beijing’s oversight has historically been slower to come.

This is hardly the first time online music platforms get scrutinized in China. The government has occasionally disavowed and censored songs, including most recently works of Li Zhi, an outspoken musician who’s reportedly gone missing ahead of the 30th anniversary of the Tiananmen Square crackdown. None of Li’s songs can be found on China’s major music streaming apps now.

li zhi

Popular rock musician Li Zhi’s songs are missing from all major Chinese music streaming apps. / Screenshot: TechCrunch

Himalaya FM, Lizhi FM, and NetEase could not be reached for comment at the time of writing. We will update the story if we hear back from the companies.

China’s audio market has been left to “run rampant” for a long time and create “harmful influence” on teenagers, so measures must be taken, said the CAC. The regulator accused firms of chasing eyeballs with personalized podcasts containing content like pornography, superstition and, to some surprise, “two-dimensional culture,” a term referring to a fast-growing industry consisting of anime, comics and games inspired by Japanese pop culture.

The Communist Party is certainly on the watch for the expanding universe of imported content from a country over which it has historical grievances. Besides suppression, the party has also responded by making its own anime — one about Karl Marx — to attract the younger generations. Of course, the series was scheduled to broadcast on Bilibili, the Nasdaq-listed video-streaming platform that’s long been a favorite haven for China’s fans of 2D and youth cultures.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support