2010-12-09 9 views
4

YouTubeからmp4ファイルをダウンロードするスクリプトがあります。これは、フォームのリンクを生成することですhttp://youtube.com/get_video?video_id= * VIDEO_ID * & & t = * THE_TOKEN * = & fmt = 18 & asv = 2、それはもう動作しません(今日気づいた)。どう思いますか?YouTubeからダウンロードできません

+5

私たちは皆、私たちのためにyoutube dlリンクについていくためにオープンソースプロジェクトが真剣に必要です。私は彼らのゲームについていくことに疲れている。 – samquo

答えて

12

ビデオを取得するためにget_videoを使用する代わりに、代わりにfmt_url_map(format-url map)を解析してみてください。

fmt_url_mapは、トークンが見つかった場所(YouTubeのFlash動画プレーヤーのFlashvarやYouTubeのどこかのページなど)で見つけることができるはずです。それが見つからない場合は、http://www.youtube.com/get_video_info?video_id=VIDEO_IDのメッセージを送信し、name=value&name=value&...という形式の非常に長い結果が得られるはずです。この結果の中で "fmt_url_map" & fmt_url_map = "で終わり、" & "で終わります)。この値を取得した後

、それは(改行なし)のようなものになります(あなたはそれをデコードURLする必要があります):各カンマで区切られたエントリはFMT値で始まる

22|http://blah.youtube.com/videoplayback?blah, 
35|http://blah.youtube.com/videoplayback?blah, 
... 

(この例では22または35)、続いてパイプ文字が続き、URLの後にビデオをその形式でダウンロードすることができます。 (このURLはクライアント固有のものであるため、特定のクライアントのURLは、YouTubeによるIPのチェックにより、他のクライアントとはうまく機能しない可能性があります)。

さまざまなfmt値については、http://en.wikipedia.org/wiki/YouTube#Quality_and_formatsを参照し、「Comarison of YouTubeメディアエンコードオプション」を表示してください。注:すべての動画ですべての形式を使用できるわけではありません。

+0

ルーッとありがとう!もし可能ならば – Leg10n

+0

+10。しかし、あなたはそれがクライアント固有のものだと言ったので、ユーザーが自分でファイルをダウンロードするためのURLを生成しているとうまくいかないでしょうか?それ以外の解決策はありますか? – samquo

+0

これは問題です(get_videoにもこの問題がありましたが)。実際にページをリクエストして外部のサーバーでダウンロードURLを取得した場合、YouTubeはサーバーのIPをそのURLに関連付けます(get_videoメソッドの各トークンとIPを関連付ける方法と同じように)。あなたがウェブブラウザでそれをしようとしていると仮定すると、Javaアプレットを使ってクライアント側で試してみることができます(これはかなりclunkyかもしれませんが、clipnabber.comのような多くのサイトがそうしています)。あなたが完全にクライアント側のプログラムを書いているだけの場合は、クライアントのIPアドレス – jhartz

2

サーバーにダウンロードする場合は、まだ動作するyoutube-dlを使用できます。

0

これはfmtオプションを削除したようです。 http://en.wikipedia.org/wiki/YouTube#Quality_and_codecsを参照してください。

+0

これはまあまあです!誰かがハックを見つけることができるかどうかわかりません... – Alex1987

+2

fmt_url_map(http://www.youtube.com/get_video_info?video_id=*VIDEO_ID*)を解析すると、より直接的なダウンロードURLを得ることができますが、すべての可能なフォーマットを持っている... – jhartz

+0

これは素晴らしい人です!あなたは本当に答えとしてこれを置くべきです! – Alex1987

関連する問題