Ruby on RailsでYouTube Data API (v3)を使用して、動画の検索を行う

Ruby on RailsでYouTube Data API (v3)を使用して、動画の検索を行う

指定したキーワードで各種動画サイトの検索結果を毎日取得してくれるサイトとかあれば良いなって思いました。

そんなサイトを作成したく思い、まずは、youtubeの検索結果を取得するためにYoutube Data Apiの使用方法について学びました。

※下記でニコニコ動画やDailymotionのAPIについても紹介しています

Ruby on Railsでニコニコ動画のコンテンツ検索APIを使用して、動画の検索を行う

Ruby on RailsでDailymotionのAPIを使用して、動画の検索を行う

Youtube Data Apiを使用して動画の検索結果を取得する

※Youtube Data Apiの導入部分については、色々なサイトで紹介しているので割愛します。

Youtube Data Apiで動画の検索を行いたい場合「list_searches」メソッドを使用します。

「list_searches」メソッドの公式リファレンスは下記。

https://developers.google.com/youtube/v3/docs/search/list?hl=ja

今回はRubyでYoutube Data Apiを使用する予定となり、公式のサンプルでは、google-api-clientを使用したやり方が記載されているため、こちらの方法で進めていきます。

ただ、上記公式リファレンスに記載されているサンプルでは「gem ‘google-api-client’, ‘>0.7’」を指定しておりますが、こちらのgemは古いバージョンのものとなっており、しかも、バージョン0.8以降に使い方が大きく変更されているらしい。。。

そのため、バージョン0.8以降のgoogle-api-clientを使用した実装には、下記のサイトを参考にさせていただきました。

https://qiita.com/taptappun/items/a217b7017316881d6459

https://daily.belltail.jp/?p=2330

Youtube Data Apiの初期化

google-api-clientのVersionが0.9以降の場合、Apiを使用するファイル内で、以下のようにGoogle API Ruby Clientの中から使用する予定のAPIをrequireして呼び出します。

require ‘google/apis/youtube_v3’

その後、以下のように記載することで、Youtube Data Apiのメソッドが使用できるようになります。
※ENV[“YOUTUBE_APIKEY”]には、自身が取得したyoutube api keyを記載

youtube = Google::Apis::YoutubeV3::YouTubeService.new
youtube.key = ENV[“YOUTUBE_APIKEY”]

実際に使用したコード

今回は、Helperに下記のように記載してviewで使用してみました。

※コードは参考させていただいたサイトのほぼコピペですが、、、

 

上記メソッドを用いて、今回はfind_videos(“こぶしファクトリー”)を実行してみました。(こぶしファクトリーは私が推しているハロープロジェクトに所属しているアイドルグループです。)

すると、以下のような結果が取得できました。

見てのとおり、results_itemsのkey[:items]はハッシュを複数含む配列となっており、この中に、動画のタイトルや説明文、video_ID(動画のリンク用)が含まれています。

ただし、[:items]の中には、動画の再生時間が含まれておりません。
※コメント数や高評価数も含まれておりません

そこで、上記で取得したvideo_idを用いて「list_videos」メソッドを使用することにより、より詳細な動画情報を個別に取得していきます。

list_searchesを使用した動画時間の取得

上記で見た通り、list_searchesの[:items]内に含まれているデータは、配列の中にハッシュで格納されている形式のため、配列の番号とシンボルを指定してvideo_idを取得します。

その後、「list_videos」メソッドにて、対象動画のvideo_idを指定して、詳細な動画情報を取得することがおできます。

上記メソッドの実行結果は下記です。

上記video_duration_get_hの中に格納されている:duration=>”PT12M57S”が動画の再生時間です。

これはISO8601文字列というフォーマットで時間を取得している状態となり、RailsのActiveSupport::Durationで数値に修正することが出来ます。

[Rails5] ActiveSupport::Durationの期間処理メソッド(2)変換

また、数値に修正することで、時間形式で表示させるstrftimeを使用することが出来ます。

そして、video_duration_get_hの中の[:items]の中身もハッシュではなく配列形式になっているため、以下のように、配列番号の指定とシンボルを指定して取得できます。

これで上手く時間形式に変換した値を取得することができました。

上記で取得したデータをViewで良い感じに表示させると、以下のように表示させることができました。

動画サイトっぽい表示にすることもできましたね。

このメソッドを定時に自動で実行させて、毎日好きなキーワードで検索して動画を取得させていきたいと思います。

youtube data apiの制限について

ちなみに、youtube data apiにはクォータという概念があります。

https://developers.google.com/youtube/v3/getting-started?hl=ja#quota

分かりやすく言えば、一つのアカウントが一日で使用できるApiのデータ量です。使いすぎると、その日は当該アカウントでApiの使用ができなくなります。

そのため、実際にはYoutube Data Apiで取得した結果をデータベースに格納して使用します。

また、冒頭で記載していた「指定した検索キーワードで毎日最新動画を自動で検索するサービス」については、apiの利用制限により断念してます。。。

クォータ割当の増加申請とかもできるらしいんですけどね。

ニコニコ動画のコンテンツ検索apiでも、1つのサーバーから特定以上のアクセスを防ぐ旨が記載されていたため、どちらにせよ安定したサイトは出来ないなということで、、、サービスの作成は諦めました。

いいんだ。。。完全自分用のための、ハロプロの動画を自動収集するサイトを作るんだもん。。。