-4
    var $conn = false;
    var $username = "";
    var $password = "";
    var $error = false;

   function GetBetween($content,$start,$end){
    $r = explode($start, $content);
    if (isset($r[1])){
        $r = explode($end, $r[1]);
        return $r[0];
    }
    return '';
    }

    function get($url)
    {
        $this->conn = new Curl('youtube');

        $html = $this->conn->get($url);

        if(strstr($html,'verify-age-thumb'))
        {
            $this->error = "Adult Video Detected";
            return false;
        }

        if(strstr($html,'das_captcha'))
        {
            $this->error = "Captcah Found please run on diffrent server";
            return false;
        }

    if(!preg_match('/encoded_fmt_stream_map.*/',$html,$match))
        {
            $this->error = "Error Locating Download URL's";
            return false;
        }

        $fmt_url =  substr(urldecode($match[0]), 1);
        $urls = explode(',',$fmt_url);
        $foundArray = array();

        foreach($urls as $url)
        {
        $url_end = strstr($url, "&quality");

       // $foundArray[] = $this->GetBetween($url, "&url=", "&type=");
        $foundArray[substr(strstr($url_end, "&itag="), 6)] = substr( (str_replace($url_end, "", $url)), 4 );

        }

        $formats = array(
            '5'=>array('flv','Low Quality'),
            '6'=>array('flv','Low Quality'),
            '13'=>array('3gp','Low Quality'),
            '17'=>array('3gp','Medium Quality'),
            '18'=>array('mp4','High Quality (480p)'),
            '22'=>array('mp4','High Quality (720p)'),
            '34'=>array('flv','High Quality (320p)'),
            '35'=>array('flv','High Quality (480p)'),
            '36'=>array('3gp','High Quality'),
            '37'=>array('mp4','High Quality (1080p)'),
//            '43'=>array('webm',''),
//            '44'=>array('webm',''),
//            '45'=>array('webm',''),
        );

        foreach ($formats as $format => $meta) {
            if (isset($foundArray[$format])) {
                $videos[] = array('ext' => $meta[0], 'type' => $meta[1], 'url' => urldecode($foundArray[$format]));
            } 
        }

        return ($videos);
    }

私のウェブサイトでビデオを再生するために、youtube(YT)からの出力を解析しています。このコードは、YTがフォーマットを変更した最近まで機能していました。

私が理解していないこのスニペットに関する部分は、「foreach($ urls as $ url)」からのものです。

彼はcurlリクエストから返されたデータを解析しているようです。「GetBetween」fxnを作成して、関連するコードであると想像したものの断片を選択しましたが、それでもnull配列が返されました。

誰かが「$foundArray」に割り当てられているものを説明できますか?また、「$videos[]」配列に割り当てられているもの。「$meta[0]」と「$meta[1]」は、配列の最初の行、つまり「 '5' => array('flv'、'Low Quality')」または配列?

あなたが与えることができるどんな助けでも大いに感謝されるでしょう。前もって感謝します

4

1 に答える 1

0

$ urls内の各URLについて、前のURLの一部を取得し、それをに&quality割り当てます$foundArray[itag]。ここで、itagは後のURLの一部です&itag=(これは常にURLの最後のパラメーターであると思います)。

$formats配列の最初の行については、 $meta[0]isflv$meta[1]isLow Qualityです。したがって、foreach ($formats...)ループは各フォーマットを通過し、URLの1つにフォーマット番号と等しいitagが含まれているかどうかを確認します。一致するものが見つかった場合は$videos、フォーマット情報とデコードされたバージョンのURLを含む行が追加されます。

したがって、結果には$videos、各行が拡張子、ビデオ品質、およびそのバージョンのビデオへのURLで構成される配列が含まれます。

于 2012-09-20T00:55:49.127 に答える