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 字符串操作入门教程
Dec 06 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
通过php删除xml文档内容的方法
Jan 23 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
PHP编程获取各个时间段具体时间的方法
May 26 PHP
PHP培训要多少钱
Jun 06 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
详解PHP PDO简单教程
May 28 PHP
php获取是星期几的的一些常用姿势
Dec 15 PHP
php字符串函数 str类常见用法示例
May 15 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
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
php实现微信公众号无限群发
2015/10/11 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
Javascript实现关联数据(Linked Data)查询及注意细节
2013/02/22 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
浅析JS操作DOM的一些常用方法
2016/05/13 Javascript
轻松实现js选项卡切换效果
2016/09/24 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
JS实现商品筛选功能
2020/08/19 Javascript
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
实现vuex与组件data之间的数据同步更新方式
2019/11/12 Javascript
[01:20:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第四场 8.26
2018/08/30 DOTA
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
python 换位密码算法的实例详解
2017/07/19 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
小米旗下精品生活电商平台:小米有品
2018/12/18 全球购物
如果一个类实现了多个接口但是这些接口有相同的方法名将会怎样
2013/06/16 面试题
建议书范文
2015/02/05 职场文书
会计求职简历自我评价
2015/03/10 职场文书
医院保洁员管理制度
2015/08/05 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python