1 YouTube APIの登録とキーの取得
YouTubeAPIのガイドラインを参考にして認証キーとAPIのステータスをONにする。
https://developers.google.com/youtube/v3/getting-started?hl=ja
2 Gemfileをインストールする
gem 'google-api-client', '<0.9'
gem 'trollop', '~> 2.1'
3 コードサンプルを参考に改良する。
ガイドラインのコードを参考にファイルを作成する。
youtube.rb
require 'rubygems'
require 'google/api_client'
require 'trollop'
DEVELOPER_KEY = 'google developerで取得したキー'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
def get_service
client = Google::APIClient.new(
:key => DEVELOPER_KEY,
:authorization => nil,
:application_name => $PROGRAM_NAME,
:application_version => '1.0.0'
)
youtube = client.discovered_api(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION)
return client, youtube
end
controller.rb
def main
opts = Trollop::options do
opt :q, 'Search term', :type => String, :default => '検索ワード' #defaoultの内容を検索したいワードにする。
opt :max_results, 'Max results', :type => :int, :default => 25 #検索結果数を決める(最大50まで)
opt :order, 'order', :type => String, :default => 'viewCount' #視聴回数の多い順にデータを取得する。
end
client, youtube = get_service
begin
search_response = client.execute!(
:api_method => youtube.search.list,
:parameters => {
:part => 'snippet',
:q => opts[:q],#上記の検索ワードを変換する
:maxResults => opts[:max_results]#上記の取得数を変換する
:order => opts[:order],#上記の取得順を変換する
}
)
puts search_response
rescue Google::APIClient::TransmissionError => e
puts e.result.body
end
end
検索条件の追加などはガイドラインのリファレンスを参照すれば自由に編集できる。
実際に使ってみる
具体的な例があった方がわかりやすいと思うので、実際に使用したコードを載せます。
もっとこうした方がリファクタリングの部分でもよいとかあれば是非助言お願いします。
youtube_controller.rb
def index
get_data("スポーツ")
end
def get_data(keyword)
require 'youtube.rb'#先ほど上で準備したファイルを呼ぶ
opts = Trollop::options do
opt :q, 'Search term', :type => String, :default => keyword
opt :max_results, 'Max results', :type => :int, :default => 50
opt :order, 'order', :type => String, :default => 'date'
opt :regionCode, 'region', :type => String, :default => 'JP'
end
client, youtube = get_service
begin
search_response = client.execute!(
:api_method => youtube.search.list,
:parameters => {
:part => 'snippet',
:q => opts[:q],
:maxResults => opts[:max_results],
:order => opts[:order],
:regionCode => opts[:regionCode]
}
)
@movies = search_response.data.items#Jsonの中身が多かったので必要な情報のみ受けれるようにしています。
rescue Google::APIClient::TransmissionError => e
puts e.result.body
end
end
これで@moviesのなかに取得したデータ(50件)が格納されました。
例えば1番目の動画のタイトルのみを抽出したい場合は、
puts @movies[0]["snippet"]["title"] =>動画のタイトル
このようにできると思います!