Created
January 29, 2014 05:05
-
-
Save phoenixg/8682128 to your computer and use it in GitHub Desktop.
优酷视频地址嗅探脚本
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// 引用自:http://www.oschina.net/code/snippet_616067_22723?p=2#comments | |
// 调用方法http://../flv.php?url=http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html | |
// 似乎只支持低清晰度的视频地址 | |
echo fetch_youku_flv($_GET['url']); | |
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; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment