はじめに
この記事ではポートフォリオ作成中に学んだことを自分のために記録しています。
初学者のため、理解が不十分なところがあるかもしれません。
その場合はご指摘いただけると幸いです。
やりたいこと
YouTubeの動画IDから動画情報を検索し、タイトル・概要欄・サムネイルを取得する
準備
- APIキーの取得
- APIキーを環境変数に設定
- YouTube Data API v3を使うためのgemをインストール
この3つを準備していきます。
APIキーの取得
- Google Cloud Consoleにログイン
- 新しいプロジェクトを作成
- 使用するAPIの有効化
Google mapsなどいろんなAPIがありますが、今回はYouTube Data API v3を選択します。
- アプリケーション制限の設定
APIキーを悪用されないように指定したURLでしか使用できないよう制限をかけます。
サイトのすべてのURLを許可する場合は example.com/* のように設定します。
- APIの制限
念のため取得したAPIキーではYouTube Data API v3しか利用できないよう制限をかけておきます。
(上記のアプリケーション制限の設定をしていれば不要かもしれません)
これでAPIキーの準備ができました!
認証情報からAPIキーをコピーし、環境変数の設定に進みます。
APIキーを環境変数として保存
APIキーは機密情報のため、dotenv-railsというgemを使用し環境変数として管理します。
- dotenv-railsのインストール
gem 'dotenv-rails'
- .envファイルの作成
YOUTUBE_API_KEY= "*****************"
ここに先ほど発行したAPIキーを入力します。
- .gitignoreへ追記 (重要!)
.env
環境変数を記載した.envはGitHubにプッシュしないよう.gitignoreに追加しておきましょう。
gemのインストール
YouTube Data API v3を扱うためのgemをインストールします。
gem 'google-apis-youtube_v3'
私は初めgoogle-api-clientも一緒にインストールしていたのですが、GitHubを読む限りどうやら不要なようです。
いざ実装
実際に動画情報を取得していきます。
bookmarkモデルのvideo_idカラムの値を使用して動画を検索したいので、BookmarksHelperを作成しました。
module BookmarksHelper
def get_video_data(video_id)
require 'google/apis/youtube_v3'
youtube = Google::Apis::YoutubeV3::YouTubeService.new
youtube.key = ENV['YOUTUBE_API_KEY']
Rails.cache.fetch("bookmark_#{video_id}", expires_in: 1.days) do
youtube.list_videos('snippet', id: video_id)
end.items.first
end
def video_title(video_id)
if get_video_data(video_id).present?
get_video_data(video_id).snippet.title
else
"Video Not Found"
end
end
def video_description(video_id)
if get_video_data(video_id).present?
get_video_data(video_id).snippet.description
else
"Video Not Found"
end
end
def video_thumbnail(video_id)
if get_video_data(video_id).present?
thumbnails = get_video_data(video_id).snippet.thumbnails
thumbnails_resolutions = [:maxres, :standard, :high, :medium, :default]
thumbnails_resolutions.each do |resolution|
return thumbnails.send(resolution).url if thumbnails.send(resolution)
end
else
"not_found.png"
end
end
end
上記でやっていること
get_video_data
-
キャッシュの保存期間を1日に設定
(Google APIの割り当てが1日ごとにリセットされるため) -
動画IDで検索し、検索結果の最初の動画を取得
(検索結果は1件ですが配列で返ってくるためこの記述にしています)
video_title, video_description
- get_video_dataで取得した動画情報からそれぞれタイトル、概要欄を取得しています。
渡した動画IDの動画が存在しない場合は"Not Found"を返します。
video_thumbnail
- get_video_dataで取得した動画情報からサムネイルを取得しています。
サムネイルは解像度の高い順にmaxres, standard, high, medium, defaultの5種類があるため、その動画が持つサムネイルの中で一番解像度の高いものを返すようにしています。
ヘルパーはこれで完成です!
ビューファイルの中で
<%= video_title(@bookmark.video_id) %>
のように記述すれば動画IDから取得した動画の情報が表示できます。
感想
いろんな記事を参考にさせていただきながら実装しましたが、この記述は何をしているのか?というのを理解するには結局公式を見るのがわかりやすいな〜と感じました。
英語のドキュメントにも恐れず立ち向かっていかなければ…