优酷全站视频代理程序

浏览:4262 发布日期:2013/05/12 分类:用法示例 关键字: 优酷 超清 云视
申明:全部搜集于优酷网,版权属于优酷网!由于官网不断地改变规则,故有些视频在采集后播放不了。把代码贴出来,让大家学习研究,请不要用作它途传播!若因此而造成的任何责任,本人概不负责!
演示:http://chaoqing.duapp.com/chaoqing.swf?lists=daili/youku.com<?php


// 防盗链
$Anti_theft = False; // 是否开启防盗链 True 为开启,False 为关闭。

// 需要输出那些分类的,仅在直接调用php的情况下有效。
//不需要输出,直接注释掉或删除那一行。
$p_olist = array(
            84=>"纪录片",
            85=>"综艺",
            96=>"电影",
            97=>"电视剧",
            100=>"动漫"
);
$p_showlist = array(
            86=>"娱乐",
            87=>"教育",
            88=>"旅游",
            89=>"时尚",
            90=>"母婴",
            91=>"资讯",
            92=>"原创",
            94=>"搞笑",
            98=>"体育",
            99=>"游戏",
            102=>"广告",
            103=>"生活",
            104=>"汽车",
            105=>"科技"
);


//好了,下面的东西就不要乱动了,动了后果自负。

error_reporting(0);
header("Content-type: text/xml; charset=utf-8");

//获得当前页面的URL
$fname = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'];

if($Anti_theft == True){
    $refer = $_SERVER["HTTP_REFERER"];
    preg_match('/(.*):\/\/(.*)\//imsU',$refer,$refer);
    if ($_SERVER['SERVER_NAME'] != $refer[2]){
        $xml.= '<list><m label="' . $refer[2]. '请不要盗链本站代理。"/></list>';
        echo $xml;
        exit;
    }

}


if (isset($_GET['show'])){
    // 展示SHOW所有视屏 //
    $xml = get_show_page($_GET['show']);
} elseif (isset($_GET['movie_show'])) {
    // 如果传来的是 电影页面。
    $xml = get_movie_show($_GET['movie_show']);
} elseif (isset($_GET['olist']) and isset($_GET['showlist'])){
    // 同时传来 olist 与 showlist 时,拒绝输出。//
    echo "你是想叫我闹哪个?";
} elseif ( isset($_GET['olist']) ){
    // 处理 olist 列表 //
    if (isset($_GET['page'])) {
        // 传来页数,输出该页内容 //
        $xml = get_olist_page($_GET['olist'],$_GET['page']);
    } else {
        // 没有传来页数,则输出页数。//
        $xml = get_list_page("olist",$_GET['olist']);
    }
} elseif ( isset($_GET['showlist']) ){
    // 处理 showlist 列表
    if (isset($_GET['page'])) {
        // 传来页数,输出该页内容
        $xml = get_showlist_page($_GET['showlist'],page);
    } else {
        // 没有传来页数,则输出页数。 //
        $xml = get_list_page("showlist",$_GET['showlist']);
    }
} else {
    // 没有传来任何值,输出分类列表。
    $xml = get_vlist();
}

// 两头附加上 <list>
$xml ="<list>\n" . $xml . '</list>';

// 如果不为 调试模式 ,则正常输出。
if(!isset($_GET['debug'])){
    echo $xml;
}


// 以下 获取并产生相关的列表

//输出所有支持的分类列表
function get_vlist() {
        global $fname;
    global $p_olist;
    global $p_showlist;
        $list = '';
    foreach($p_olist as $key=>$id)
        {
            $list.='<m list_src="' . $fname . '?olist=' . $key . '" label="'.$p_olist[$key].'" />'."\n";
        }
        $list.='<m list_src="' . $fname . '?showlist=95" label="音乐" />'."\n";
    foreach($p_showlist as $key=>$id)
        {
            $list.='<m list_src="' . $fname . '?showlist=' . $key . '" label="'.$p_showlist[$key].'" />'."\n";
        }
        return $list;
}
//获取分页数量。
function get_list_page($v_name,$v_id) {
    global $fname;
    $list = '';
    if($v_name == "olist"){
        $url="http://www.youku.com/v_olist/c_" . $v_id . ".html";
    } elseif($v_name == "showlist") {
        $url="http://www.youku.com/v_showlist/c" . $v_id . ".html";
    }
    $url=g_contents($url);
    preg_match('/<li class="pass">...<\/li>(.*)<li><a href="\/v_showlist\/(.*).html" charset="(.*)">(.*)<\/a><\/li>/imsU',$url,$page);
    $page=$page[4];
    if ($page == ""){
        preg_match('/<ul class="pages">(.*)<\/ul>/imsU',$url,$page);
        preg_match_all('/charset="(.*)">(.*)<\/a><\/li>/imsU',$page[1],$page);
        $page = end($page[2]);
    }
    if($page!="")for($i=1;$i<=$page;$i++){
        $list.='<m list_src="'.$fname.'?'. $v_name .'=' . $v_id . '&page='.$i.'" label="第'.$i.'页" />'."\n";
    }
    return $list;
}


// 获取指定 olist 某页的所有视频
function get_olist_page($v_id,$page){
    global $fname;
    if ($v_id == 96){
        return get_olist_movie_page($page);
    }
    // http://www.youku.com/v_olist/c_85_p_4.html
    $url='http://www.youku.com/v_olist/c_' . $v_id . '_p_'.$page.'.html';
    $url=g_contents($url);
    $list='';
    preg_match('/<!-- movies list begin -->(.*)<!-- vdata_list end -->/imsU',$url,$arr);
    preg_match_all('|<li class="p_link"><a href="http://www.youku.com/show_page/id_(.*).html" title="(.*)" target="_blank" charset=|imsU',$arr[1],$id);
    //print_r($id);
    $ids=$id[1];
    $title=$id[2];
    foreach($ids as $k=>$id ){
    $list.='<m list_src="'.$fname.'?show='.$id.'" label="'.str_escape($title[$k]).'"/>'."\n";
    }
    return $list;
}

// 针对 电影页面,特别制作。

function get_olist_movie_page($page){
    global $fname;
    $url='http://www.youku.com/v_olist/c_96_p_'.$page.'.html';
    $url=g_contents($url);
    $list='';
    preg_match('/<!-- movies list begin -->(.*)<!-- vdata_list end -->/imsU',$url,$arr);
    preg_match_all('|<li class="p_link"><a href="http:\/\/www.youku.com\/show_page\/id_(.*).html" title="(.*)" target="_blank" charset="(.*)"><\/a><\/li(.*)li class="p_actor"> <span class="">(.*)<\/span><\/li(.*)span class="status">(.*)<\/span(.*)<label>(.*)</label>|imsU',$arr[1],$id);
    $e_id=$id[1];
    $e_title=$id[2];
    $e_Actor=$id[5];
    $e_type=$id[7];
    $e_free=$id[9];
    foreach($e_id as $k=>$e_id ){
        preg_match_all('|>(.*)</a>|imsU',$e_Actor[$k],$Actors);
        $Actors = $Actors[1];
        //print_r($Actors);
        $Actor = '';
        foreach($Actors as $key=>$k_id ){
            if ($key != 0){
                $Actor.= ",";
            }
            $Actor.= $k_id;
        }
        $e_typeB = "";
        if($e_type[$k] != "正片"){
            $e_typeB = '[预]';
        }
        if($e_free[$k] == "今日新增:"){
            $list.='<m list_src="'.$fname.'?movie_show='.$e_id.'" label="'.str_escape($e_typeB . $e_title[$k] .'(' . $Actor . ')').'"/>'."\n";
        }
    }
    return $list;
}

// 输出电影页面细节。

function get_movie_show($show_id){
    $url='http://www.youku.com/show_page/id_' . $show_id . '.html';
    $url=g_contents($url);
    $list='';
    preg_match("|videoUrl:'http://v.youku.com/v_show/id_(\w{13}).html'(.*)><em>播放预告片<\/em><\/a>|imsU",$url,$e_notice);
    preg_match('|href="http://v.youku.com/v_show/id_(\w{13}).html" target="_blank"><em>播放正片<\/em><\/a>|imsU',$url,$e_formal);
    preg_match_all('|http:\/\/v.youku.com\/v_show\/id_(\w{13}).html(.*)>(.*)<\/a>|imsU',$url,$id);
    if($e_formal[1] != ""){$list.='<m type="youku" src="'.$e_formal[1].'" label="观看正片"/>'."\n";}
    if($e_notice[1] != ""){$list.='<m type="youku" src="'.$e_notice[1].'" label="观看预告片"/>'."\n";}
    //print_r($id);
    $e_title=$id[3];
    foreach($e_title as $key=>$k_id ){
        if($k_id != ""){
            preg_match('/<(.*)>/imsU',$k_id,$ids);
            if($ids[1] == ""){
                $list.='<m type="youku" src="'.$id[1][$key].'" label="' . str_escape($k_id) . '"/>'."\n";
            }
        }
    }
    return $list;
}



//输出视频列表
function get_show_page($show_id){
    $url='http://www.youku.com/show_page/id_'.$show_id.'.html';
    $url=g_contents($url);
    $list='';
    preg_match('/id="zySeriesTab">(.*)<\/ul>/imsU',$url,$arr);
    preg_match_all('/<li data="(.*)"/imsU',$arr[1],$id);
    //print_r($id);
    if($id[1][0] == ""){$id[1][0] = "reload_1";}
    foreach ($id[1] as $reload)
    {
        $url="http://www.youku.com/show_episode/id_" . $show_id . ".html?dt=json&divid=" . $reload . "&__rt=1&__ro=" . $reload;
        $url=g_contents($url);
        //preg_match_all('/href="http:\/\/v.youku.com\/v_show\/id_(.*).html/',$url,$v_id);
        //preg_match_all('/target="_blank">(.*)<\/a><\/li>/',$url,$v_name);
        preg_match_all('|href="http://v.youku.com/v_show/id_(.*).html" t(.*)_blank">(.*)</a></li>|',$url,$v_name);
        $v_id = $v_name[1];
        $v_name = $v_name[3];
        foreach($v_id as $key=>$id)
        {
            //echo $v_name[$key].'=>'.$value . "\n";
            $list.='<m type="youku" src="'.$id.'" label="'.str_escape($v_name[$key]).'"/>'."\n";
        }
    }
    return $list;
}

// 输出 showlist 的视频列表
function get_showlist_page($show_id,$page){
    $url='http://www.youku.com/v_showlist/c' . $show_id . 'p' . $page . '.html';
    $url=g_contents($url);
    $list='';
    preg_match('/<!-- movies list begin -->(.*)<!--vdata_list end-->/imsU',$url,$arr);
    preg_match_all('|<li class="v_link"><a href="http:\/\/v.youku.com\/v_show\/id_(.*).html" title="(.*)" target="(.*)" charset="(.*)"><\/a><\/li>|imsU',$arr[1],$id);
    //print_r($id);
    $v_id = $id[1];
    $v_title = $id[2];
    foreach($v_id as $key=>$id)
    {
        //echo $v_name[$key].'=>'.$value . "\n";
        $list.='<m type="youku" src="'.$id.'" label="'.str_escape($v_title[$key]).'"/>'."\n";
    }
    return $list;
}

//一些共用的处理参数。

// 转义特殊符号。
function str_escape($str_subject) {
$arr_search = array('<','>','&','\'','"');
$arr_replace = array('<','>','&',''','"');
$str = str_ireplace($arr_search,$arr_replace,$str_subject);
    return $str;
}

//伪造用户User Agent 读取网页内容。
// 可用 file_get_contents(filename); 代替。

function g_contents($url) {
        $user_agent = $_SERVER['HTTP_USER_AGENT'];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
        @ $data = curl_exec($ch);
        curl_close($ch);
        return $data;
}
?>
评论( 相关
后面还有条评论,点击查看>>