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

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

ただいまの
回答率

90.33%

  • Ruby

    8197questions

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

  • Ruby on Rails

    7678questions

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

  • スクレイピング

    382questions

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

  • YouTube API

    94questions

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

Youtube API 視聴回数の取得

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 421

isumidaichi

score 1

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

class Youtube < ApplicationRecord

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

  DEVELOPER_KEY = #########################
  YOUTUBE_API_SERVICE_NAME = 'youtube'
  YOUTUBE_API_VERSION = 'v3'

  def self.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 self.main
    opts = Trollop::options do
      opt :q, 'Search term', :type => String, :default => 'アウディ'
      opt :max_results, 'Max results', :type => :int, :default => 5
    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]
        }
      )

      urls = []
      titles = []
      descriptions = []
      channels = []
      thumbnails = []
      views = []

      # 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'
            urls << "http://www.youtube.com/watch?v=#{search_result.id.videoId}"
            titles << "#{search_result.snippet.title}"
            descriptions << "#{search_result.snippet.description}"
            channels << "#{search_result.snippet.channelTitle}"
            thumbnails << "#{search_result.snippet.thumbnails.default.url}"
            views << "#{search_result.statistics.viewCount}"
          end
        end

      puts "Urls:\n", urls, "\n"
      puts "Titles:\n", titles, "\n"
      puts "Descriotions:\n", descriptions, "\n"
      puts "Channels:\n", channels, "\n"
      puts "Thumbnials:\n", thumbnails, "\n"
      puts "Views:\n", views, "\n"

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

    end

end


視聴回数を取得するために、下記の: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は視聴回数を取得するためのプロパティだと認識しています。
どこが間違っているのでしょうか。ご教授お願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

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

何らかのエラーが発生した時は

  1. エラーメッセージでキーワード検索を行う。
  2. 公式ドキュメントを参照する

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

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

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

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

エラーメッセージ(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/05 16:52

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

    キャンセル

同じタグがついた質問を見る

  • Ruby

    8197questions

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

  • Ruby on Rails

    7678questions

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

  • スクレイピング

    382questions

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

  • YouTube API

    94questions

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