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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
php 无限级 SelectTree 类
May 19 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
php异常处理使用示例
Feb 25 PHP
PHP中的日期加减方法示例
Aug 21 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP 错误处理机制
Jul 06 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
php图像验证码生成代码
Jun 08 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 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
Thinkphp中的volist标签用法简介
2014/06/18 PHP
详谈php静态方法及普通方法的区别
2016/10/04 PHP
php 常用的系统函数
2017/02/07 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
jquery中ajax学习笔记一
2011/10/16 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
JavaScript组合拼接字符串的效率对比测试
2014/11/06 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
javascript正则表达式中的replace方法详解
2015/04/20 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
Angular6 用户自定义标签开发的实现方法
2019/01/08 Javascript
[01:27]DOTA2电竞之夜 今夜共饮庆功酒
2014/08/02 DOTA
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python实现的读写json文件功能示例
2018/06/05 Python
python中单下划线_的常见用法总结
2018/07/10 Python
python asyncio 协程库的使用
2021/01/21 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
北京-环亚运商测试题.net程序员初步测试题
2013/05/28 面试题
卖房协议书
2014/04/11 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
技术员个人工作总结
2015/03/03 职场文书
社区干部培训心得体会
2016/01/06 职场文书
Python实战之大鱼吃小鱼游戏的实现
2022/04/01 Python