以下是从网上收集到的,解析获取优酷视频真实下载地址的PHP源代码,需要的朋友可参考下。

阿里云-推广AD

<?php
// –调用方法/demo.php?url=http://v.youku.com/v_show/id_XMjM0OTY4MTg0.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;
}
?>