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 验证图片生成函数
May 21 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP的Yii框架中过滤器相关的使用总结
Mar 29 PHP
php文件上传后端处理小技巧
May 22 PHP
Laravel如何友好的修改.env配置文件详解
Jun 07 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
Laravel手动返回错误码示例
Oct 22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
php 文件上传至OSS及删除远程阿里云OSS文件
Jul 04 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
随机广告显示(PHP函数)
2006/10/09 PHP
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
2010/03/14 Javascript
Javascript的一种模块模式
2010/09/08 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
JS前端加密算法示例
2016/12/22 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
Vue实现点击时间获取时间段查询功能
2020/08/21 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
如何在Angular8.0下使用ngx-translate进行国际化配置
2019/07/24 Javascript
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
Python读写Excel文件的实例
2013/11/01 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
python 日志 logging模块详细解析
2020/03/31 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
商场经理竞聘演讲稿
2014/01/01 职场文书
搞笑获奖感言
2014/01/30 职场文书
项目投资意向书
2014/04/01 职场文书
自荐信格式模板
2015/03/27 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers