各大视频网站的视频截图抓取

6月 28th, 2012 3,420 留下评论 阅读评论

新的一个项目,要有视频的功能,当然只是简单的贴URL和标题罢了,不会涉及到要去上传视频文件,但是在展示视频的时候就需要用到视频截图了,自己去生成截图难度太大了也不现实,去视频的源网站抓取是可行也比较方便的方法。

试过优酷、土豆、酷6、56、腾讯、新浪、搜狐这些国内最大的视频门户,基本都成功获取到截图,其中属优酷最麻烦。

优酷

感觉优酷不愧为国内第一视频门户吧,技术算是最成熟的,安全也做得最好,直接体现在获取它的视频截图真心不容易。用查看html源码的方式根本无法实现,用firebug等工具找图片也不行因为图片是在flash里的。不过网上已经有文章告诉了方法,自己也可以通过httpfox或chrome自带的Network工具查看发起的http请求去找图片地址,优酷通过向URL:

1
'http://v.youku.com/player/getPlayList/VideoIDS/视频的ID/version/5/source/out'

而视频的ID就是普通视频URL中id_xxx中的xxx串,URL返回一段json字符串,其中的logo字段就是图片地址,可以发现此图片地址也是一个动态请求,非常复杂。

1
2
3
4
5
6
7
8
9
10
$url = 'http://v.youku.com/v_show/id_XMTA0NTM2MzI4.html';
preg_match_all("/id\_(\w+)[\=|.html]/", $url, $matches);
if(!empty($matches[1][0])) {
	$id = $matches[1][0];
	$u = 'http://v.youku.com/player/getPlayList/VideoIDS/'.$id.'/version/5/source/out';
	$json_str = file_get_contents($u);
	$json = json_decode($json_str);
	$image_url = $json->data[0]->logo;
	echo $image_url;
}

56

类似优酷,请求url为http://vxml.56.com/json/视频ID/?src=out,视频ID也好辨别。//测试可行,此来源网络

土豆、酷6、腾讯、新浪、搜狐

这些都比较简单,打开html源码细心点就能找到image的url,用正则就可以抓取出来了。其中酷6比较麻烦,把url中的:和.都用unicode编码了,先用字符串匹配给转了回来再去正则,因为不知道正则字符串中怎么搞反斜杠=.=(\\不起作用咩…)

  • 土豆:开头的js代码中有个属性listData,里面放了5部视频的信息,选第一部,其中的pic属性,正则字符串:/,pic:\”([\w\/\.\:]+)\”/
  • 酷6:Ctrl-F搜索bigpicpath属性,也在js代码中,正则字符串:/\”bigpicpath\”\:\”([\w\/\.\:]+)\”/
  • 腾讯:pic属性,正则字符串:/pic \:\”([\w\/\.\:]+)\”/
  • 新浪:pic属性,正则字符串:/pic\: \'([\w\/\.\:]+)\’/ 和楼上非常相似,难道又是抄袭?哈哈哈
  • 搜狐:cover属性,正则字符串:/var cover=\”([\w\/\.\:]+)\”/

在网上找资料的时候发现一个看似很好用的PHP的VideoUrlParser类,试了下只有优酷和56是起作用的,然后自己再用正则的办法把剩下的视频网站搞定。

原先的VideoUrlParser类

改良后VideoUrlParser类

Categories: PHP 标签:, ,
  1. null | #沙发
    7月 12th, 2012 18:30

    :wink: 兄台真乃神技也

  2. 6月 29th, 2012 09:19

    看上去优酷的技术确实比其他的要成熟的多啊。