Creazy!

WEBエンジニア・ヤガーのテック・ガジェットブログ

YouTube 技術情報

YoutubeでHD動画がダウンロード可能か判別する方法と、作ったAPIとブックマークレット

投稿日:


YoutubeのHD祭りに乗じて作ったGreasemonkeyが好評価を頂いたようです。
動画を楽しもう!(Youtubeでダウンロード可能なファイル形式が一目瞭然になるGreasemonkey)
はてなブックマーク – 動画を楽しもう!(Youtubeでダウンロード可能なファイル形式が一目瞭然になるGreasemonkey)
毎度ながら、こういったツールは「自分が便利になるもの」を目指して作り始めるのですが、今回のグリモンの場合、「どうやってやっているの?」っていう疑問を持った方が結構いたみたいなのでちょっくら解説などしてみようと思います。

目的のファイルがあるかどうかを判別する方法

Youtubeのダウンロードファイルの在処が分かったとしても、HD画質でアップロードしていない場合は「&fmt=22」の動画ファイルは存在していません(他のフォーマットについても同様でしょう)。しかし、実際にそのURLにアクセスしてみないと存在の確認はできないので、リンクを表示しただけではツールとして不十分です。(ダウンロードしてみたら404ページだったってのはガッカリしすぎです。)
URLは確実に分かっているのですから、URLの存在確認さえできればOKです。つまり、HTTPアクセスしてResponseのステータスコードを見てやれば良いだけなのです。これだけなら、XmlHttpRequest(FirefoxのGreasemonkeyではGM_xmlhttpRequest関数)だけで取得可能に思えるのですが、ここで一つ落とし穴が。存在確認の対象ファイルが数MB〜数十MBもあるメディアファイルのため、ロードし終わるのに非常に時間がかかってしまいます。GM_xmlhttpRequestでは GET | POST でのリクエストしかできないようで、onload時にしかステータスコードを取得できませんでした。だけど、この場合必要なのは HEAD メソッドなのです!

ファイルの存在確認とステータスコードを教えてくれるAPI

という事で、さくっとAPIと作ってみました。
しかも、Google App Engineで!
(はじめてのPythonで苦労した話とかは、また別の機会にします。)
▼使用方法

http://urlcheck.appspot.com/?callback=コールバック関数&url=URLエンコードしたURL

必要なパラメータは1つだけです。
・url : URLエンコードしたURL
これでアクセスすると、JSON形式で「リクエストURL」と「ステータスコード」のセットが返ってきます。対象のURLがリダイレクトされている(ステータスコードが30x)場合は、複数の「URL+ステータスコード」のセットが返ってきます。
いわずもがな、callbackを指定すればJSONPとして使えます。
例題として、Mattの動画で試してみましょう。
HD動画のURLは下記です。(このへんで調べられる)

http://jp.youtube.com/get_video?video_id=zlfKdbWwruY&t=OEgsToPDskIjMnbvd_43Ba-yDsbr4FKe&fmt=22

でAPIへはこのように渡しましてみます。

http://urlcheck.appspot.com/?url=http%3A%2F%2Fjp.youtube.com%2Fget_video%3Fvideo_id%3DzlfKdbWwruY%26t%3DOEgsToPDskIjMnbvd_43Ba-yDsbr4FKe%26fmt%3D22

するとこんなJSONが返ってきました。(見やすくするために改行をいれています)

{'requests':[
{ 'url':'http://jp.youtube.com/get_video?video_id=zlfKdbWwruY&t=OEgsToPDskIjMnbvd_43Ba-yDsbr4FKe&fmt=22',
'status':303},
{ 'url':'http://v12.cache.googlevideo.com/videoplayback?id=ce57ca75b5b0aee6&itag=22&begin=0&len=604800000&ip=66.249.84.69&signature=1939AC64022523F5AEB58BB537A87F53AC8C302F.2D9E18CB9C422015013D3CD825AB7B981ABF5041&sver=2&expire=1227553199&key=yt4&ipbits=0',
'status':200}
]}

リクエストしたyoutubeのサーバからは一度303リダイレクトされて、googleのキャッシュサーバに実ファイルが見つかりました(200)。という事が分かりますね。
このAPIはHEADでリクエストを投げるのでレスポンスボディを取得しません。だから、サイズの大きなファイルでもすばやく結果を取得できます。もちろん、HEADアクセスに対応していないサーバでは有効でないでしょうけどね。

YoutubeでHD動画があるかどうか判別してリンクを表示してくれるBookmarklet

すでに紹介しているGreasemonkeyでも上記APIを使用しているのですが、改めて同じ機能を満たすブックマークレットを作ってみました。
Youtube Downloadable Links
上のリンクをブックマークしておいてください。
Youtubeの再生画面(〜/watch)でブックマークレットを実行するだけで、ダウンロード可能なファイル形式のみリンクが表示されます。
ブックマークレットのソースは別ファイルになってますのでこちらをご確認ください。
http://labs.creazy.net/bookmarklet/youtube_downloadable_links.js

まとめ

多分Greasemonkeyなり、ブックマークレットなりキモになっているのは今回紹介したAPIの方だと思います。まあ、Python赤子レベルのyagerが作ったものなので、サービスで使おうって人はいないと思いますけどね。それなりに用途がたくさんありそうなものなので、リクエストの種類とか、返すレスポンスヘッダーの種類を増やすだとか、バージョンアップはしていきたいなぁと思います。
にしても、みんなYoutube大好きなんですね・・・。

YoutubeのHD動画正式対応で、改めて動画形式をまとめてみる
動画を楽しもう!(Youtube のHD動画を色/サイズをカスタマイズした上でembedできるブックマークレット)
動画を楽しもう!(Youtubeで一覧画面でもダウンロード可能な最高画質が一目瞭然になるGreasemonkey)
Youtube でHD動画に対応しているか確認する裏技見つけた
動画を楽しもう!(Youtubeでダウンロード可能なファイル形式が一目瞭然になるGreasemonkey)
動画を楽しもう!(YoutubeでHD動画など全形式でダウンロードできるブックマークレット)
動画を楽しもう!(YoutubeをMP4でダウンロードするもっと簡単なブックマークレット)
動画を楽しもう!(YoutubeのFLVの在処とダウンロード用ブックマークレット)

-YouTube, 技術情報

執筆者:


  1. 匿名 より:

    こういうのを探してたんです!!
    自分で書き換えようかなぁとも思ったんですが、どだい無理な話でしたw
    でも、参照ソースは、こちらの鯖に置いたままでよろしいんですか?

  2. JJ より:

    Youtube Downloadable Links を使ってみました。
    Firefoxはオッケーなのですが、IE7だと全部 [NG] になっちゃうみたいで(statusが200でなくブランクになる、オイラの環境だけ??)、ちょびっとソースを弄らせてもらいました(すんません問題ありなら削除します)
    修正分ここにおいてあります

    http://jjworkshop.com/scripts/youtube_downloadable_links_ex.js
    変更は、function(json) のローカル変数 status に ver を不可したのと、調査のためNGのときにステータスコードを表示するようにしました
    また、この機能とっても便利なので、オイラのBOLGにて紹介させていただきました。
    http://jjworkshop.com/blog/archives/2008/11/post_574.html

  3. yager より:

    >名無しさん
    ブックマークレット自体は静的ファイルでサイズも小さいのでそんなに負荷にならないです。
    ですのでこのレンサバに置いています。
    >JJさん
    おお、IE7版ありがとうございます。
    IE6では確認したんですけど当方IE7環境を持っていないもので…
    元ファイルへの反映は確認ができてからにしようと思います。(いつになるか…)
    紹介もありがとうございましたー。

comment

メールアドレスが公開されることはありません。

関連記事

パンダとペンギンとZenbackキーワーズ

さて、なかなか更新できない当ブログですがGoogle Analyticsでのアクセス解析は定期的に行なっています。記事を追加していないので仕方ないのですが、PV/UUともに下がりっぱなしの状態なのです …

Evernoteのエディターが余計な事ばっかりする件

クラウド上にバックアップしてくれて、複数PCでノートを同期する事ができる Evernote ですが、いろんなメモとか書いとくのと、ブログの下書き書いたりするのに使っていました。でも、リッチテキストエデ …

no image

Ajaxページのアクセス解析の考え方と Google Analytics での実践

今日 MarkeZine にAjaxページでのアクセス解析の考え方的な記事がのっていて、自分もこのネタ書こうと思っていた事をようやく思い出した。なんか後追いで悔しいけどまとめます。 ページビューは、ア …

Apple製品を長く使うなら、絶対AppleCare Protection Planに入りましょう

先月、MacBook不調でジーニアスバー行ってきたんですが、その時にディスプレイ右下に白いムラのようなものがあったので、先週末改めてジーニアスバーを訪れて修理に預けました。で最大1週間と言われていたん …

Google Chrome にいよいよ GreaseMonkey がやってくる

登場直後から要望が多かったと思われる、Chrome への GreaseMonkey 導入がいよいよ現実になりそうです。 ウェブを多用する「Firefox」ユーザーの間で人気のカスタマイズツール「Gre …

スポンサードリンク

スポンサードリンク