YouTube Data APIを使ってみる


今回は YouTube Data API v3 を使ってみます。

YouTube Data API v3 とは

Googleが提供しているAPIのひとつ。
YouTube関連でいうと、他にもYouTube Analytics APIなども提供されていますが、今回は動画検索をしたくYouTube Data APIを利用しました。
YouTube Data APIでは、主に以下のようなことができます。

操作 概要
list リソース(動画やプレイリスト、チャンネルなど)を取得
insert 新しいリソースの作成
update 既存のリソースの変更
delete 特定のリソースを削除

なお、それぞれの操作で扱えるリソースは異なるようです。詳細はドキュメントをご覧ください。
YouTube Data API の概要#リソースとリソースの種類

前提

利用するためには、Googleアカウントを所持していること。
これさえクリアしていれば簡単に利用できます。

手順

1. YouTube Data APIの有効化

https://console.developers.google.com
上記にアクセスし、「新しいプロジェクト」を作成します。お好きなプロジェクト名を入力し、作成します。
プロジェクトが完成したら、右上のベルマークに通知がきますので、そこからプロジェクトページへ移動。

このような画面がでてきますので、画面中央のAPIから「APIの概要に移動」をクリック。

そして「APIとサービスを有効化」をクリックすると以下のような画面が出てきますので、ここからYouTube Data APIを検索し、「有効にする」をクリック。

これで、YouTube Data APIを利用できるようになりました。

2. Credentialの追加

続いて、APIのアクセスキーを取得します。

プロジェクトページの左側のナビゲーションから「認証情報」をクリック。
「認証情報を作成」→「APIキー」を選択すると、あっという間に作成してくれます。
この作成したAPIキーは、アプリケーション制限(IPアドレスなど)やAPI種類の制限(YouTube Data APIでしか利用できない、など)など、利用制限設定ができますので、適宜設定してください。

…なんと、これで準備は完了です。非常に簡単ですね。

リソース検索してみる

これで準備が整ったので、実際にAPIを使ってみたいと思います。
今回はScala+Play(Httpクライアントはokhttp)で試してみます。

/**
 * provide Youtube Apis.
 */
@Singleton
class YoutubeApi {

  private lazy val client: OkHttpClient = new OkHttpClient()

  /**
   * Search Youtube Contents.
   *
   * @return 
   */
  def search(): String = {
    val host: String = "https://www.googleapis.com/youtube/v3/search?"
    val params: String = "part=snippet&regionCode=jp&q=hanaenatsuki&key=${key}"
    val url: String = host + params
    val request: Request = new Request.Builder().url(url).build()

    client
      .newCall(request)
      .execute()
      .body()
      .string()
  }

実行してみると、以下のような結果を取得できました(一部省略)。結果はjsonで返ってきます。

{
  "kind": "youtube#searchListResponse",
  "etag": "5tf0sV-PMXIhtJBWLXFYDiCSBbk",
  "nextPageToken": "CAUQAA",
  "regionCode": "JP",
  "pageInfo": {
    "totalResults": 9302,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "viayFPw-HKkvnbsnjJfGokVv4_k",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg"
      },
      "snippet": {
        "publishedAt": "2016-12-22T15:41:09Z",
        "channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg",
        "title": "花江夏樹",
        "description": "花江夏樹の個人的な趣味チャンネルです。 普段は声優の仕事をしています。本物です。 基本毎週 月水金 19時更新 (休むこともある)",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
          },
          "high": {
            "url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s800-c-k-no-mo-rj-c0xffffff/photo.jpg"
          }
        },
        "channelTitle": "花江夏樹",
        "liveBroadcastContent": "none",
        "publishTime": "2016-12-22T15:41:09Z"
      }
    },
    {
      "kind": "youtube#searchResult",
      "etag": "gRSJ4tI5FIymRL-rHhEO_GqCXpI",
      "id": {
        "kind": "youtube#video",
        "videoId": "ex9RgLSt5XU"
      },
      "snippet": {
        "publishedAt": "2020-07-05T10:00:11Z",
        "channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg",
        "title": "【Undertale】#1 声優 花江夏樹がアフレコしながらクリアを目指す【アンダーテール】",
        "description": "あらすじ 今回はソロ実況! あの名作UNDER TALEをプレイしていきます! ▽出演者 花江夏樹 ▽編集 正一 花江夏樹 ▽DLや購入はこちらから...",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/ex9RgLSt5XU/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/ex9RgLSt5XU/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/ex9RgLSt5XU/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "花江夏樹",
        "liveBroadcastContent": "none",
        "publishTime": "2020-07-05T10:00:11Z"
      }
    },
    ...
  ]
}

僕が使ったパラメータだけ簡単に説明します。

パラメータ required 概要
part true snippetにすると動画のタイトルや説明なども取得できる。
regionCode false 指定した国の検索結果に絞り込める。
q false 検索ワードをセットできる。
key アクセスキーをセットできる。

その他パラメータや上記パラメータの詳細は以下をご覧ください。
Search: list

注意点

非常にシンプルに利用できますが、無料範囲ではいろいろ制限があります。

こちらの割り当てから利用状況が確認できますが、10,000 Queries / day などの制限があります。
Search APIを一度実行すると102 Queries消費していたので、1日で実行できるのはSearch APIだけだとおおよそ98回程度って感じですね。

無料範囲で利用する場合は、お気をつけください。