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 set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php header示例代码(推荐)
Sep 08 PHP
php学习之简单计算器实现代码
Jun 09 PHP
PHP代码审核的详细介绍
Jun 13 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
Jul 13 PHP
PHP大文件及断点续传下载实现代码
Aug 18 PHP
详细分析PHP7与PHP5区别
Jun 26 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
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
第五章 php数组操作
2011/12/30 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
Laravel如何创建服务器提供者实例代码
2019/04/15 PHP
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
JavaScript中如何通过arguments对象实现对象的重载
2014/05/12 Javascript
js实现字符串转日期格式的方法
2015/05/20 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
nuxt.js中间件实现拦截权限判断的方法
2018/11/21 Javascript
javascript验证form表单数据的案例详解
2019/03/25 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
基于ajax实现上传图片代码示例解析
2020/12/03 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
Form表单及django的form表单的补充
2019/07/25 Python
Python如何实现远程方法调用
2020/08/07 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
main 函数执行以前,还会执行什么代码
2013/04/17 面试题
简历中求职的个人自我评价
2013/12/03 职场文书
超市业务员岗位职责
2013/12/05 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
创业计划书之花店
2019/09/20 职场文书