优酷地址解析php源码
作者:matrix 发布时间:2014-03-04 分类:兼容并蓄 零零星星
譬如:http://userscripts.org/scripts/show/119622 效果很不错!
chrome的使用说明:https://www.hhtjim.com/to-youku-ad-script.html
此页面的源码已失效,最新>>php源码优酷视频解析更新
解析优酷视频过程:
例:http://v.youku.com/v_show/id_XNjc1MDI4Nzg0.html
1.获取视频信息
http://v.youku.com/player/getPlayList/VideoIDS/XNjc1MDI4Nzg0
打开后可以看到视频相关信息。
需要其中的seed值、streamfileids里面hd2,mp4或者flv的值以及segs里对应k的值。
hd2、mp4、flv分别代表超清,高清以及标清。
2.拼接下载地址
最终形式:http://f.youku.com/player/getFlvPath/sid/00_00/st/$P0/fileid/$P1?k=$P2
$P0:如果选择mp4(即高清)则为mp4,其余为flv。
$P1:由解密函数getFileID()得到:(php版本)
function getFileIDMixString($seed)
{
$source = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890";
$len = strlen($source);
for ($i = 0; $i < $len; $i++)
{
$seed = ($seed * 211 + 30031) % 65536;
$index = floor($seed / 65536 * strlen($source));
$mixed .= $source[$index];
$source = str_replace($source[$index],'',$source);
}
return $mixed;
}
function getFileID( $fileid, $seed )
{
$mixed = getFileIDMixString($seed);
$ids = explode("*",$fileid);
for ($i = 0; $i < count($ids) - 1; $i++)
{
$idx = $ids[$i];
$realId .= $mixed[$idx];
}
return $realId;
}
说明:此为解密的关键函数,不是我写的,完全是依葫芦画瓢按照下面的C#代码而来:(解密函数getFileID()C#版本)
public static String getFileID(String fileid, double seed)
{
String mixed = getFileIDMixString(seed);
String[] ids = fileid.Split('*');
StringBuilder realId = new StringBuilder();
int idx;
for (int i = 0; i < ids.Length - 1; i++)
{
idx = int.Parse(ids[i]);
realId.Append(mixed[idx]);
}
//Console.Write(realId.ToString());
return realId.ToString();
}
public static String getFileIDMixString(double seed)
{
StringBuilder mixed = new StringBuilder();
StringBuilder source = new StringBuilder("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/\\:._-1234567890");
int index, len = source.Length;
for (int i = 0; i < len; ++i)
{
seed = (seed * 211 + 30031) % 65536;
index = (int)Math.Floor(seed / 65536 * source.Length);
mixed.Append(source[index]);
source.Remove(index, 1);
}
return mixed.ToString();
}
$P2:这个是segs里对应k的值。
如果选择flv(即标清)那么可以找到
"flv":[{"no":0,"size":"9932910","seconds":"277","k":"4be592cfae8eea21282826e4","k2":"167f8074bfb7bdca7"}]}
其中的4be592cfae8eea21282826e4就是$P2。
得到de $P0 、$P1和 $P2,拼接为视频地址:http://f.youku.com/player/getFlvPath/sid/00_00/st/$P0/fileid/$P1?k=$P2
如果视频有很多分段,变更一下$P2就行。
到这里就给个获取优酷地址的php源码:
源码[已经失效]:
调用说明:/XXX.php?id=优酷视频的ID?d=1
d=1表示标清(flv),2表示高清,3表超清.若不写?d=*则默认输出FLV的画质
有些细节处的修改没有写出来,不过php里都是搞好了的。
标清测试:
高清测试:
超清测试:
另附接口:
优酷外链接口(wap地址),这个很简单:
视频:http://v.youku.com/v_show/id_XNjc1MDI4Nzg0.html
外链:
http://m.youku.com/wap/pvs?format=3gphd&id=XNjc1MDI4Nzg0
56网:
视频:ht tp://www.56.com/u30/v_MTA3MDk0Nzg3.html
外链:
http://vxml.56.com/html5/MTA3MDk0Nzg3/ (算的上高清)
http://vxml.56.com/html5/MTA3MDk0Nzg3/?src=3g&res=qvga (也就是手机上用的)