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

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

関連記事

Mac OS X Mountain LionからFlickrへの共有がお手軽・便利!

先日公開されたMac OS Xの最新バージョン「10.8 Mountain Lion」に、ボクもひっそりとアップグレードしました。で、全体的なレビューをしようと思ったんですが、アップグレード前からMa …

no image

インストール祭り

先日起動しなくなったマウスコンピューターのノートPCと、大分前から使っていない Fujitsu の FMV に OS をインストールしました。 マウスコンピューターの方は今のメイン機に当たるので新規で …

ガンダム占い

Yahoo!占いにガンダム占いってのがあったのでやってみました。 誕生日と血液型のデータを入力して導き出す宇宙世紀型の占い……それがガンダム占いです! 統計に基づいて全人類を48種類のガンダムキャラク …

no image

mixi(ミクシィ)の RSS Crawler が新しくなったらしくて

mixi Engineers’ Blog にこんなエントリーがありました。 12月12日よりmixiのRSSのCrawlerが改善され、外部ブログの反映が今までと比べ格段にはやくなっている …

「VQ1005 Tumblr」VQ1005で撮られた写真をTumblrで眺めたい

いや、もうしつこいくらいにVQ1005ネタ書いてますが・・・。 VQ1005で写真撮ってると、他の人の作品も気になる訳で。 Flickr とかに上がっている写真を見てたりするんだけど、どれも味があって …

スポンサードリンク

スポンサードリンク