web-dev-qa-db-ja.com

PHP)でYoutubeビデオをダウンロードする

PHPを使用してYoutubeビデオをダウンロードする方法を探しています。私はこれを何時間も行う方法を探しましたが、残念ながら私が見つけたすべてのGoogleの結果は古く、もう機能しません。

誰かがこれを行う方法を説明したり、それを詳細に説明している最新の記事へのリンクを提供していただければ幸いです。

どうもありがとう。

18
Will

最初にすべきことは、 Fiddler のようなツールを入手して、YouTubeのビデオページにアクセスすることです。 Fiddlerには、FLV自体を含め、そのページを構成するすべてのファイルが表示されます。これで、ビデオがCSSファイルの1つではなく、画像ファイルでもないことがわかりました。あなたはそれらを無視することができます。大きなファイルを探します。 URLを見ると、_/videoplayback_で始まります。

さて、それを見つけたら、ブラウザがそのファイルを取得することをどのように知っていたかを理解してください。セッションを検索し(Ctrl + F)、「ビデオ再生」を探します。 http://www.youtube.com/watch?v=123asdf のように、最初にアクセスしたページにヒットが表示されます。そのファイルを掘り下げると、IDが「watch-player」のDIVタグが表示されます。その中には、フラッシュプレーヤーをセットアップするためのスクリプトタグがあり、その中にはすべてのフラッシュパラメーターがあります。それらの中にはビデオへのURLがあります。

これで、ツールを使用してブラウザがどのようにツールに到達したかを理解する方法がわかりました。この動作をPHPでどのように複製しますか?

ビデオを参照するページでfile_get_contents()を実行します。そのウォッチプレーヤーdivにないものはすべて無視してください。 URLを含む変数が見つかるまで、コードを解析します。そこから、おそらくそのURLをエスケープ解除する必要があります。取得したら、file_get_contents()(または実行しようとしていることに応じて他のダウンロードメソッド)を実行してURLを取得できます。とても簡単です。 HTML解析コードは最も複雑になります。

最後に、これから行うことは違法である可能性があることに注意してください。 EULAを確認してください。

17
Brad

4週間ごとに古くなるマニュアル/ハウツーを書く人は誰もいません。最も近い方法は、最新の実装で実際の抽出方法を調べることです。かなり読みやすい:

http://bitbucket.org/rg3/youtube-dl/raw/2010.08.04/youtube-dl

読み通したり再実装したりしたくない場合は、明らかに単純ではありません。PHPからそのまま実行できます。

  system("youtube-dl '$url'");
2
mario

前回、ブロッケンchrome拡張機能の1つを修正して、YouTubeビデオをダウンロードする作業をしていました。スクリプト部分を変更して修正しました。(Javascript)

var links = new String();
var downlink = new String();
var has22 = new Boolean();
has22 = false;
var Marked=false;

var FMT_DATA = fmt_url_map;//This is html text that you have to grab. In case of extension it was readily available through:document.getElementsByTagName('script');

var StrSplitter1='%2C', StrSplitter2='%26', StrSplitter3='%3D'; 
if (FMT_DATA.indexOf(',')>-1) { //Found ,
    StrSplitter1=','; 
    StrSplitter2=(FMT_DATA.indexOf('&')>-1)?'&':'\\u0026'; 
    StrSplitter3='='; 
}

var videoURL=new Array(); 
var FMT_DATA_PACKET=new Array();
var FMT_DATA_PACKET=FMT_DATA.split(StrSplitter1); 

for (var i=0;i<FMT_DATA_PACKET.length;i++){
    var FMT_DATA_FRAME=FMT_DATA_PACKET[i].split(StrSplitter2); 
    var FMT_DATA_DUEO=new Array(); 

    for (var j=0;j<FMT_DATA_FRAME.length;j++){
        var pair=FMT_DATA_FRAME[j].split(StrSplitter3); 
        if (pair.length==2) { 
            FMT_DATA_DUEO[pair[0]]=pair[1]; 
        } 
    } 

    var url=(FMT_DATA_DUEO['url'])?FMT_DATA_DUEO['url']:null; 

    if (url==null) continue; 
        url=unescape(unescape(url)).replace(/\\\//g,'/').replace(/\\u0026/g,'&'); 
        var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
        var itag=(FMT_DATA_DUEO['itag'])?FMT_DATA_DUEO['itag']:null; 
    if (itag==null) continue; 
        var signature=(FMT_DATA_DUEO['sig'])?FMT_DATA_DUEO['sig']:null; 
        if (signature!=null) { 
        url=url+"&signature="+signature; 
    } 
    if (url.toLowerCase().indexOf('http')==0) { // validate URL 

        if (itag == '5') {
            links += '<a href="' + url + '&title=' + username + title + quality240 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v240p">FLV (240p)</span></a>';
        }
        if (itag == '18') {
            links += '<a href="' + url + '&title=' + username + title + quality360 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v360p">MP4 (360p)</span></a>';
        }
        if (itag == '35') {
            links += '<a href="' + url + '&title=' + username + title + quality480 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v480p">FLV (480p)</span></a>';
        }
        if (itag == '22') {
            links += '<a href="' + url + '&title=' + username + title + quality720 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v720p">MP4 HD (720p)</span></a>';
        }
        if (itag == '37') {
            links += ' <a href="' + url + '&title=' + username + title + quality1080 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v1080p">MP4 HD (1080p)</span></a>';
        }
        if (itag == '38') {
            links += '<a href="' + url + '&title=' + username + title + quality4k + '"style="text-decoration:none"><span class="yt-uix-button-menu-item"  id="v4k">MP4 HD (4K)</span></a>';
        }

        FavVideo();
        videoURL[itag]=url; 
        console.log(itag);
    } 
} 

VideoURL [itag]配列から個別のビデオリンクを取得できます。上記のロジックはPHPに簡単に変換できます

拡張機能は場所からダウンロードできます http://www.figmentsol.com/chrome/ytdw/

これが誰かの助けになることを願っています。これは実用的なソリューションです(日付:06-04-2013)

1
Rajendra