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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

YouTube API

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

Ruby on Rails

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

Q&A

解決済

1回答

4648閲覧

Youtube API 視聴回数の取得

isumidaichi

総合スコア7

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

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

YouTube API

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/03/01 13:03

編集2018/03/01 13:06

Youtube公式サイトをいじり、Rubyで動画情報の取得を試みています。
以下がコードです。

Ruby

1class Youtube < ApplicationRecord 2 3 require 'rubygems' 4 gem 'google-api-client', '>0.7' 5 require 'google/api_client' 6 require 'trollop' 7 8 DEVELOPER_KEY = ######################### 9 YOUTUBE_API_SERVICE_NAME = 'youtube' 10 YOUTUBE_API_VERSION = 'v3' 11 12 def self.get_service 13 client = Google::APIClient.new( 14 :key => DEVELOPER_KEY, 15 :authorization => nil, 16 :application_name => $PROGRAM_NAME, 17 :application_version => '1.0.0' 18 ) 19 youtube = client.discovered_api(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) 20 21 return client, youtube 22 end 23 24 def self.main 25 opts = Trollop::options do 26 opt :q, 'Search term', :type => String, :default => 'アウディ' 27 opt :max_results, 'Max results', :type => :int, :default => 5 28 end 29 30 client, youtube = get_service 31 32 begin 33 # Call the search.list method to retrieve results matching the specified 34 # query term. 35 search_response = client.execute!( 36 :api_method => youtube.search.list, 37 :parameters => { 38 :part => 'snippet', 39 :q => opts[:q], 40 :maxResults => opts[:max_results] 41 } 42 ) 43 44 urls = [] 45 titles = [] 46 descriptions = [] 47 channels = [] 48 thumbnails = [] 49 views = [] 50 51 # Add each result to the appropriate list, and then display the lists of 52 # matching videos, channels, and playlists. 53 search_response.data.items.each do |search_result| 54 case search_result.id.kind 55 when 'youtube#video' 56 urls << "http://www.youtube.com/watch?v=#{search_result.id.videoId}" 57 titles << "#{search_result.snippet.title}" 58 descriptions << "#{search_result.snippet.description}" 59 channels << "#{search_result.snippet.channelTitle}" 60 thumbnails << "#{search_result.snippet.thumbnails.default.url}" 61 views << "#{search_result.statistics.viewCount}" 62 end 63 end 64 65 puts "Urls:\n", urls, "\n" 66 puts "Titles:\n", titles, "\n" 67 puts "Descriotions:\n", descriptions, "\n" 68 puts "Channels:\n", channels, "\n" 69 puts "Thumbnials:\n", thumbnails, "\n" 70 puts "Views:\n", views, "\n" 71 72 rescue Google::APIClient::TransmissionError => e 73 puts e.result.body 74 end 75 76 end 77 78end

視聴回数を取得するために、下記の:partの部分を 「:part => 'snippet, statistics'」としているのですが、エラーが出ます。

search_response = client.execute!( :api_method => youtube.search.list, :parameters => { :part => 'snippet', :q => opts[:q], :maxResults => opts[:max_results] } )

####エラー画面

{ "error": { "errors": [ { "domain": "youtube.part", "reason": "unknownPart", "message": "statistics", "locationType": "parameter", "location": "part" } ], "code": 400, "message": "statistics" } }

statisticsは視聴回数を取得するためのプロパティだと認識しています。
どこが間違っているのでしょうか。ご教授お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どこが間違っているのでしょうか。

何らかのエラーが発生した時は
0. エラーメッセージでキーワード検索を行う。
0. 公式ドキュメントを参照する

この2点を行うと解決することが多いです。

質問文のソースコードで指定しているapi_methodyoutube.search.listなため
公式ドキュメント
リクエスト:YouTube Data API (v3)Search: list
レスポンス(検索リソース):Search
を参照します。

リクエストのドキュメントより引用(太文字部分は回答者強調)。

part
string
part パラメータには、API レスポンスに含める 1 つまたは複数の search リソースのプロパティをカンマ区切りリストの形式で指定します。このパラメータに指定できる part 名は idsnippet です。

エラーメッセージ(unknownPart)が示す通りpartstatisticsは指定できません。
上記リクエストのリンク先のTry this APIでYouTube Data APIの動作テストを行うことができます。

視聴回数を取得したいという要件から推測で回答するとYouTube Data API (v3)videos: listこのAPIが使用できます。
「youtube.video.list ruby statistics」のキーワードで検索するとサンプルコードがヒットするかと。
videos listのパラメータ:idにYouTube 動画 ID をカンマ区切りリストで渡せば、複数件の取得が可能です。

投稿2018/03/01 19:59

編集2018/03/01 22:15
umyu

総合スコア5846

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

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

isumidaichi

2018/03/05 07:52

ありがとうございます! ご指導いただいた通りに公式ページを読み無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問