PHP获取youku视频真实flv文件地址的方法


Posted in PHP onDecember 23, 2014

本文实例讲述了PHP获取youku视频真实flv文件地址的方法。分享给大家供大家参考。具体分析如下:

有一站长要我帮助它做一个可以自动测试出youku视频网站的flv真实地址,下面我整理了一下午解决了此问题非常的不错,大家可参考一下.

这个是借力打力,只是抓去朋友网的内容,不过相当好用,代码如下:

<?php 

$videourl='http://v.youku.com/v_show/id_XMjA5MjQ0OTQ0.html'; 

function get_content($url ,$data){ 

 if(is_array($data)){ 

  $data = http_build_query($data, '', '&');  

 } 

 $ch = curl_init(); 

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); 

 curl_setopt($ch, CURLOPT_POST, 1); 

 curl_setopt($ch, CURLOPT_HEADER, 0); 

 curl_setopt($ch, CURLOPT_URL,$url); 

 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 

 $result = curl_exec($ch); 

 return $result; 

} 

$str = get_content('http://share.pengyou.com/json.php?mod=usershare&act=geturlinfo',array('url'=>$videourl)); 

$str=json_decode($str); 

var_dump($str); 

?>

这个测试出来的只是swf文件并不是我们要的flv文件了,后来参考一站长的写法进行了改进,核心代码如下:
<?php  

function fetch_youku_flv($url){  

    preg_match("#id_(.*?).html#",$url,$out);  

    $id=$out[1];  

    $content=get_curl_contents('http://v.youku.com/player/getPlayList/VideoIDS/'.$id);  

    $data=json_decode($content);  

    foreach($data->data[0]->streamfileids AS $k=>$v){  

    $sid=getSid();  

    $fileid=getfileid($v,$data->data[0]->seed);  

    $one=($data->data[0]->segs->$k);  

    if($k == 'flv' || $k == 'mp4') return "http://f.youku.com/player/getFlvPath/sid/{$sid}_00/st/{$k}/fileid/{$fileid}?K={$one[0]->k}";  

    continue;  

    }  

}   

function get_curl_contents($url, $second = 5){  

    if(!function_exists('curl_init')) die('php.ini未开启php_curl.dll');  

    $c = curl_init();  

    curl_setopt($c,CURLOPT_URL,$url);  

    $UserAgent=$_SERVER['HTTP_USER_AGENT'];  

    curl_setopt($c,CURLOPT_USERAGENT,$UserAgent);  

    curl_setopt($c,CURLOPT_HEADER,0);  

    curl_setopt($c,CURLOPT_TIMEOUT,$second);  

    curl_setopt($c,CURLOPT_RETURNTRANSFER, true);  

    $cnt = curl_exec($c);  

    $cnt=mb_check_encoding($cnt,'utf-8')?iconv('gbk','utf-8//IGNORE',$cnt):$cnt; //字符编码转换  

    curl_close($c);  

    return $cnt;  

}  

function getSid() {  

    $sid = time().(rand(0,9000)+10000);  

    return $sid;  

}  

function getkey($key1,$key2){  

    $a = hexdec($key1);  

    $b = $a ^ 0xA55AA5A5;  

    $b = dechex($b);  

    return $key2.$b;  

}  

function getfileid($fileId,$seed) {  

    $mixed = getMixString($seed);  

    $ids = explode("*",$fileId);  

    unset($ids[count($ids)-1]);  

    $realId = "";  

    for ($i=0;$i < count($ids);++$i) {  

    $idx = $ids[$i];  

    $realId .= substr($mixed,$idx,1);  

    }  

    return $realId;  

}  

function getMixString($seed) {  

    $mixed = "";  

    $source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/:._-1234567890";  

    $len = strlen($source);  

    for($i=0;$i< $len;++$i){  

    $seed = ($seed * 211 + 30031) % 65536;  

    $index = ($seed / 65536 * strlen($source));  

    $c = substr($source,$index,1);  

    $mixed .= $c;  

    $source = str_replace($c, "",$source);  

    }

    return $mixed;  

}  

?>

调用方法,代码如下:
$url='http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html';

echo fetch_youku_flv($url);

访问:

http://xiaomizhou.net/demo/flv.php?url=http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html

输出的结果是:

http://f.youku.com/player/getFlvPath/sid/138035737110468_00/st/flv/fileid/03000201004F97EF4A2E350467A09DB266E872-5522-225F-DC45-40B4E1F9BE49?K=c2a4327df2bb5a65261d40ea

这个是可以直接下载的.

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP 根据IP地址控制访问的代码
Apr 22 PHP
《PHP编程最快明白》第八讲:php启发和小结
Nov 01 PHP
用php实现选择排序的解决方法
May 04 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
ThinkPHP标签制作教程
Jul 10 PHP
php中current、next与reset函数用法实例
Nov 17 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
PHP hebrev()函数用法讲解
Feb 21 PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 PHP
php解决安全问题的方法实例
Sep 19 PHP
php实现refresh刷新页面批量导入数据的方法
Dec 23 #PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 #PHP
php打印输出棋盘的实现方法
Dec 23 #PHP
php新浪微博登录接口用法实例
Dec 23 #PHP
PHP+jquery+ajax实现即时聊天功能实例
Dec 23 #PHP
PHP采集静态页面并把页面css,img,js保存的方法
Dec 23 #PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 #PHP
You might like
Laravel日志用法详解
2016/10/09 PHP
PHP验证码无法显示的原因及解决办法
2017/08/11 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
Dojo 学习要点
2010/09/03 Javascript
JS网页播放声音实现代码兼容各种浏览器
2013/09/22 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
js中开关变量使用实例
2017/02/24 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
详解Vue中添加过渡效果
2017/03/20 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
加快Vue项目的开发速度的方法
2018/12/12 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python文件操作类操作实例详解
2014/07/11 Python
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python pygame实现2048游戏
2018/11/20 Python
解决python 上传图片限制格式问题
2019/10/30 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
小学生开学感言
2014/02/28 职场文书
英文推荐信格式范文
2014/05/09 职场文书
复活读书笔记
2015/06/29 职场文书
防震减灾主题班会
2015/08/14 职场文书