From 05f41b062a76238545ace056fc1cab9acd1deb1a Mon Sep 17 00:00:00 2001 From: Emilien Klein Date: Sat, 19 Nov 2011 13:51:57 +0100 Subject: [PATCH] Added: Support for TED Talks (ted.com/talks) thumbnails --- index.php | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/index.php b/index.php index 88be084b..d9692927 100644 --- a/index.php +++ b/index.php @@ -1515,13 +1515,21 @@ function thumbnail($url,$href=false) if (!$GLOBALS['config']['ENABLE_LOCALCACHE']) return ''; // If local cache is disabled, no thumbnails for services which require the use a local cache. - if ($domain=='flickr.com' || endsWith($domain,'.flickr.com') || $domain=='vimeo.com') + if ($domain=='flickr.com' || endsWith($domain,'.flickr.com') + || $domain=='vimeo.com' + || $domain=='ted.com' || endsWith($domain,'.ted.com') + ) { if ($domain=='vimeo.com') { // Make sure this vimeo url points to a video (/xxx... where xxx is numeric) $path = parse_url($url,PHP_URL_PATH); if (!preg_match('!/\d+.+?!',$path)) return ''; // This is not a single video URL. } + if ($domain=='ted.com' || endsWith($domain,'.ted.com')) + { // Make sure this TED url points to a video (/talks/...) + $path = parse_url($url,PHP_URL_PATH); + if ("/talks/" !== substr($path,0,7)) return ''; // This is not a single video URL. + } $sign = hash_hmac('sha256', $url, $GLOBALS['salt']); // We use the salt to sign data (it's random, secret, and specific to each installation) return ''; } @@ -1881,6 +1889,35 @@ function genThumbnail() } } } + + if ($domain=='ted.com' || endsWith($domain,'.ted.com')) + { + // The thumbnail for TED talks is located in the tag on that page + // http://www.ted.com/talks/mikko_hypponen_fighting_viruses_defending_the_net.html + // + list($httpstatus,$headers,$data) = getHTTP($url,5); + if (strpos($httpstatus,'200 OK')!==false) + { + // Extract the link to the thumbnail + preg_match('!link rel="image_src" href="(http://images.ted.com/images/ted/.+_\d+x\d+\.jpg)[^s]!',$data,$matches); + if (!empty($matches[1])) + { // Let's download the image. + $imageurl=$matches[1]; + list($httpstatus,$headers,$data) = getHTTP($imageurl,20); // No control on image size, so wait long enough. + if (strpos($httpstatus,'200 OK')!==false) + { + $filepath=$GLOBALS['config']['CACHEDIR'].'/'.$thumbname; + file_put_contents($filepath,$data); // Save image to cache. + if (resizeImage($filepath)) + { + header('Content-Type: image/jpeg'); + echo file_get_contents($filepath); + return; + } + } + } + } + } // For all other domains, we try to download the image and make a thumbnail. list($httpstatus,$headers,$data) = getHTTP($url,30); // We allow 30 seconds max to download (and downloads are limited to 4 Mb) @@ -1950,4 +1987,4 @@ if (!isset($_SESSION['LINKS_PER_PAGE'])) $_SESSION['LINKS_PER_PAGE']=$GLOBALS['c if (startswith($_SERVER["QUERY_STRING"],'do=rss')) { showRSS(); exit; } if (startswith($_SERVER["QUERY_STRING"],'do=atom')) { showATOM(); exit; } renderPage(); -?> \ No newline at end of file +?> -- 2.41.0