优酷并不像youtube那样提供获取缩略图的API,要获取优酷缩略图,一种方法是用ffmpeg直接读取上述网站的某个视频,然后截取其中的某帧作为该视频的缩略图;另外一种方式则是想办法读取网站自身提供的视频缩略图。前者需要安装ffmpeg,暂时没有办法测试。所以选用第二种方法,通过正则表达式获取优酷自身提供的视频缩略图。

如何获取

function get_youku_thumb($url) {
	$content = file_get_contents($url); 
 
    preg_match( '/id="s_msn2".*?screenshot=(.*?)".?target=/', $content, $matchs );
    return $matchs[1];
}
echo get_youku_thumb('http://v.youku.com/v_show/id_XMjkwMjg5MDQw.html');

运行上述代码,获取的图片路径是

//output
http://g2.ykimg.com/01270F1F464F50877DA3960123193C0A16F2D8-447A-D539-840F-E8AC55D15507

这种方法是在网上发现的,原出处是用PHP获取优酷、土豆视频缩略图,不过正如文章作者所说,一旦优酷改变网页结构,代码也得跟着变。这篇文章中的方法已经无法获取缩略图了, 所以写了上面的代码。

思路与原作者是相同的,通过读取优酷视频网页的代码,找到分享到社交网站(新浪、msn等)的代码,看看这部分是怎么写的,用正则表达式匹配。我使用的是转发到msn的代码,如下

<a title="转发到MSN" charset="400-03-20" id="s_msn2" href="http://profile.live.com/badge/?url=http://v.youku.com/v_show/id_XMzU5NzEyNjI4.html&#038;Title=%E3%80%90iu%E9%85%B7%E6%92%AD%E3%80%91%E4%BC%98%E9%85%B7%E5%87%BA%E5%93%81%E3%80%8A%E6%98%A5%E6%9A%96%E8%8A%B1%E5%BC%80%E3%80%8B%E5%8C%97%E4%BA%AC%E7%83%AD%E6%8B%8D120303&#038;swfurl=http://player.youku.com/player.php/sid/XMzU5NzEyNjI4/v.swf&#038;screenshot=http://g4.ykimg.com/0100641F464F5196D3864F053E026161283E81-3C7E-B99C-E200-F6AF0A7FDF82" target="_blank"><img src="http://static.youku.com/v1.0.0744/v/img/ico_msn.png" /></a>

改善一下可读性,就变成下面这样

<a title="转发到MSN" charset="400-03-20" id="s_msn2"
href="http://profile.live.com/badge/?
url=[视频网址]
&#038;Title=[视频标题]
&#038;swfurl=[swfurl]
&#038;screenshot=[缩略图地址,我们需要的部分]" target="_blank">
<img src="http://static.youku.com/v1.0.0744/v/img/ico_msn.png" />
</a>

有了这个结构,就可以写正则表达式匹配了。如果优酷更新结构,可以按照同样的方法更新正则表达式。但还是希望优酷能像youtube那样多一些API,方便开发者。

把过去的图片WordPress的缩略图,可以将获取缩略图的代码做成shortcode,直接在文章中调用。也可以通过custom_field方式记录优酷视频地址,在主循环中调用该函数获得缩略图,借助timthumb.php等脚本生成缓存存放到本地,就不用每次都去读网页了。

2012-08-04更新

发现有人已经做了现成的库可以调用,大家到这里获取。

11条留言

  1. 大师,文章中视频可否截取缩略图

    1. 那要看是啥视频。比如优酷的话,你先获取文章里优酷视频的地址(正则表达式),再用文中的方法获取视频截图。我没试过,不过理论上还是可行的吧。

  2. 没有API是比较蛋疼啊。。
    而且缩略图只有小的,不知道有没有办法搞到首页焦点那么大的图。
    不过那个大图可能为了节约,是被推到首页时再生成的也说不定。

    1. 不知道怎么截取的,优酷首页那个大视频的截图就比较大,其它的视频我只找到了尺寸比较小的缩略图

  3. :arrow: 利用分享的方法我有想过 可不能实现自动化 懊恼中

    1. 你说的自动化是什么样?难道视频地址也要自动插入?

评论功能已关闭