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, 25 February 2020

Minute Media raises $40M more for its user-generated, syndication-based sports publishing platform

When it comes to the internet, content may be king, but in many cases, the emperor has no clothes: that is to say, the masses may click on interesting stories, video, music and other media, but building a lucrative business around that content can be a struggle, with advertising-based models often providing little in the way of margins except for the very biggest properties (and even then, it can a tough balancing act managing costs).

A startup called Minute Media believes that it has found a way through that challenge with a platform that brings in user-generated content across a number of its own mostly-sports-based media properties — built organically and by way of acquisition — and it then syndicates that content also through third-party publishing partners.

Today, the startup is announcing a $40 million round to continue its growth — specifically to continue investing in its publishing platform; to invest in properties that it already owns; and to make more acquisitions.

Led by London’s Dawn Capital with participation from other unnamed previous investors (a list that includes Battery Ventures, Goldman Sachs, ProSieben, Qumra Capital, Vintage Investments, Gemini Ventures, North Base Media, La Maison, Remagine Ventures, Hamilton Lane and Maor Investments) the funding brings the total raised by Minute Media to $160 million.

The startup is not disclosing its valuation, but last year we understood from a source very close to the company to be between $200 million and $300 million. Given that it grew around 100% last year, that likely puts the current valuation closer to $300 million.

Minute Media may not be a name you know very well, but if you are a consumer of sports content online, you may have come across some of its properties and articles. Its holdings currently number seven titles and include names like 90min.com (which focuses on soccer, hence the name: the startup’s founder and CEO Asaf Peled is a football fanatic), as well as FanSided, The Players’ Tribune and Mental Floss. (Others include 12up, DBLTAP and The Big Lead.)

Some of these Minute Media built from scratch, but many have come to it courtesy of the bigger picture of the media industry today: titles are created, gain an audience, and then get shifted around in the world of online publishing when the previous owner has not been able to make the business case for the site work.

For example, FanSided came to Minute Media by way of an acquisition just last month: Meredith sold it, reportedly for $15 million, as part of a larger divestment of “non-core” assets it has been making post its acquisition of Time, Inc. in 2018 (it once sat under Sports Illustrated).

The Players Tribune runs stories written by athletes themselves — some extremely timely, such as this one from Sabrina Ionescu, a rising star in women’s basketball, published just on Monday, in the same week that her name has been making waves because of her speech at the Bryant memorial service, plus her heroic work on the court. The site was founded by baseball legend Derek Jeter and sold in November last year to Minute Media.

Mental Floss, something of a cult click-bait title, lost its way after Facebook algorithm changes: now its home is also at Minute Media.

While this might look mainly like a media play, there is a technology story underpinning what Minute Media has built the spans, B2C, B2B and C2C distribution.

For starters, there is the centralised content management system that runs the sites, “an open CMS system that allows any casual fan to create rich content,” as Peled has described it to TechCrunch. This has had as many as 20,000 contributors on it, covering a variety of languages beyond English; the number of pieces — selected by human editors — published across all its platforms is less than 1,000 per day. Only the most prolific and longstanding contributors get paid; others contribute for free.

Advertising features on Minute Media’s properties, but is only one piece of how the company makes money, since that same platform is also a licensing-based B2B and B2C play: it links up to about a dozen other publishers and media partners, which use it both to syndicate content out and bring in content from other places: the thinking goes that bringing in syndicated content from elsewhere can help the other publishers bring down their operating costs while still continuing to expand the content (and thus traffic) on their own sites.

Last summer, Peled told me that the balance between ad and licensing revenues were “around 50/50, but no doubt the B2B open platform is easier to sell and is growing faster.”

Sports content has shaped up to be an extremely important segment in the world of online media. Done right, it can breed a legion of engaged and very loyal visitors — readers, listeners — who are willing to do more than just click once and move on. That has helped some of the more interesting sports sites build paid content models — see The Athletic — and others spin out media empires based on still evolving platforms like podcasting — see the huge success of The Ringer and its recent sale to Spotify.

Minute Media fits into that bigger picture with its own take on how to build and scale a publishing empire. Without some of the overhead that has weighed down other online publishing plays, the startup has built a concept for publishing that appears to have a kind of sustainability to it.

“Minute Media’s best-in-class platform enables publishers to create, distribute and monetize high-quality content,” said Haakon Overli, general partner at Dawn Capital, in a statement. “The company is quickly establishing itself as a major player in the new generation of online publishing, empowering creators and audiences alike. Following explosive revenue growth in 2019, we’re pleased to back the team once again, allowing them to accelerate R&D and commercial efforts further still.”



from TechCrunch https://ift.tt/381sNLJ
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support