Here’s a function I wrote to get the thumbnail URL for a Blip.tv video when all you have is the embed URL. It can parse the embed URL out of a larger block of text (e.g., a blog post). It doesn’t use their API, which makes it easier to setup, but also means it might break in the future if they change things.
/**
* Gets a Blip.tv video thumbnail URL when given a embed URL
* $author Ian Dunn
* @param string $embedURL e.g., http://blip.tv/play/hZBPgqbXeQA
* @param string $parse If equal to 'parse' then we'll try to parse the URL out of a larger block of text (like a post's $content), otherwise we'll assume it's the exact URL
* @return mixed If successful, the URL string e.g., http://a.images.blip.tv/Brandon-bgintro7369.jpg. If unsuccessful, boolean false
*/
function getBlipThumbnail($embedURL, $parse = '')
{
$urlStart = strpos($embedURL, 'blip.tv/play/');
if($urlStart === false)
return false;
// Parse out the embed URL if needed
if($parse == 'parse')
{
$substrLength = strpos($embedURL, '"', $urlStart) - $urlStart;
$embedURL = 'http://' . substr($embedURL, $urlStart, $substrLength);
}
// Open the redirect page
$handler = curl_init();
curl_setopt($handler, CURLOPT_URL, $embedURL);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
$redirectPage = curl_exec($handler);
curl_close($handler);
// Parse out the ID
$urlStart = strpos($redirectPage, '?file=');
$substrLength = strpos($redirectPage, '&', $urlStart) - $urlStart;
$redirectURL = substr($redirectPage, $urlStart, $substrLength);
$id = substr($redirectURL, strrpos($redirectURL, '%2F') + 3);
// Get video details
$handler = curl_init();
curl_setopt($handler, CURLOPT_URL, 'http://blip.tv/rss/'. $id);
curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
$videoRSS = curl_exec($handler);
curl_close($handler);
// Parse out the thumbnail URL
$urlStart = strpos($videoRSS, '');
if($urlStart !== false)
{
$substrLength = strpos($videoRSS, '', $urlStart) - $urlStart;
$thumbnailURL = substr($videoRSS, $urlStart + 21, $substrLength - 21);
}
else
{
$urlStart = strpos($videoRSS, 'media:thumbnail url="');
if($urlStart !== false)
{
$substrLength = strpos($videoRSS, '"/>', $urlStart) - $urlStart;
$thumbnailURL = substr($videoRSS, $urlStart + 21, $substrLength - 21);
}
else
return false;
}
return $thumbnailURL;
}
awesome piece of code…works perfect…Thank You!
Hi Ian, this piece of code may need a little tweaking in the wake of the recent upgrade to Blip.tv’s URL embed structure.
In the meantime, I’ve used a custom field and a WordPress function to grab the thumbnail image.
function getBliptvThumb() {
global $post;
$blipID = get_post_meta($post->ID, 'Video', true);
$xml = simplexml_load_file("http://blip.tv/players/episode/$blipID?skin=rss");
$result = $xml->xpath("/rss/channel/item/media:thumbnail/@url");
$thumbnail = (string) $result[0]['url'];
echo '';
}
Store your Blip.tv video ID (the ‘AYLInREC’ bit of http://blip.tv/play/AYLInREC) in a custom field and then just call the getBliptvThumb() function somewhere in your theme.
Hope this helps someone.