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

Friday 30 April 2021

Roku removes YouTube TV from its channel store following failed negotiations

Earlier this week, Roku warned customers that the YouTube TV app may be removed from its streaming media players and TVs, and alleged that Google was leveraging its monopoly power during contract negotiations to ask for unfair terms. Today, Roku is announcing the deal has fallen through — meaning YouTube TV will no longer be available to new Roku subscribers. However, the company says it has taken steps to ensure existing subscribers can continue to use the YouTube TV app.

Roku had argued that as a part of its attempts to renew the carriage agreement for YouTube TV, Google was asking for special treatment, including a preferential ranking of YouTube content in search results, and even the permission to override Roku customer’s default settings when the YouTube app was open. That is, if a customer used the voice search button to ask for music, Google wanted YouTube Music to play the request — even if the customer had set another app, like Pandora, as their default.

The company also alleged that Google was asking for customer data that was “outside the realm” of industry standard practices and more than Roku offered other customers. And it said Google threatened to increase the hardware spec requirements for YouTube TV which would ensure Roku’s low-end and competitively priced players wouldn’t be able to access it.

Google, however, disputed the claims were as Roku said. It pointed the finger back at Roku for turning to customers to help sway the negotiations in its favor. The company also said it had been working in “good faith” to reach an agreement and all its requests were about providing a good user experience. Notably, Google also said it made “no requests to access user data or interfere with search results.”

Roku today offered a statement on the decision to pull YouTube TV, as the agreement has not been renewed. A Roku spokesperson said the following:

“We are disappointed that Google has allowed our agreement for the distribution of YouTube TV to expire. Roku has not asked for one dollar of additional financial consideration from Google to renew YouTube TV. ​

We have only asked Google for four simple commitments. First, not to manipulate consumer search results. Second, not to require access to data not available to anyone else. Third, not to leverage their YouTube monopoly to force Roku to accept hardware requirements that would increase consumer costs. Fourth, not to act in a discriminatory and anticompetitive manner against Roku. ​

​Because our contract has expired, we have removed YouTube TV from our channel store. To continue to provide our users with a great streaming experience, we are taking the extra step to continue to offer existing subscribers access to YouTube TV on the Roku platform unless Google takes actions that require the full removal of the channel. Because of Google’s conduct, new subscriptions will not be available going forward until an agreement is reached. ​

​It is well past time for Google to embrace the principles that have made streaming so popular for millions of users by giving consumers control of their streaming experience, by embracing fair competition and by ceasing anticompetitive practices. We believe consumers stand to benefit from Google and Roku reaching a fair agreement that preserves these principles and we remain committed to trying to achieve that goal.”

An email was also sent to customers informing them of these details. We’ve asked Google for comment.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support