首页 > php教程 > php手册 > PHP嗅探youku视频的真实flv文件地址!

PHP嗅探youku视频的真实flv文件地址!

WBOY
发布: 2016-05-25 16:44:30
原创
1613 人浏览过

认识几个做视频网站的站长他们的视频电影都是来自于我们国内的几大视频网站了,有一站长要我帮助它做一个可以自动测试出youku视频网站的flv真实地址,下面我整理了一下午解决了此问题非常的不错,大家可参考一下。

这个是借力打力,只是抓去朋友网的内容!!!

不过相当好用哦!

看代码:

<?php
$videourl = &#39;http://v.youku.com/v_show/id_XMjA5MjQ0OTQ0.html&#39;;
function get_content($url, $data) {
    if (is_array($data)) {
        $data = http_build_query($data, &#39;&#39;, &#39;&&#39;);
    }
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $result = curl_exec($ch);
    return $result;
}
$str = get_content(&#39;http://share.pengyou.com/json.php?mod=usershare&act=geturlinfo&#39;, array(
    &#39;url&#39; => $videourl
));
$str = json_decode($str);
var_dump($str);
?>
登录后复制

这个测试出来的只是swf文件并不是我们要的flv文件了,后来参考一站长的写法进行了改进

核心代码:

<?php
function fetch_youku_flv($url) {
    preg_match("#id_(.*?).html#", $url, $out);
    $id = $out[1];
    $content = get_curl_contents(&#39;http://v.youku.com/player/getPlayList/VideoIDS/&#39; . $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 == &#39;flv&#39; || $k == &#39;mp4&#39;) 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(&#39;curl_init&#39;)) die(&#39;php.ini未开启php_curl.dll&#39;);
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    $UserAgent = $_SERVER[&#39;HTTP_USER_AGENT&#39;];
    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, &#39;utf-8&#39;) ? iconv(&#39;gbk&#39;, &#39;utf-8//IGNORE&#39;, $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
$url = &#39;http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html&#39;;
echo fetch_youku_flv($url);
?>
登录后复制

访问: http://xiaomizhou.net/demo/flv.php?url=http://v.youku.com/v_show/id_XMzg2OTQ3MjQw.html

输出的结果是:http://f.youku.com/player/getFlvPath/sid/138035737110468_00/st/flv/fileid/03000201004F97EF4A2E350467A09DB266E872-5522-225F-DC45-40B4E1F9BE49?K=c2a4327df2bb5a65261d40ea

这个是可以直接下载的!!


教程链接:

随意转载~但请保留教程地址★

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板