連載第10回の目的

連載第10回と第11回では、Excel VBAにおけるYouTube APIの活用について紹介します。Googleが提供するこのAPIは、YouTube動画の再生と、さまざまな情報の取得・設定のための機能を無償で提供します。今回はこれに含まれる「Data API」を使用して、ワークシート上にあるキーワードから動画を検索したり、動画情報から動画を再生したりするExcelワークシートを作成します(図1)。
今回は、「YouTube API」の概要を紹介し、API呼び出しのテストまでを取り上げます。

  • 完成サンプル

    図1:完成サンプル

▼完成サンプルのExcelファイル
https://github.com/wateryinhare62/mynavi_excelvba_webservice

なお、本連載では動作確認をWindows 10 Pro(64bit)、Microsoft 365(Excel 16.0、VBA 7.1)で行っています。旧バージョンや単体のExcelで試す場合にはご注意ください。

YouTube APIについて

YouTube APIは、Googleが提供するWebサービスのひとつです。YouTube APIは、以下に挙げる動画を中心としたさまざまな機能を提供します。

・Players(動画の再生に関する機能)
  IFrame Player、Android Player、iOS Helper Library、Player Parameters
・Data and Resources(動画データに関する機能)
  Data API (v3)、Analytics API、Live Streaming API
・Tools and Widgets(ツールとウィジェット)
  Subscribe Button

本記事では、このうちData API (v3)(以降、Data API)について紹介していきます。

利用制限(クォータ)

これらの機能は、無償で利用できます。Playersといった動画の再生のみを目的としたAPIは無制限の利用が可能ですが、Data and Resourcesといった情報の取得や更新を目的としたAPIは、利用に一定の制限が加えられます。制限はクォータ(割り当て)という機能で管理されており、クォータの範囲内での利用になります。クォータを越えた分は有償になるということはなく、あくまでも利用の制限となります。クォータの上限アップを申請することができますが、これには審査が必要となっています。
クォータはユニットという単位で管理されます。APIの種類やリクエストする情報の量に応じてユニットの値が決まります。大まかには、以下の通りとなっています。

  • 取得系のAPIは1ユニットを消費
  • 更新系のAPIは50ユニットを消費
  • 動画アップロードは1,000ユニットを消費

動画再生のための情報を取得する程度でしたら微少な消費で済みますが、動画データを更新したり、動画そのものの更新には大きく消費されることが分かります。また、APIによる情報の取得や更新では、パーツという対象となる情報のグループを指定することになっています。パーツを指定するごとに2ユニットを上乗せで消費するので、不要なパーツをリクエストから外すことで、クォータの消費量を節約することができます。例えば、動画を検索するvideos APIの場合、IDのみを取得する場合(idパーツ)とその他の情報(snippetsパーツ)を取得する場合とでは、以下のように必要なユニットが変化します。全てを取得しようとすると5ユニットを消費しますが、IDのみでよければ3ユニットで済みます。もちろん、1回のAPI呼び出しで完結するケースばかりではないので、トータルで考える必要がありますが、考え方として押さえておいて下さい。

動画検索(videos)は取得系なので1ユニット
+idパーツを指定…2ユニット
+snippetsパーツを指定…2ユニット

クォータは、毎日太平洋時間(PT)の0時にリセットされます。デフォルトでは、クォータの1日あたりのユニット数は10,000となっています。クォータをどれだけ消費しているかという状況は、下記のCloud Consoleのページで確認できます。API名をクリックし、切り替わったページで[割り当て]をクリックすることで確認できます。本記事のような利用の範囲では、クォータを越えることはないでしょう。

▼APIとサービス https://code.google.com/apis/console?hl=ja

APIの使用を準備する

Data APIの利用には、Googleアカウントの取得やいくつかの登録手続きが必要です。順を追って取得、登録していきます。

  • Googleアカウントの取得
  • 支払い情報の登録
  • Data APIの利用開始

このうち、Googleアカウントの取得と支払い情報の登録については、第8回を参照してください。

Data APIの利用開始

Data APIは、上記のURLから手続きして利用できるようになります(図2)。

  • 図2:API とサービス

    図2:API とサービス

・図2の画面で左ペインにある[ライブラリ]か、画面上部にある[+APIとサービスの有効化]のいずれかをクリックします。
・検索窓に「YouTube」と入力します。候補が表示されますので、「youtube data api v3」をクリックします。
・「YouTube Data API」が一覧に表示されますのでクリックします。
・有効にするか尋ねられますので、[有効にする]をクリックします。

これで、Data APIが有効になります(図2)。

  • 図3:有効になったData API

    図3:有効になったData API

APIキーの取得

Data APIの利用にはAPIキーが必要になります。APIキーを取得していない場合は、Cloud Consoleのページから取得してください。なお、第8回でAPIキーを取得している場合には、それを使用することができます。
APIキーは、以下の手順で取得できます。

・上記のCloud Consoleのページで左ペインにある[認証情報]をクリックします。
・ページ上部にある[+認証情報を作成]をクリックします。
・表示されるドロップダウンで「APIキー」をクリックすると、作成中のメッセージのあと作成したキーの情報が表示されます。

ここでAPIキーをコピーしてテキストファイル等に保存しておき、スクリプトを書くときに参照できるようにしましょう。なお、作成したキーはいつでもこの画面から確認できます(図4)。

  • 図4:取得したAPIキー

    図4:取得したAPIキー

APIの呼び出しをテストする

APIの有効化とAPIキーの取得ができたので、APIの呼び出しを始めることができます。スクリプトを書く前に、APIが正しく呼び出せるかテストしておきましょう。
今回使用するData APIはGETメソッドでアクセスするものだけなので、API呼び出しのテストはWebブラウザで実行できます。なお、WebブラウザがJSONデータを見やすく表示してくれるようになっていると便利です。Google Chromeに、第3回で紹介した拡張機能「JSON Viewer」を入れておいてください。 今回のサンプルは、①キーワードから動画のIDを割り出し、②動画のIDからタイトルなどの情報を取得して動画を再生できるようにしていきます。この①②のAPIをテストします。返されるJSONデータの理解はスクリプトの読みこなしに必要なので、基本的な構成を理解しておいてください。

キーワード等から動画の情報を取得する―Search API

Search APIは、その名の通り動画についての情報を検索するAPIです。Search APIについては、下記にドキュメントがありますので、全容を知りたい場合には参照してください。

▼Search  |  YouTube Data API  |  Google Developers
https://developers.google.com/youtube/v3/docs/search?hl=ja

Search APIには、以下のAPIがあります。

・list:動画をテキストなどから検索

1個しかありませんので、このlistを使っていきます。listのエンドポイントは以下のようになります。

https://www.googleapis.com/youtube/v3/search?parameters(GET)

parametersのパラメータに、検索したい動画の情報を指定していきます。主なパラメータを表1に挙げます(partのみ必須)。

表1:Search API(list)の主なパラメータ

パラメータ 概要
part レスポンスに含めるパーツの指定(id、snippet)
forMine trueにすると認証されたユーザの動画のみに検索を限定(要type=video)
channelId 動画チャネルのID
channelType チャネルのタイプ(any:全部、show:番組)
maxResults 結果の最大数(0~50,デフォルトは5)
order 結果の並び順(date:作成日降順、rating:評価降順、relevance(デフォルト):関連性降順、title:タイトル昇順、videoCount:番号降順、viewCount:再生回数昇順)
pageToken 結果のページを表すトークン(結果のnextPageTokenとprevPageTokenで返される)
publishedAfter 公開日範囲の末尾(形式:1970-01-01T00:00:00Z)
publishedBefore 公開日範囲の先頭(形式:1970-01-01T00:00:00Z)
q クエリ文字列
regionCode 国コード(jp、us、ukなど。ISO 3166-1 alpha-2)
type タイプ(channel、playlist、video、デフォルトは全部)

ここでは、partに「id,snippet」、qに「Excel,VBA」、regionCodeに「jp」を指定してAPIを呼び出してみます。APIキーの指定を忘れないでください(以下では途中から省略しています)。

https://www.googleapis.com/youtube/v3/search?part=id,snippet&q=Excel,VBA&regionCode=jp&key=AIzaS…

このURLをWebブラウザのアドレス欄に入力して呼び出すと、問題なければ以下のようなレスポンスが返ってきます。レスポンスで返ってきたJSONデータの構造を見てみましょう。その概略をリスト1に示します。

[リスト1]キーワード検索結果のJSONデータの構造

{
  "kind": "youtube#searchListResponse", … 取得に成功した場合に返される
  "etag": "Qn7Bo3SVigDsObO4pWNJlxGMe0Y",
  "nextPageToken": "CAUQAA", … 次ページを取得するためのトークン
  "regionCode": "JP", … 国コード
  "pageInfo": { … 表示されているページの情報
    "totalResults": 1000000, … 総結果数
    "resultsPerPage": 5 … ページあたりの結果数
  },
  "items": [ … 結果の配列
    {
      "kind": "youtube#searchResult",
      "etag": "8JYrM6qU-rbRU07_VgCGFxgKf_Q",
      "id": { … partにidを指定した場合に返されるパーツ
        "kind": "youtube#video",
        "videoId": "G05TrN7nt6k" … 動画のID
      },
      "snippet": { … partにsnippetを指定した場合に返されるパーツ
        "publishedAt": "2019-11-22T17:00:11Z", … 公開日時
        "channelId": "UCqyBfm_H9ugGirk1ufYA2YA", … チャネルID
        "title": "Excel VBA Beginner Tutorial", … タイトル
        "description": "Excel VBA Beginner Tutorial For ad free training and certificates please join Learnit Anytime: https://www.learnitanytime.com ...", … 説明
        "thumbnails": { … サムネール画像
          "default": { … デフォルトのサムネール
            "url": "https://i.ytimg.com/vi/G05TrN7nt6k/default.jpg", … サムネール画像のURL
            "width": 120, … サムネール画像の幅
            "height": 90 … サムネール画像の高さ
          },
          "medium": { … 中サイズのサムネール(構成はデフォルトと同じ)
            …略…
          },
          "high": { … 大サイズのサムネール(構成はデフォルトと同じ)
            …略…
          }
        },
        "channelTitle": "Learnit Training", … 動画チャネルのタイトル
        "liveBroadcastContent": "none", … 実況コンテンツの有無
        "publishTime": "2019-11-22T17:00:11Z" … 公開日時
      }
    },
    …略…
  ]
}

データが正しく取得できている場合、kindというキーを含んだJSONが返されます。errorというキーが返される場合は、何らかの問題が生じていますので、リクエスト内容を確認してください。正常終了した場合の結果は、基本的に配列itemsにまとめられます。
結果は、ページに分割されて返されます。デフォルトはページあたり5項目です(resultsPerPage)。全ての結果が必要なら、nextPageTokenキーの値を使って検索を繰り返す必要があります。
partパラメータにidとsnippetを指定したので、idパーツとsnippetパーツが返ります。partパラメータに渡すパーツによって返される情報を制限できますので、IDのみ必要という場合にはsnippetは省略できます。リクエストのコストに関係しますので、不要なパーツは指定しないようにしましょう。

IDから動画の情報を取得する―Videos API

Videos APIは、動画情報を中心に取り扱うAPIです。Videos APIについては、下記にドキュメントがありますので、全容を知りたい場合には参照してください。

この記事は
Members+会員限定記事です。

ログイン/会員登録する