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+MYSQL开发工具及资源收藏
Jan 02 PHP
php生成随机数或者字符串的代码
Sep 05 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP $_FILES函数详解
Mar 09 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php获得url参数中具有&amp;的值的方法
Mar 05 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
iis 7下安装laravel 5.4环境的方法教程
Jun 14 PHP
Laravel框架实现文件上传的方法分析
Sep 29 PHP
Laravel 解决composer相关操作提示php相关异常的问题
Oct 23 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
珊瑚虫IP库浅析
2007/02/15 PHP
php 静态页面中显示动态内容
2009/08/14 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP XML Expat解析器知识点总结
2019/02/15 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
验证码按回车不变解决方法
2013/03/29 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python面向对象之继承和组合用法实例分析
2018/08/27 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
如何使用python传入不确定个数参数
2020/02/18 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
师范生自荐信模板
2014/05/28 职场文书
十周年庆典策划方案
2014/06/03 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
校园安全主题班会
2015/08/12 职场文书