解析获取优酷视频真实下载地址的PHP源代码


Posted in PHP onJune 26, 2013
<?php 
//--调用方法/demo.php?url=http://v.youku.com/v_show/id_XMzkyODA2NTEy.html 
echo getYoukuFlv($_GET['url']); function getYoukuFlv($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; 
} 
?>
PHP 相关文章推荐
PHP 和 MySQL 基础教程(四)
Oct 09 PHP
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
Mar 29 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
中英文字符串翻转函数
Dec 09 PHP
php中通过数组进行高效随机抽取指定条记录的算法
Sep 09 PHP
php导出word格式数据的代码实例
Nov 25 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
PHP 验证登陆类分享
Mar 13 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
Youku 视频绝对地址获取的方法详解
Jun 26 #PHP
解析php 版获取重定向后的地址(代码)
Jun 26 #PHP
php连接函数implode与分割explode的深入解析
Jun 26 #PHP
解析PHP正则提取或替换img标记属性
Jun 26 #PHP
php 在windows下配置虚拟目录的方法介绍
Jun 26 #PHP
关于PHP自动判断字符集并转码的详解
Jun 26 #PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 #PHP
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js获取下拉列表的值和元素个数示例
2014/05/07 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jquery实现勾选复选框触发事件给input赋值
2015/02/01 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
详解bootstrap-fileinput文件上传控件的亲身实践
2019/03/21 Javascript
vue 自定义组件的写法与用法详解
2020/03/04 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
python之消除前缀重命名的方法
2018/10/21 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Django如何将URL映射到视图
2019/07/29 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
差生评语大全
2014/05/04 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
2014年财务人员工作总结
2014/11/11 职场文书
Django migrate报错的解决方案
2021/05/20 Python