#はじめに
あまりにもわからなかったので、出来たことをまとめてみました。
参考↓
さかな前線(YouTube Data API V3とgoogle-api-ruby-client gemでYouTube動画検索)
Class: Google::Apis::YoutubeV3::YouTubeService-github
YouTube Data API (v3)
#プロジェクトを作成(YouTube Data API v3を使う)
以下のサイトの通りにやれば、いいです。↓
YouTube Data API (v3)
#まず、Rubyで試してみる
このサイトを真似してます。↓
さかな前線(YouTube Data API V3とgoogle-api-ruby-client gemでYouTube動画検索)
手元のRuby環境にGemをインストールします。
$ gem install google-api-client -v 0.9.20
require 'google/apis/youtube_v3'
require 'active_support/all'
GOOGLE_API_KEY="<API_KEY>" #上記で作成したキー
def find_videos(keyword, after: 1.months.ago, before: Time.now) #検索キーワードと検索範囲を変えれるように引数に値を取っています
service = Google::Apis::YoutubeV3::YouTubeService.new
service.key = GOOGLE_API_KEY
next_page_token = nil
opt = {
q: keyword,
type: 'video',
max_results: 2,
order: :date,
page_token: next_page_token,
published_after: after.iso8601,
published_before: before.iso8601
}
results = service.list_searches(:snippet, opt)
results.items.each do |item|
id = item.id
snippet = item.snippet
puts "\"#{snippet.title}\" by #{snippet.channel_title} (id: #{id.video_id}) (#{snippet.published_at})"
end
end
find_videos('明日香ちゃんねる')
出力結果↓
"私は盛大に騙されました。" by 明日香ちゃんねる (id: ViYzZFSTMoM) (2019-07-31T14:19:27+00:00)
"【明日香VS現役東大生】東大生のスキを突いてゴールを狙う!!!" by 明日香ちゃんねる (id: -HzWQzHNvPs) (2019-07-30T08:58:45+00:00)
ちゃんと2件とれました。
###list_searches
list_searches
メソッドは以下のサイトに説明が載っています。
list_searches
メソッド以外にもlist_channels
とか様々なメソッドがあるみたいです。↓(optについてもここを参考)
Class: Google::Apis::YoutubeV3::YouTubeService-github
###iso8601
published_after
はRFC 3339形式の日時の値を入れる必要があるみたいです。
to_datetime.rfc3339
かiso8601
メソッドで変換します。
参考↓
RubyでTimeクラスオブジェクトをRFC3339に変換する
RubyのTime型のオブジェクトをiso8601形式の文字列に変換する
試してみた↓
require 'date'
require 'time'
puts Time.now
puts Time.now.to_datetime.rfc3339
puts Time.now.iso8601
出力結果↓
2019-08-01 12:42:33 +0900
2019-08-01T12:42:33+09:00
2019-08-01T12:42:33+09:00
###YouTube Data API v3のQueriesについて(無料枠)
一日当たり、10,000Queriesでそれ以上超えると通信が出来なくなりエラーになってしまいます。
なので、一回のリクエストで50件も取ってしまうとすぐ10,000Queries超えてエラーになりますので注意!!
ダッシュボードから確認出来ます。
参考↓
【メモ】Youtube API Data (v3)のクオータについて-Qiita
#Ruby on Railsで試してみる
gemのバージョンによってrequire: 'google/apis/youtube_v3'が読み取れないようなので、
固定してます。何回もエラーが出て苦しめられたので...
gem 'google-api-client', '0.9.20', require: 'google/apis/youtube_v3'
youtubeコントローラーを作ってユーチュブからデータを取得するfind_videosとビューに表示するindexに分けています。
class YoutubeController < ApplicationController
GOOGLE_API_KEY = Rails.application.credentials.google[:api_key]
def find_videos(keyword, after: 1.months.ago, before: Time.now)
service = Google::Apis::YoutubeV3::YouTubeService.new
service.key = GOOGLE_API_KEY
next_page_token = nil
opt = {
q: keyword,
type: 'video',
max_results: 3,
order: :date,
page_token: next_page_token,
published_after: after.iso8601,
published_before: before.iso8601
}
service.list_searches(:snippet, opt)
end
def index
@youtube_data = find_videos('明日香ちゃんねる')
end
end
<% @youtube_data.items.each do |item| %>
<% snippet = item.snippet %>
<p><%= snippet.title %></p>
<p><%= snippet.published_at %><%= snippet.channel_title %></p>
<div><iframe width="560" height="315" src="https://www.youtube.com/embed/<%= item.id.video_id %>" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></div>
<% end %>
iframeのyoutubeのurlに取得したvideo_id
を入れてます。
キーワードにマッチする動画3件を取得できました。
完成しサイトです↓
#最後に
他のgemでyt
というのを見つけたのでリンクを貼っておきます。こっちのほうがわかりやすそう😅
yt-gem
Yt · The reliable YouTube API Ruby client