Edited at

railsでYouTube data API を利用する方法(search)

More than 1 year has passed since last update.


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"] =>動画のタイトル

このようにできると思います!