最新 RSS

horiday blog

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)さんのお話


関連リンク