LoginSignup
21
22

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-26

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

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

21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22