也发一个视频采集函数
大概是昨天把,skidu的项目完成了后台阶段的开发,嗯,功能很简陋,但剩下的时间也不多了,所以skidu果断转入了部分前台功能的编写,因为是要山寨lofter.com,而目标站里面有一个功能就是发布视频文章的时候只需要输入视频所在网页的网址系统就能自动匹配出正确的视频地址、视频标题。于是,大概折腾了有小半天时间后,skidu写出了下面这个小函数。代码暂时只是实现了功能,并未进行性能优化处理,有兴趣的朋友可以参考参考,如若后面有时间优化它的话我会更新函数。
代码如下,配有简单注释说明(变量是自己随意命名的╮(╯▽╰)╭)~~
/**
*获取视频信息
*@param string $url 视频所在页面的网址(非视频地址)
*@return Array $result 包含视频标题(title)、视频真实地址(content)、视频缩略图(thumb)的一个一维数组
*@todo 暂时只支持优酷、土豆、酷六、56网的视频采集
*@author skidu
*@license skidu http://wwww.skidu.me/
*/
function getvideo($url){
$url_r = "/http://[w]+.(youku.com|tudou.com|ku6.com|56.com)[/](.*)/(.*)/";
preg_match_all($url_r,$url,$n_url);
if($n_url){
$a = fopen($url,'rb');
//优酷/土豆/酷6/56网
switch($n_url[1][0]){
//优酷采集
case "youku.com":
preg_match_all('/id_(.*).html/',$url,$content);
$title_r = "/<title>(.*) -(.*)- 优酷视频 - 在线观看</title>/U";
$img_r = "/+0800|(.*?)|">/i";
while (!feof($a)) {
$inn .= fread($a, 1024);
preg_match_all($title_r,$inn,$title);
preg_match_all($img_r,$inn,$img);
}
$title = $title[1][0];
$content = "http://player.youku.com/player.php/sid/".$content[1][0]."/v.swf";
$image = $img[1][0];
break;
//土豆采集
case "tudou.com":
$title_r = "/,kw = title = '(.*)'/";
$img_r = "/,thumbnail = pic = '(.*)'/";
$vid_r = "/,iid_code = icode = '(.*)'/U";
while (!feof($a)) {
$inn.= iconv("gbk","utf-8",fread($a, 1024));
preg_match_all($title_r,$inn,$title);
preg_match_all($vid_r,$inn,$vid);
preg_match_all($img_r,$inn,$img_array);
}
$title = $title[1][0];
$content = "http://www.tudou.com/v/".$vid[1][0]."/v.swf";
$image= $img_array[1][0];
break;
//酷六采集
case "ku6.com":
$title_r = "/<meta name="title" content="(.*)" />/U";
$img_r ="/, cover: "(.*)", data: {/";
$content_r = "/<p class="con_A"><input class="text_A" value="(.*)" title="点击右侧复制按钮直接复制内容" readonly><span class="flash">加载中</span></p>/U";
while (!feof($a)) {
$inn.= iconv("gbk","utf-8",fread($a, 1024));
preg_match_all($title_r,$inn,$title);
preg_match_all($img_r,$inn,$img_array);
preg_match_all($content_r,$inn,$content);
}
$content = $content[1][0];
$title = $title[1][0];
$image = $img_array[1][0];
break;
//56采集
case "56.com":
$hr = explode("/",$url);
$id=$hr[4];
$title_r = "/<title>(.*) -(.*)-56网视频</title>/U";
$img_r = "/var _oFlv_c = {(.*)"img":"(.*)"};/U";
while (!feof($a)) {
$inn.= fread($a, 1024);
preg_match_all($title_r,$inn,$title);
preg_match_all($img_r,$inn,$img_array);
}
$title = $title[1][0];
$trans = array("\" => ");
$image = strtr($img_array[2][0], $trans);
$content = "http://player.56.com/".$id.".swf";
break;
}
$result = array(
"title"=>$title,
"content"=>$content,
"thumb"=>$image
);
return $result;
}else{
return "暂不支持发布该网站的视频!";
}
}
能入库及完美了,呵呵
呵呵,写这个函数的原本目的就只是能抓取到我需要的数据
入库神马的当然更容易了 :hei:
很实用的功能,最新版本的wordpress里面也集成了类似的功能,不知道是不是同样的原理
原理都是差不多的,只是具体实现方法不一样罢了
skidu这里写的这个函数的实现方法的局限性很大,只能提取部分网站
前几天大致看了下curl,嗯,用这个的话应该会有更好的收获的