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

Thursday, 1 October 2020

Google to pay out $1B to publishers to license content for new Google News Showcase

Google has long had a frenemy position with regards to the world of news: it can direct a lot of traffic to online publishers, but that’s only if people bother to click on links after getting the gist of the story from Google itself (and that’s before considering Google’s AMP approach on mobile that keeps users on Google URLs after they click). Publications built around advertising have felt beholden to the search and ad giant, leading those that have survived over the years to try to forge alternative revenue models around paid content, events, and more to offset that dependency.

Now Google is offering another, complementary, option to these publishers, or at least some of them.

Today the company unveiled its latest effort to claw back more credibility in the news publishing world, launching the Google News Showcase. Sundar Pichai, CEO of the search giant, said in a blog post that it would collectively pay some $1 billion to news publishers in licensing fees “to create and curate high-quality content” for new story panels that will appear on Google News. Initially, these will appear on Android devices and eventually also on Google News on iOS.

The new initiative is going live today, after it was initially unveiled by Google in broad strokes earlier this summer.

Google News Showcase is rolling out first in Germany and Brazil before expanding to other markets, according to Pichai. The company has already inked deals with 200 publications in Germany, Brazil, Argentina, Canada, the U.K. and Australia. The first publications to launch will be Der Spiegel, Stern, Die Zeit, Folha de S.Paulo,BandInfobaeEl Litoral, GZH, WAZ and SooToday. India, Belgium and the Netherlands will be next on the list for expansions after the other countries go live, Pichai said.

As you can see here, Google News Showcase seems primarily to be focused on how news is consumed on mobile devices rather than desktop computers.

Like Apple with its efforts around Apple News, as a major mobile platform operator Google has worked on a number of ways to play nice with publishers and the news publishing industry over the years, some on its own steam and some in response to pressure from outside.

They have included funding local news research initiatives; its $300 million news initiative that includes providing grants to journalists and journals, as well as research; emergency grants to publications in hot water; and building tools to help journalists do their work.

Picking Germany as one of the first markets to roll this out is notable, given that publishers in the country were involved in a years-long lawsuit over copyright fees related to how their content was repurposed in Google.

Google ultimately won that case in court, but arguably, it didn’t win in the court of public opinion. Given that Google continues to face a lot of antitrust scrutiny in Europe and elsewhere, it’s important that it works (or at least appear to work!) on rehabilitating its image as too-powerful and uninterested in the fate of institutions that are central to how democratic society works — like the free press.

As Pichai notes, this latest effort is different from what Google has built before because it’s based on publishers doing the curating and creating themselves.

Google is infamous for starting a lot of projects, rolling them out, and then abandoning them when they fail to get market traction. With that understanding, and knowing that it’s one of the biggest companies in the world (not just in tech) it has in theory committed to the Showcase for three years, but Pichai said the plan is for it to “extend beyond the initial three years”, with the company “focused on contributing to the overall sustainability of our news partners around the world.”

It’s not clear how much money individual publishers will make out of this initiative, now how or if it could be used to drive business models that don’t cut Google in on the action. The latter has been a prime focus for many publishers for the last several years. At best, similar to Apple News, it could help publishers hedge their bets or even bolster them (as in the case of paywalls and driving people to using them), rather than cannibalize those other efforts. Google, at the least, seems aware of the stakes and seems to argue that it’s not the only reason publishers are feeling the heat.

“The business model for newspapers—based on ads and subscription revenue—has been evolving for more than a century as audiences have turned to other sources for news, including radio, television and later, the proliferation of cable television and satellite radio,” wrote Pichai. “The internet has been the latest shift, and it certainly won’t be the last. Alongside other companies, governments and civic societies, we want to play our part by helping journalism in the 21st century not just survive, but thrive.”



from TechCrunch https://ift.tt/3igYvcR
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support