プログラミングの練習がてら、愛しのホロライブのチャンネル、動画情報をyoutubeのapiを利用して表示しようと思ったときに、以前YoutubDataAPIを利用した時と勝手が変わっていたので、改めて実装方法を備忘として残しておこうと思います。
開発環境
- CentOS 7.6
- Ruby 2.5.3
- Ruby on Rails 6.0
準備
APIキーを取得する
APIを利用するためにはAPIキーを準備する必要があります。
これはこれで説明がいるほどめんどくさいのですが、ググればいくらでも出てきますので調べてみてください。説明するのがめんどくさいわけではないです。説明するのがめんどくさいわけではないです。
一応良さそうな記事をお借りさせていただきます。
YouTube APIキーの取得 (2020/03/25時点)
Gemをインストールする
Railsプロジェクトの中のGemfileの中に以下を追記してbundle installする。
gem 'google-api-client'
(必要があれば) 環境変数の設定をする
APIキーを使うとyoutubeのパーソナルな情報が利用できるのですが、逆に言うと悪用すると他人のパーソナルな情報を引き出せるということになるので、GitHubなどにソースをコミットした時に意図せずAPIキーを公開してしまわないように別で管理する必要があります。
というわけで、環境変数を利用してコミットされるソースの外側でAPIキーを管理します。
ただしAPIを触るというだけなら必要ない手続きになるので、必要のない方はスルーしてください。
まずは以下のをGemfileに以下のコードを記述し、bundle installする。
gem 'dotenv-rails'
こちらのGemは環境変数を利用しやすくしてくれる優れものです。
次にAPIキーを管理するファイルを用意します。
.gitignoreというファイルと同じところ(おそらくプロジェクトの直下)に.envファイルを作成し、中にAPIキーの情報を記入します。
YOUTUBE_DATA_API_KEY=APIキー
管理ファイルを作成したらそのファイルをコミットの対象外にします。
.gitignoreファイルに設定するとそのファイルはコミット対象外になるので、.envを追記します。
# 追記
.env
これで環境変数の準備完了です。
いざ
YoutubeDataAPIに接続するためのインスタンスを準備
APIを使うたびにインスタンスを生成する必要はないので、イニシャライザーで生成します。というわけで/config/initializersディレクトリにそれ用のファイルを作成します。ファイル名は仮にyoutube.rbとします。
require 'google/apis/youtube_v3'
API_KEY = ENV['YOUTUBE_DATA_API_KEY']
def get_youtube_service
service = Google::Apis::YoutubeV3::YouTubeService.new
service.key = API_KEY
return service
end
これでAPIにアクセスできるインスタンスを取得できるメソッドが用意できました。
ちなみに環境変数設定をしていない方は、ENV['YOUTUBE_DATA_API_KEY']の個所をAPIキーに置き換えてください。
ようやっと使用。
お使いのコントローラー等で、先ほど用意したメソッドでインスタンスを取得し、用意されたメソッドで情報を持ってきます。下記ではチャンネル情報を取得しています。
# インスタンスを取得
youtube = get_youtube_service
# APIに接続して、目的の情報を取得する
channel_data = youtube.list_channels("snippet,brandingSettings", id: "UCDqI2jOz0weumE8s7paEk6g")
# インスタンスに情報を詰める
@member = Member.new
channel = channel_data.items.first
snippet = channel.snippet
branding_settings = channel.branding_settings
@member.channel_id = channel.id
@member.channel_name = snippet.title
@member.icon = snippet.thumbnails.high.url
@member.banner = branding_settings.image.banner_image_url
return @member
@memberのモデル構造は察してください。
今回は我が愛しのロボ子さんのチャンネル情報を取得しました。
取ってきた情報は結構な入れ子構造になっていて、そこんとこをわかっておかないと利用するのは結構きついです。具体的な話は公式のリファレンスを参照するのがいいと思うのでそちらをご確認ください。
ただし若干情報が古いらしく、たまに使えない箇所があります。
公式リファレンス
チャンネル情報以外の情報を取るときは、今回イニシャライザーでrequiredしている'google/apis/youtube_v3'のソースを直接参照するのが速いと思います。
(他にいいやり方があれば是非教えてください。。。)
OSごとに保存先は違うとは思いますが、私自身の備忘も兼ねて参考程度に載せておくと以下のようになります。
/home/(ユーザー)/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/google-api-client-0.37.2/generated/google/apis/youtube_v3/service.rb
以上です。
何か不備があればコメントやご連絡をいただけますと幸いです。