さて、自作サービス(Rails製)の裏側においてYouTubeでの動画検索をしたいと考えていて、YouTube Data API(V3)およびそれを叩くGoogle製のgoogle-api-ruby-client gemを使うことにしました。
しかしながらこのGemは2016年初頭に出た0.9によって大きな変更が入り、公式のものを含めネット上で閲覧可能なサンプルのほとんどが参考にならない状況になっています。
自分でも少し苦労したので、かんたんにメモ。
情報は2017年1月1日JST現在、Gemは0.9.20です。
APIキーを使って動画検索
今回はAPIキーを使って直接情報を得る方法のみ扱い、OAuthを行う方法については他に譲りたいと思います。
まずは、Google DevelopersからAPIキーを取得してください。
Google APIs > API Manager > YouTube Data API v3で自分のアプリ用のプロジェクトを作成しEnable APIでAPIを有効化し、キーをとっておきます。
つづいては手元のRuby環境にGemをインストール。
% gem install google-api-client -v 0.9.20
これで、キーワードレノファで、「過去1ヶ月にアップロードされた動画を50件単位で全て取得」してみます。
このサンプルコードを実行するとこんなかんじになります。
% ruby search.rb "関東第一高校のレノファ山口完コピ応援" by K Onishi (2017-01-01T03:45:54+00:00) "レノファ山口 三幸選手" by かずかず かずかず (2016-12-31T14:55:21+00:00) "20161228 VS レノファ山口 ①" by 岳邦高橋 (2016-12-29T07:19:14+00:00) "20161228 VS レノファ山口 ②" by 岳邦高橋 (2016-12-29T07:19:14+00:00) "レノファ山口 カラーゴールネットプロジェクト 贈呈式直後の記念撮影" by Anderson Tyler (2016-12-26T14:49:07+00:00) "2010CSL JFE西日本-レノファ山口 リューセイのゴール" by Anderson Tyler (2016-12-26T14:45:07+00:00) "2014Jユースカップ 中国予選 レノファ山口U-18 - アクート岡山 #16河野の2点目" by Anderson Tyler (2016-12-26T14:34:28+00:00) "JFL 2nd 第3節 レノファ山口-ソニー仙台 #9岸田の先制ゴール" by Anderson Tyler (2016-12-26T14:33:40+00:00) ...
list_searchesは1ページ分の情報を返すとともに、次のページを示す識別子となるトークンを返します。それがレスポンスのnext_page_tokenで、次のAPI呼び出しの際にはpage_tokenにその値を渡すことで、次々とページを最後までたぐっていくことができます。
最後のページでnullを返します。また最初のページに渡すpage_tokenはnull(nil)です。
その他のコードの解説は特に不要かと思います。
情報源
google-api-ruby-client gemに関しては、公式ドキュメントは(2017年1月1日現在)古いインタフェースの解説のみで、あまり参考になりません。
したがって当面のところは、基本的にソースやgenerated documenet、およびWeb APIそのもののドキュメントを見ていくことになります。
たとえば今回使った動画検索のAPIでは、
まずはgemのgenerated documentの中からそれらしきメソッドを見つけてきて、また必要に応じてgemのソースコードも見つつ、ただそこには引数に具体的にどんな値を与えるべきなのかは全く記載がないため、APIドキュメントの検索リクエストの仕様を眺めながらRuby上でどのような使い方をするのか行間を読みつつコーディングをしていくような流れになります。
認証周りについては、google-api-ruby-client gem全体として、つまりYouTubeに限らずCalendarやDriveなどで共通の仕組み(googleauth)に載っかっていて、それらの例は比較的容易に見つけることができるので、そのまま持ってくることができます。
これでもう動画をゴリゴリ落としてきて映像解析にぶち込むなんてのもお茶の子さいさいです。
One thought on “YouTube Data API V3とgoogle-api-ruby-client gemでYouTube動画検索”