質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

3813閲覧

rails youtubeapiを使う

SigenSakiyama

総合スコア40

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

3クリップ

投稿2015/06/23 13:01

railsで YOUTUBEAPIのsearch.list メソッドを呼び出し、特定のキーワードに関連する検索結果を取得します。そこで調べたのですがrubyではこのような形でできるそうです。これをどうrailsに書くかわかる方,教えてくださると大変助かります。おねがいします。

#!/usr/bin/ruby

require 'rubygems'
gem 'google-api-client', '>0.7'
require 'google/api_client'
require 'trollop'

Set DEVELOPER_KEY to the API key value from the APIs & auth > Credentials

tab of

Google Developers Console https://console.developers.google.com/

Please ensure that you have enabled the YouTube Data API for your project.

DEVELOPER_KEY = 'REPLACE_ME'
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

def main
opts = Trollop::options do
opt :q, 'Search term', :type => String, :default => 'Google'
opt :max_results, 'Max results', :type => :int, :default => 25
end

client, youtube = get_service

begin
# Call the search.list method to retrieve results matching the specified
# query term.
search_response = client.execute!(
:api_method => youtube.search.list,
:parameters => {
:part => 'snippet',
:q => opts[:q],
:maxResults => opts[:max_results]
}
)

videos = [] channels = [] playlists = [] # Add each result to the appropriate list, and then display the lists of # matching videos, channels, and playlists. search_response.data.items.each do |search_result| case search_result.id.kind when 'youtube#video' videos << "#{search_result.snippet.title} (#{search_result.id.videoId})" when 'youtube#channel' channels << "#{search_result.snippet.title} (#{search_result.id.channelId})" when 'youtube#playlist' playlists << "#{search_result.snippet.title} (#{search_result.id.playlistId})" end end puts "Videos:\n", videos, "\n" puts "Channels:\n", channels, "\n" puts "Playlists:\n", playlists, "\n"

rescue Google::APIClient::TransmissionError => e
puts e.result.body
end
end

main

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

連投しますが、こちらでないとコードが読みにくいので別回答で答えます。

ざっくり書いたコードなので、全く動作保証しません。
また、YoutubeAPIもコードサンプルを斜めに見ただけなので、相当怪しいです。
雰囲気だけでもわかれば。

Railsのコントローラを仮に、YoutubeMovieControllerとします。

lang

1# controller/youtube_movie_controller.rb 2 3class YoutubeMovieController < ApplicationController 4 5 private 6 def get_service 7 client = Google::APIClient.new( 8 :key => DEVELOPER_KEY, 9 :authorization => nil, 10 :application_name => $PROGRAM_NAME, 11 :application_version => '1.0.0' 12 ) 13 youtube = client.discovered_api(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) 14 return client, youtube 15 end 16 17 public 18 def index 19 end 20 21 def search_movie 22 @search_word = params[:search_word] 23 24 opts = Trollop::options do 25 opt :q, @search_word, :type => String, :default => 'Google' 26 opt :max_results, 'Max results', :type => :int, :default => 25 27 end 28 29 client, youtube = get_service 30 31 begin 32 # Call the search.list method to retrieve results matching the specified 33 # query term. 34 search_response = client.execute!( 35 :api_method => youtube.search.list, 36 :parameters => { 37 :part => 'snippet', 38 :q => opts[:q], 39 :maxResults => opts[:max_results]}) 40 41 @videos = [] 42 @channels = [] 43 @playlists = [] 44 45 # Add each result to the appropriate list, and then display the lists of 46 # matching videos, channels, and playlists. 47 search_response.data.items.each do |search_result| 48 case search_result.id.kind 49 when 'youtube#video' 50 videos << search_result 51 when 'youtube#channel' 52 channels << search_result 53 when 'youtube#playlist' 54 playlists << search_result 55 end 56 end 57 rescue Google::APIClient::TransmissionError => e 58 flash.now[:error] = e.result.body 59 render action: :index 60 return false 61 end 62 end 63 64end

lang

1# view/youtube_movie/index.html.erb 2 3<% flash.each do |key, value| %> 4 <%= content_tag(:div, value, class: "#{key}") %> 5<% end %> 6<%= form_tag search_movie_youtube_movie_path do %> 7 <%= text_field_tag :search_word, @search_word %> 8 <%= submit_tag "search" %> 9<% end %> 10

lang

1# view/youtube_movie/search_movie.html.erb 2 3<h1>ビデオ</h1> 4<table> 5 <% @videos.each do |video| %> 6 <tr><td><%= video..snippet.title</td><td>ここにビデオにジャンプするとかのリンクを置いたりする</td></tr> 7 <% end %> 8</table> 9<h1>チャンネル</h1> 10<table> 11 <% @channels.each do |video| %> 12 <tr><td><%= video..snippet.title</td><td>ここにチャンネルにジャンプするとかのリンクを置いたりする</td></tr> 13 <% end %> 14</table> 15<h1>プレイリスト</h1> 16<table> 17 <% @video.each do |video| %> 18 <tr><td><%= video..snippet.title</td><td>ここにプレイリストにジャンプするとかのリンクを置いたりする</td></tr> 19 <% end %> 20</table> 21

こんな感じでわかりますか?

投稿2015/06/24 10:24

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SigenSakiyama

2015/06/25 03:01

ありがとうございます。エラーがでて調べてわからなかったらまたここで聞かせてもらってもいいですか?
guest

0

どれぐらいのことをしたいのかよくわからないので、一番単純そうな方法で。

  1. 最初のViewで検索ワードを取得
  2. そのワードを受け取るコントローラ側に上記のYoutube検索メソッドを実装、
    結果はオブジェクトで返ってくる
  3. 結果オブジェクトをViewに渡して表示

といった感じではないでしょうか?

ちょうどRailsのMVCのVCだけ実装する感じですね。

検索結果を永続化したいのであれば、検索結果を保持できるようなModelを作って、
APIから取得したオブジェクトでそのModelを生成、保存するようにすればよいのではないでしょうか?

投稿2015/06/24 00:23

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SigenSakiyama

2015/06/24 03:32

回答ありがとうございます。僕が作りたいことは、railsで キーワードで検索したyoutube動画新着100件を人気順に取得するという感じです。そこで質問なんですが最初のviewとは上のコードの具体的にどの部分でしょうか?controllerはdef get_service から search_response.data.items.each do |search_result| の部分まででしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問