railsアプリでyoutubeAPIを使用して動画情報を取得する

rails

本記事では、google-api-clientというgemを用いてrailsでyoutubeAPIを使用する方法について説明していきます!

以前、postmanでyoutubeAPIを操作してどういう挙動ができるか調査した記事を作成しました。

本記事では、実際にrails アプリに反映させる方法を説明していきます。

google-api-clientを導入する

それでは早速google-api-clientを導入します。gemfileに下記を記述し、bundle installします。

gem 'google-api-client', '~> 0.11'
gem 'google-apis-youtube_v3'

バージョンは’~> 0.11’で指定していますが、こちらは必要に応じて随時更新していってください。特に希望がなければ上記のバージョンを指定していただければと思います。

youtubeAPIを使って動画を取得する(list_videos, list_searches)

詳しいメソッドは公式ドキュメントに全て書いてあると思いますが、概要を知るにはこちらのサイトの方が参考になると思います。

まず、環境構築としてscaffoldでVideoという名前で設定していきます。動きを確認したい場合は、同じように進めていくと、処理の内容などよりわかりやすいと思います。

rails g scaffold Video

youtubeの動画リストを取得する。

さっそく、youtubeの動画リストを取得していきます。

def index 
  youtube = Google::Apis::YoutubeV3::YouTubeService.new
  youtube.key =  ENV['YOUTUBE_API_KEY']

  # チャンネルの動画一覧を取得
  response = youtube.list_videos('snippet', chart: 'mostPopular', max_results: 10)

  @videos = response.items
end

ENV[‘YOUTUBE_API_KEY’]の部分では、別途環境変数の設定と、APIKEYの取得が必要です。APIKEYの取得方法は下記ページに書いてあるのでそちらを参考に、環境変数の設定方法は、「dotenv-rails」で調べてみてください。

続いて、videosのindex.html.erbのviewファイルに下記を記載してください。

<p style="color: green"><%= notice %></p>

<h1>Videos</h1>

<div id="videos">
  <% @videos.each do |video| %>
    <p>
      <%= video.snippet.title %>
      <%# <%= link_to "Show this video", video %> %>
    </p>
  <% end %>
</div>

<%= link_to "New video", new_video_path %>

その後、railsサーバーを立ち上げ、http://127.0.0.1:3000/videosにアクセスすると…

こんな感じで取得することができます。今回はyoutubeAPIから最も人気な10件の動画のタイトルを取得します。

ここで、より目的に沿った動画一覧を取得するために、条件を絞り込むためparamsを確認していきます。

条件を指定してyoutubeAPIから動画を取得する

公式ドキュメントを参照すると、動画一覧を取得するAPIは以下のようになっています。

def list_videos(part, chart: nil, hl: nil, id: nil, locale: nil, max_height: nil, max_results: nil, max_width: nil, my_rating: nil, on_behalf_of_content_owner: nil, page_token: nil, region_code: nil, video_category_id: nil, fields: nil, quota_user: nil, options: nil, &block)
  command = make_simple_command(:get, 'youtube/v3/videos', options)
  command.response_representation = Google::Apis::YoutubeV3::ListVideosResponse::Representation
  command.response_class = Google::Apis::YoutubeV3::ListVideosResponse
  command.query['chart'] = chart unless chart.nil?
  command.query['hl'] = hl unless hl.nil?
  command.query['id'] = id unless id.nil?
  command.query['locale'] = locale unless locale.nil?
  command.query['maxHeight'] = max_height unless max_height.nil?
  command.query['maxResults'] = max_results unless max_results.nil?
  command.query['maxWidth'] = max_width unless max_width.nil?
  command.query['myRating'] = my_rating unless my_rating.nil?
  command.query['onBehalfOfContentOwner'] = on_behalf_of_content_owner unless on_behalf_of_content_owner.nil?
  command.query['pageToken'] = page_token unless page_token.nil?
  command.query['part'] = part unless part.nil?
  command.query['regionCode'] = region_code unless region_code.nil?
  command.query['videoCategoryId'] = video_category_id unless video_category_id.nil?
  command.query['fields'] = fields unless fields.nil?
  command.query['quotaUser'] = quota_user unless quota_user.nil?
  execute_or_queue_command(command, &block)
end

commandにqueryを追加していくことで条件を絞り込むことができます。よく使われそうなparamsを以下に表示します。

  • chart:動画のチャートタイプを指定する。mostPopular⇨人気のある動画、mostViewed⇨再生回数の多い動画、mostShared⇨最もシェア回数の多い動画、mostFavorited⇨お気に入りが多い動画、mostLiked⇨高評価が多い動画、mostDisliked⇨低評価が多い動画
  • id:動画IDを指定することで、その動画の情報を取得することができる。

※chart, idはどちらかしか使用できないため注意

  • maxResults:取得できる動画数を指定できる(ただしidとの併用はできない)。1以上50以下の値を指定できる。
  • region_code:その国で検索されている動画を取得することができる。

その他のparamsについて知りたい場合は公式ドキュメント(video_listのparams)を参照してください。

特定のyoutuberの動画を取得する方法

特定のyoutuberの動画を取得するためには、youtube.list_searchesメソッドを使用する必要があります。

search_list = youtube.list_searches('snippet', type: 'video', channel_id: channel_id, region_code: 'JP', max_results: 10)

channel_idに検索したいyoutuberのchannel_idを指定すれば取得することができます。list_searchesで使いそうなparamsは以下に示します。

  • type:検索できるコンテンツタイプを指定する。(video:動画、channel:チャンネル、playlist:プレイリスト)
  • channel_id:特定のチャンネルID(youtuber)に関連する情報を取得できる。
  • max_results:検索結果の最大件数を取得する。
  • order:検索結果の順序を指定できる(date:アップロード日時順、viewCount:再生回数順、rating:評価順)
  • q:探したいコンテンツのキーワード検索ができます。
  • video_category_id:動画のカテゴリーIDを指定できる。

list_searchesのparamsがかなり多いので、公式ドキュメントを参照してください。

例えば、「おもしろ動画」で検索した動画を20件表示したい場合は下記のプログラムを記載します。

search_list = youtube.list_searches('snippet', type: 'video', q: 'おもしろ動画', region_code: 'JP', max_results: 20)

その結果↓のようになります。

list_videosメソッドよりもlist_searchesメソッドの方がより知りたい情報の絞り込みが可能なようです!

以上、railsアプリでyoutubeAPIを使用する方法を説明しました!

youtubeをやってて情報を集めたい場合など、ぜひ参考にしていただければと思います!

コメント

タイトルとURLをコピーしました