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, 30 August 2018

YouTube launches a suite of fundraising tools

YouTube today announced a suite of new features designed to offer creators and their fans new ways to contribute to charitable causes. This includes beta versions of new fundraising and campaign matching tools, as well as a variation of YouTube’s Super Chat service, called “Super Chat for Good.”

Explains the company, YouTube creators have already been using its video platform to raise awareness about causes they care about, and bring their communities together. The launch of YouTube Giving, as this combined toolset is called, will now allow them to do more by making it easier for fans to donate to over 1 million nonprofits.

With Fundraisers, YouTube creators and qualifying U.S. nonprofits (registered 501(c)(3) nonprofits) will be able to create fundraising campaigns that are embedded next to their YouTube videos.

Directly beneath the video, viewers will see a “Donate” button that will allow them contribute to the campaign. YouTube says it will handle the logistics and payment processing.

This is rolling out now to a small group of U.S. and Canadian creators during this beta. One example, live now, is a Hope for Paws Fundraiser that’s raising funds towards animal rescue and recovery.

During the beta, YouTube will cover all transaction fees, allowing 100% of donations to reach the nonprofits.

Community Fundraisers, now launching in beta to U.S. creators, will allow YouTubers to team up together to co-host the same fundraiser. The feature set here is similar to regular fundraisers, but is designed so the fundraiser appears at the same time across all participants’ videos. It will also display how much money all communities have raised together.

This is being kicked off with a group fundraiser by a dozen gaming creators who will raise money from their 37 million subscribers for St. Jude’s Children’s Hospital.

Campaign Matching has yet launched, but will soon allow creators to organize fundraisers where they can receive matching pledges from other creators, brands, and businesses to increase how much they’re able to raise.

The matching pledges and who they’re from will also be displayed as part of this feature. This is expected to arrive in the weeks ahead, says YouTube.

Another new addition leverages YouTube’s existing Super Chat system, which allows fans to pay to have their comments highlighted. In Super Chat for Good, 100% of viewers’ Super Chat purchases will go towards the nonprofit the creator is supporting.

YouTube says it will take in feedback from the community and expand the features to more creators over the next few months.

Online fundraising is a popular activity today across sites like GoFundMe, Kickstarter, Indiegogo, and Patreon. Facebook also entered the market a couple of years ago. In mid-2016 it rolled out the ability for its users to raise funds for nonprofits they support, before later expanding this fundraising toolset set to live video, and broadening the types of fundraisers people could host.

Facebook charges platform fees on some of these fundraisers, except for those for charitable organizations.

YouTube says it also won’t charge fees during the beta, but declined to tell us what its plans for fees are when the beta period wraps.

The company this year has been expanding the types of things creators can do with their videos, in the face of increased competition from Facebook Watch and Amazon’s Twitch. Earlier this summer, YouTube introduced a suite of other features like channel memberships, merchandise shelves, marketing partnerships via FameBit and the launch of “Premieres,” to offer creators a middle ground between live streaming and pre-recorded video.



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

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support