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中的超全局变量
Oct 09 PHP
PHP面向对象编程快速入门
Oct 09 PHP
如何使用PHP往windows中添加用户
Dec 06 PHP
《PHP边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
php表单提交问题的解决方法
Apr 12 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
PHP中4种常用的抓取网络数据方法
Jun 04 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
php实现评论回复删除功能
May 23 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP策略模式定义与用法示例
Jul 27 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下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
php注销代码(session注销)
2012/05/31 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
php简单获取目录列表的方法
2015/03/24 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
用js代码改变单选框选中状态的简单实例
2013/12/18 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
jQuery绑定事件on()与弹窗的简要概述
2016/04/27 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
jQuery Collapse1.1.0折叠插件简单使用
2017/08/28 jQuery
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
详解Python中find()方法的使用
2015/05/18 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
2019/07/23 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
如何把python项目部署到linux服务器
2020/08/26 Python
自主招生学校推荐信
2014/09/26 职场文书
2014年检验科工作总结
2014/11/22 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
导游词之天津盘山
2019/11/01 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers