0

youku から直接ファイルをダウンロードするリンクを取得しようとしています。

URL の例: http://v.youku.com/v_show/id_XNDU0MTgxNzI0.html

ダウンロード パスを模倣しようとして、ビデオ ダウンロード Web サイトを使用しました。hxxp://flvcd を使用しました。com を使用してリンクを解析します。(検索フィールドに URL の例を貼り付けると、結果が表示されます。4 つのリンクがあるはずです)。

4 つの直接リンクを取得したら、fiddler2 を使用して HTTP 出力をキャプチャしました。ビデオの最初の部分を見つけることができました (flvcd Web サイトによると 4 つあるはずです)。

ページ ソースで直接ダウンロード リンクの文字列を検索してみましたが、一致するものが見つかりませんでした。実際の直接リンクは、サイトの javascript を使用して取得されていると思いますか?

誰かがこれに光を当てることができますか?

4

1 に答える 1

0

これは私が使用しているコードです。ここSOの別の回答からスマーフしましたが、今は見つかりません..

<?php

class VideoUrlParser{
    private $video_code;
    private $video_type;
    private $success;

    public function __construct($url = null, $type = null) {
        $this->success = false;

        if(!empty($url) && !empty($type)) {
            $this->video_code = trim($url);
            $this->video_type = trim($type);
            $this->success = true;
            return;
        }

        if(!empty($url)) {
            $urls = parse_url(trim($url));

            //url is http://youtu.be/xxxx
            if($urls['host'] == 'youtu.be'){
                $this->video_code = ltrim($urls['path'],'/');
                $this->video_type = "youtube";
                $this->success = true;
            }
            else if($urls['host'] == 'youtube.com' || $urls['host'] == 'www.youtube.com'){
                $this->video_type = "youtube";

                //url is http://www.youtube.com/embed/xxxx
                if(strpos($urls['path'],'embed') == 1){
                    $this->video_code = end(explode('/',$urls['path']));
                    $this->success = true;
                }
                //http://www.youtube.com/watch?feature=player_embedded&v=m-t4pcO99gI
                //url is http://www.youtube.com/watch?v=xxxx
                else{
                    parse_str($urls['query'],$parts);
                    $this->video_code = $parts['v'];
                    $this->success = true;
                }
            }
            else if(strpos($urls['host'],'youku.com') > 0){
                $this->video_type = "youku";
                $regExp = "#/(?:player.php/sid/|v_show/id_)([a-zA-Z0-9]+)(?:/|\\.)#";

                    if(preg_match($regExp, $urls['path'], $url_parts)){
                        $this->video_code = $url_parts[1];
                        $this->success = true;
                    }
                }
            //url is xxxx only
            else if(strpos($url,'/')===false){
                $this->video_code = $url;
                $this->video_type = "unknown";
            }
            return;
        }
    }

    public function success() {
        return $this->success;
    }
    public function getVideoType() {
        return $this->video_type;
    }
    public function getVideoCode() {
        return $this->video_code;
    }
    public function getVideoURL() {
        if($this->video_type == "youtube") {
            return 'http://www.youtube.com/?v=' . $this->video_code;
        } elseif($this->video_type == "youku") {
            return "http://v.youku.com/v_show/id_" . $this->video_code . ".html";
        }
    }
    public function getEmbedCode($rel, $width, $height) {
        if($this->video_type == "youtube") {
            return '<iframe src="http://www.youtube.com/embed/'.$this->video_code.'?rel='.$rel.'" frameborder="0" width="'.($width?$width:560).'" height="'.($height?$height:349).'"></iframe>';
        } else if($this->video_type == "youku") {
            return '<iframe width="'.($width?$width:560).'" height="'.($height?$height:349).'" src="http://player.youku.com/player.php/sid/'.$this->video_code.'/v.swf"></iframe>';
        } else {
            return "unknown video type in class.video_url_parser";
        }

    }
}
于 2012-10-25T07:49:21.177 に答える