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 相关文章推荐
PHP4在Windows2000下的安装
Oct 09 PHP
PHP编实现程动态图像的创建代码
Sep 28 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
php快递单号查询接口使用示例
May 05 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
Dec 10 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
Jun 11 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
Aug 28 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 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
php 分页原理详解
2009/08/21 PHP
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
PHP7.0安装笔记整理
2015/08/28 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
用svg制作富有动态的tooltip
2015/07/17 Javascript
js表单验证实例讲解
2016/03/31 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
原生JS实现N级菜单的代码
2017/05/21 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[01:21]DOTA2新纪元-7.0新版本即将开启!
2016/12/11 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python实现RSA加密(解密)算法
2016/02/17 Python
使用pandas的DataFrame的plot方法绘制图像的实例
2018/05/24 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
纪念建党演讲稿范文
2014/01/13 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
网吧员工管理制度
2015/08/05 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle