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简单封装了一些常用JS操作
Feb 25 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
php 解压rar文件及zip文件的方法
May 05 PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 PHP
php进行支付宝开发中return_url和notify_url的区别分析
Dec 22 PHP
cakephp打印sql语句的方法
Feb 13 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
php读取torrent种子文件内容的方法(测试可用)
May 03 PHP
浅谈PHP Cookie处理函数
Jun 10 PHP
php实现的中文分词类完整实例
Feb 06 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
PHPstorm激活码2020年5月13日亲测有效
Sep 17 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
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
让你的PHP同时支持GIF、png、JPEG
2006/10/09 PHP
PHP array 的加法操作代码
2010/07/24 PHP
PHP环境搭建(php+Apache+mysql)
2016/11/14 PHP
Referer原理与图片防盗链实现方法详解
2019/07/03 PHP
JavaScript 比较时间大小的代码
2010/04/24 Javascript
jquery 触发a链接点击事件解决方案
2013/05/02 Javascript
jQuery把表单元素变为json对象
2013/11/06 Javascript
node.js中实现同步操作的3种实现方法
2014/12/05 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
详解ES6数组方法find()、findIndex()的总结
2020/05/12 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
2019/08/09 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
详解python logging日志传输
2020/07/01 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
EJB实例的生命周期
2016/10/28 面试题
法学专业应届生求职信
2013/10/16 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
环保倡议书300字
2014/05/15 职场文书
群教个人对照检查材料
2014/08/20 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
收款授权委托书
2014/10/02 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
VW、VH适配移动端的解决方案与常见问题
2023/05/21 HTML / CSS