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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
php根据年月获取季度的方法
Mar 31 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
8个PHP程序员常用的功能汇总
Dec 18 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
php格式文件打开的四种方法
Feb 24 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
laravel框架实现去掉URL中index.php的方法
Oct 12 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
关于尾递归的使用详解
2013/05/02 PHP
php文件上传的两种实现方法
2016/04/04 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
用prototype实现的简单小巧的多级联动菜单
2007/03/24 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
js实现两个值相加alert出来精确到指定位
2013/09/25 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 探针的实现原理
2016/04/23 Python
python中string模块各属性以及函数的用法介绍
2016/05/30 Python
Python批量查询域名是否被注册过
2017/06/21 Python
python3解析库lxml的安装与基本使用
2018/06/27 Python
python里dict变成list实例方法
2019/06/26 Python
python进阶之自定义可迭代的类
2019/08/20 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Python之多进程与多线程的使用
2021/02/23 Python
澳大利亚领先的在线美容商城:Adore Beauty
2017/04/14 全球购物
普通党员自我剖析材料
2014/10/07 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
新娘婚礼致辞
2015/07/27 职场文书
pytorch 如何使用float64训练
2021/05/24 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
python lambda 表达式形式分析
2022/04/03 Python