各大视频网站的视频截图抓取
新的一个项目,要有视频的功能,当然只是简单的贴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是起作用的,然后自己再用正则的办法把剩下的视频网站搞定。
兄台真乃神技也
看上去优酷的技术确实比其他的要成熟的多啊。