iPad miniを手に入れると寝転びながらそれで映像を見たくなる。 YouTubeで検索して好きなアーティストのライブ映像見たりするのもいいんだけど、 エンタメなコンテンツが見たい。 そういえばゴッドタンっていうテレ東の深夜番組の「キス我慢選手権」がすごい面白いので、 今まさに寝転びながらiPad miniで見たい。
で、Dailymotionにキス我慢の動画がたくさん転がっているなーって知っていたので、 DailymotionのiPad用アプリとかで試してみたんだけど、どーも回線の都合などであんまり快適ではない。 出来る事ならば、気になる動画をファイルとしてぶっ込みたいところ。 昔似たようなものを作っていたんだけど(ListPodと名付けていた...)、出来る事なら、 PC側で動画を検索してプレビュー、気に入ったらリストに入れて、それがPodcastになって、 iPadに入るなんてーいうローカルで楽しむためのWebアプリを作ろうとしている。 さらに言えば、Dailymotionだけではなく他の動画サイトにも対応させたい。
てなわけで、何か作ろうとしているんだが、その一歩である今日の成果発表。 とりあえず、Dailymotionをの動画をごにょった。
Dailymotion上の動画を検索する
まず、これはDailymotionのAPIドキュメント見てもあんま載ってなかったんだけど、 動画の検索の仕方。URLのパスに検索語を含めるらしい。そしてこうすればJSONで値が返ってくる。
use LWP::Simple; use JSON; use URI; use URI::Escape; use utf8; my $query = 'キス我慢選手権'; my $uri = URI->new('http://www.dailymotion.com/'); $uri->path( '/json/relevance/search/' . uri_escape_utf8($query) ); my $content = get($uri); my $result = decode_json($content); use YAML; print Dump $result;
はい。僕はYAMLダンプ派です。
Dailymotionのパーマリンクから動画ファイル(.mp4)をダウンロードする
お次にいよいよ、指定された映像のパーマリンクを元に、動画ファイルをダウンロードする スクリプト。mp4の高画質、普通画質の物が選べる(動画によっては高画質が無い模様)ので高画質を優先的にゲット。まだ動画ファイルをiPadで開いていないけど、多分フォーマット的にいけそう。
use LWP::Simple qw/get getstore $ua/; use URI::Escape; use JSON; $ua->show_progress(1); my $url = $ARGV[0] or die "URL argument is required!"; die "URL is not dailymotion link" unless $url =~ m!^http://www\.dailymotion\.com/video/.+$!; my ($vid) = $url =~ m!/video/([^\?#]+)!; my $content = get($url); my ($text) = $content =~ m!"sequence":"(.+)"!m; my $json = uri_unescape($text); my $ref = decode_json($json); my $param = $ref->{sequence}[0]{layerList}[0]{sequenceList}[2]{layerList}[2]{param}; my $video_url = $param->{ldURL}; $video_url = $param->{sdURL} unless $video_url; getstore($video_url, $vid . '.mp4');
ダウンロードの進捗を表示したかったので、LWP::Simpleで「$ua」をエキスポートして、 show_progressに1を渡している。これを「dailymotion-dl.pl」として保存して、
$ perl dailymotion-dl.pl {動画のパーマリンクのURL}
とすれば自動的にダウンロード開始します。 こちらのスクリプトに関してはアレなんで使用は自己責任でお願いします。
終わりに
諸々工夫すれば、すっごく簡単に、気になるキス我慢選手権映像をチョイスして、それが自動的にiPad miniに入って、 ベッドの中でムラムラできる仕組みが出来るはずです!
(続く...と思う)