优酷地址解析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   (也就是手机上用的)

参考:http://blog.csdn.net/feige2008/article/details/8198434