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, 31 March 2020

Snapchat preempts clones, syndicates Stories to other apps

If you can’t stop them, power them. That’s the strategy behind Snapchat App Stories, which launches today to let users show off their ephemeral content in other apps too. The first partners will let you post Stories to your dating profile in Hily, share them alongside [music] videos in Triller, watch them while screensharing in Squad, or give people a peek at your life in augmented reality network Octi.

Snapchat’s Stories format has been widely cloned, most famously by Instagram and Facebook, but with versions in various states of development for YouTube, Twitter, LinkedIn, SoundCloud, and more. Snapchat hopes to retain some grip on Stories and dissuade more copycats by letting developers bake the original version into their apps rather than building a bootleg attempt from scratch.

If you need Snapchat to share Stories to popular apps, that could boost content production plus subsequent viewership and ad impressions inside of Snapchat, remind people to shoot Stories, and make sure having a Snapchat account stays relevant. “We definitely think there’s a potential for monetization in App Stories but not yet” Snap’s VP of partnerships Ben Schwerin tells me. For now, Snapchat isn’t injecting ads into alongside Stories into other apps, though that’s clearly the plan.

“There are certain platforms out there that have decided they want to invest in building their own Stories product and their own camera, but it’s not a trivial thing to do. It takes resources and time. We think we think we can help developers do that” Schwerin explains. “Getting more people oput there, regardless of age or where they live, comfortable using Stories probably makes them more likely to be able to pick up and enjoy Snapchat.”

Snapchat initially announced the plan for App Stories at its Partner Summit exactly a year ago. Unfortunately, its second annual developer conference that was set for this week was cancelled due to coronavirus.

Though advertising spend may be reduced, at least the app has experienced an increase in usage while everyone shelters in place. That includes third-party apps built on its Snap Kit platform that lets developers piggyback on Snapchat’s login, Bitmoji, and camera effects.

“We continue to see incredible growth from established apps like Reddit and Spotify and TikTok, and from startups that are really building from the ground up on Snap Kit like Yolo” Schwerin reveals. People are spending more time at home and less time with friends. We’re seeing increased usage of Snapchat.”

Snap Kit has allowed Snapchat to rally would-be copycats into a legion of allies as it fights to stave off the Facebook empire. That strategy combined with a high-performance rebuild of its Android app led Snapchat’s share price to grow from $11.36 a year ago to a recent high of $18.98 before coronavirus dragged almost all the way back down.

Now, when people shoot a photo or video in the Snapchat camera, they’ll get options to share it not just to their Story or Snap Map and the crowdsourced community Stories, but also to their Story within other apps integrated with Snap Kit. Users will see options to syndicate their Story to products equipped with App Stories where they’re already logged in.

Unlike on Snapchat where Stories disappear after 24 hours, with they default to a 7-day expiration in other App Stories. That relieves users of having to constantly post ephemeral Snaps to keep their dating or social app profiles stocked with biographical content.

For Snapchat to gain momentum it needs two things: a constant influx of new users, eager to use its augmented reality camera and Bitmoji wherever they’re available, and more impressions to monetize with ads after Instagram stole the Stories use case for untold millions of older users. App Stories could help with both.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support