2011/6/2
■ [perl] perl で youtube の検索
youtube の動画を検索するにはどうしたら良いのかと聞かれたので,サンプルコードを作ってみました.API で検索をするには,認証などが不要なようです.
リファレンス ガイド: Data API プロトコルを見ると,
動画を検索するには、次の URL にリクエストに合わせてクエリ パラメータを付加し、HTTP GET リクエストを送信します。
http://gdata.youtube.com/feeds/api/videos
たとえば次の URL へのリクエストでは、検索キーワード「football」に一致し、キーワード「soccer」には一致しない最近アップロードされた動画の 10 本ずつのセットの 2 番目のセットを検索します。
http://gdata.youtube.com/feeds/api/videos? vq=football+-soccer &orderby=published &start-index=11 &max-results=10
ということでサンプルコードは下記のようになりました.atom で取得しようとしたのですが,扱い方が良くわからなかったので,rss にしました.
#!/usr/bin/env perl # search-youtube.pl use strict; use Data::Dumper; use URI; use XML::Simple; use LWP::Simple; use Unicode::RecursiveDowngrade; use Unicode::Japanese; use Jcode; sub main { my $kw = "香川大学"; my $h = search_youtube($kw); print Dumper $h; } sub search_youtube { my $kw = shift; my $h; my $proxy = 'http://gdata.youtube.com/feeds/api/videos'; my $uri = URI->new( $proxy ); my $u_kw = Jcode::convert($kw , "utf8", "euc-jp" ); $uri->query_form( vq => $u_kw, orderby => "relevance", alt => 'rss' ); my $xml = get($uri->as_string); my $xs = XML::Simple->new(); my $ref = $xs->XMLin( $xml, forcearray => 1 ); my $count = 0; foreach my $i (@{$ref->{channel}[0]{item}}) { $h->{$count}{title} = shift @{$i->{title}}; $h->{$count}{link} = shift @{$i->{link}}; $h->{$count}{description} = $i->{'description'}[0]; $h->{$count}{keywords} = $i->{'media:group'}[0]{'media:keywords'}; $h->{$count}{author} = $i->{author}[0]; $h->{$count}{viewcount} = $i->{'yt:statistics'}[0]{viewCount}; $h->{$count}{pubdate} = $i->{pubDate}[0]; $h->{$count}{thumb} = $i->{'media:group'}[0]{'media:thumbnail'}[1]; $count++; } my $rd = Unicode::RecursiveDowngrade->new; $rd->filter(sub { Unicode::Japanese->new(shift, 'utf8')->euc }); $h = $rd->downgrade($h); return $h; } main;
上記のコードを search-youtube.pl として保存して,実行すると下記のようになります.
% perl youtube-search.pl $VAR1 = { '11' => { 'link' => 'http://www.youtube.com/watch?v=F_abi4096VQ&feature=youtube_gdata', 'viewcount' => '1697', 'pubdate' => 'Tue, 08 Feb 2011 17:51:56 +0000', 'author' => 'BBRarkaic3', 'description' => '香川大学第42回定期演奏会、Ⅲstageメイン曲. びびる大好きスイートなメロディと、きらびやかなリズム。 日本一のマンドリンクラブと自負し続けます。 素晴らしい!!!! 指揮:四国の伝説、細川一樹氏(香川県在住㊟2011年現在) ※香川大学演奏のデモCDなどの購入等の問い合わせは、香川大学マンドリンクラブまでびびる大好き', 'thumb' => { 'width' => '120', 'time' => '00:03:45.250', 'url' => 'http://i.ytimg.com/vi/F_abi4096VQ/1.jpg', 'height' => '90' }, 'keywords' => [ 'マンドリン, 江頭' ], 'title' => '「雲の行方」 香川大学第42回定期演奏会 3-3finalステージ 2010年12/18' }, ...
- キムミギュ(Kim Migyu)さんのお話
関連リンク