播放列表php代码,【求助】如何直接在Discuz! 代码 FLASH代码中添加优酷播放列表...

继续顶起来

http://bbs.phpchina.com/viewthre ... %3D2&sid=JAlyyi

PHP代码:

/*

* 作用:采集思路。

* 目标:优酷视讯.

* date:2008-12-28

* autor:Yuan

* charset:UTF-8

*/

HEADER("CONTENT-TYPE:TEXT/HTML; CHARSET=UTF-8");

set_time_limit(0);

//实现有效连接

function get_url_content($Url,$Method = 'c') {

//引入需要的语言编码.如果没有, 就会默认为utf-8,不必担心.

global $Charset;

$Urlarr = parse_url($Url);

//如果检测不出域名,就返回.

if (!isset($Urlarr['host'])) {

return false;

}

//我们用智能方式定义header头倍信息.

foreach (@getallheaders() as $key => $val){

$key==='Host' && $val = $Urlarr['host'];

$key==='Referer' && $val ='http://'.$Urlarr['host'];

$str .= "'$key

c9cc958f65c7a1bd44df9e051c4a8e2c.gifval', \n";

}

//虚拟来路.

!eregi('Referer',$str) && $str .="'Referer:http://{$Urlarr['host']}', \n";

//经过修正, 基本上, 来路也是那个站, 主机也是Url站点.

$Header = array(trim($str));

//下面仅仅是选择用哪个程序来采集.

if($Method === 'f'&&function_exists('file_get_contents')) {

$opts = array(

'http'=>array(

'method'=>"GET",

'header'=>$Header,

)

);

$cxContext = stream_context_create($opts);

$file_contents = @file_get_contents($Url, false, $cxContext);

} elseif ($Method === 'c'&&function_exists('curl_init')) {

$Ch = curl_init();

$Timeout = 5;

curl_setopt($Ch,CURLOPT_HTTPHEADER,$Header);

curl_setopt ($Ch, CURLOPT_URL, $Url);

curl_setopt ($Ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt ($Ch, CURLOPT_CONNECTTIMEOUT, $Timeout);

$file_contents = curl_exec($Ch);

curl_close($Ch);

}

//为了让样式显示得漂亮,我们给它加一句目标引向.

$file_contents = str_replace('',"\n",$file_contents);

//处理最常见的几种编码, 如果目标网站没有编码, 就默认为GBK

!preg_match('/charset=([^<>"]*)"/isU',$file_contents,$lang) && $lang[1]='GBK';

function_exists('mb_convert_encoding') && $file_contents = mb_convert_encoding($file_contents,empty($Charset)?'UTF-8'

c9cc958f65c7a1bd44df9e051c4a8e2c.gifCharset,$lang[1]);

//注销部分代码;

unset($Url,$lang,$Timeout,$Urlarr,$Charset);

return $file_contents;

}

//清除部分无用的内容.

function clert($mess)

{

if($mess == '')

return false;

$mess = preg_replace(array('//isU','//isU','//isU','//isU'),'',$mess);

$mess = preg_replace(array('/&.*;/iU','/

.*/is','/
.*/isU'),'',$mess);

$mess = str_replace('该会员更多专辑','<>',$mess);

return $mess;

}

// 不要被上面的函数吓怕, sonny有着20多个文件呢, 相比之下,这个简约多了.

// 现在我们开始吧.

/* 分晰一下它的专辑播放.

fo.addVariable("VideoIDS",10332116);  //如果是专辑就有专辑ID

fo.addVariable("Version","/v1.0.0375");  //播放器的版本,基本可以无视.

fo.addVariable("isAutoPlay",true);   //是否连续播放,即全部播放

fo.addVariable("Type","Folder");   //类型

fo.addVariable("Fid","2072974");   //单视屏ID  有可能是介绍.

fo.addVariable(&quot

5ed169d678b20a33521cc07406290239.gift","0");    //专辑的第几个,顺序上扬.

fo.addVariable("Ob","1");   //这个应该是自动播放.

"/v/playlistsummary/vid/"+vid+"/f/"+fid+"/o/"+ob+"/p/"+pt  //往这里面一靠.

http://player.youku.com/player.p ... XMzc3ODMyNDA=/v.swf  //也可以带成这样..

*/

//我们测试一个专辑页:

$url = 'http://www.youku.com/playlist_show/id_2812055_ascending_1_page_1.html';

$file = get_url_content($url);

//清除掉JS, 防止它自动报错.

$file = clert($file);

//让meta信息抓出来. $str数组将装载所有内容.

$str = get_meta_tags($url);

//抓取标题

preg_match('/

([^-<>]+) - 专辑 - 优酷视频/isU',$file,$t);

$str['title'] = $t[1];

//部分人士需要类别的.我们也抓出来

preg_match('/charset="[0-9]{3}-[0-9]{3}-[0-9]{3}">([^<>]*)/isU',$file,$s);

$str['fl'] = $s[1];

//视频个数

preg_match('/([0-9]+)/isU',$file,$n);

$str['num'] = $n[1];

//视频总播放时间.

preg_match('/([0-9]+:[0-9]+:[0-9]+)/isU',$file,$n2);

$str['time'] = $n2[1];

//获得重要内容.这是一个很有意思的思维组.

preg_match('/

.*[\s\n\r]/is',$file,$l);

$mess = preg_replace('/

.*/is','',$l[0]);

/*

$str['num']记录着一个专辑的所有个数, 它的一页是显示20,所以我们来一句ceil($str['num']/20)结果是3;

为了快速,我们就把第一页给放弃,直接从2开始.循环到结束.

操作的内容就比较少了, 清除及抓取有内的位置即可, 全部合并起来,组成新的内容体.

少过20页,php都会完美执行.不用担心超时.

*/

for ($a=2;$a<=ceil($str['num']/20);$a++)

{

$url = preg_replace('/_[0-9]+.html/isU',"_$a.html",$url);

$file = clert(get_url_content($url));

preg_match('/

.*[\s\n\r]/is',$file,$l);

$mess .= preg_replace('/

.*/is','',$l[0]);

unset($file,$l);

}

//测试, 印出所有内容 echo $mess;

$file = $mess;

//抓取所有图片

preg_match_all('/src="(http:\/\/vimg[0-9]{1,2}.youku.com\/[a-z-0-9]+)"/isU',$file,$img);unset($img[0]);

$str['img']=$img[1];

preg_match_all('/charset="[0-9]+-[0-9]+-[0-9]+-[0-9]+">([^<>]+)/isU',$file,$title);unset($title[0]);

$str['tite']=$title[1];

//抓取所有视频播放信息

preg_match_all('/

.*v_playlist\/([0-9a-z]+).html/isU',$file,$vtie);unset($vtie[0]);

$str['vtie']=$vtie[1];

//如果单独播放,用这个.

//preg_match_all('/id=&quot

5ed169d678b20a33521cc07406290239.giflayListFlag_([^<>"]+)"/isU',$file,$vtie);unset($vtie[0]);

//跑到最后, 就产生一个完美而且强大的数组.

print_r($str);

?>

一步一步教你采集..如果你认真, 会发for是有问题..URL将专辑ID定死了.循环起来肯定是采集不全,或者不正确.

为此我们改用正则来替换.

复制PHP内容到剪贴板

PHP代码:

for ($a=2;$a<=ceil($str['num']/20);$a++)

{

$url = preg_replace('/_[0-9]+.html/isU',"_$a.html",$url);

$file = clert(get_url_content($url));

preg_match('/

.*[\s\n\r]/is',$file,$l);

$mess .= preg_replace('/

.*/is','',$l[0]);

unset($file,$l);

}

还有一个要注意: set_time_limit(0); 这一句, 无论如何,建议你加上..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值