🦁

YouTube Data APIを使ってチャンネルに含まれる動画を取得する流れ

2022/03/06に公開

YouTube から動画の情報を取得するための API について調べてみました。

API を使ってやりたいことは、

特定のチャンネルにアップロードされている動画の一覧を取得して各動画の詳細(タイトル、説明、再生数など)を取得する

です。

調べたところ YouTube Data API を使うと実現できそうでした。

この記事は API の使い方のみを記載しています。Python から実際に API 利用して動画の情報を取得する内容についてはこちらの記事をご覧ください。

https://zenn.dev/yorifuji/articles/youtube-data-api-python

基本的なこと

  • チャンネルや動画の情報を取得するには YouTube Data API を使う
    • チャンネルの検索、チャンネルの概要の取得、プレイリストの取得(動画の一覧)、動画の詳細情報の取得、など
  • 無料で利用できる(大規模な利用だと有料かもしれない、要確認)

認証

  • API を利用するためには GCP にプロジェクトを作成する必要がある
  • OAuth認証 もしくは APIKEY で API の認証をする
    • 利用者の個人情報にアクセスするならOAuth認証でそれ以外はAPIKEYみたいな使い分けで良さそう

Quota

動画の情報を取得する流れ

冒頭に記載したことを実現するための API の利用の流れは以下の通り。

  • Search:list でチャンネルを検索する
    • channelId を取得する
  • Channels:list でチャンネルの情報を取得する
    • アップロード済み動画 のリストが含まれているプレイリストの ID(playlistId)が取得できる
  • PlaylistItems:listplaylistId に含まれている動画の一覧を取得する
    • 各動画の概要と videoId が取得できる
  • Videos:list でビデオの詳細を取得する
    • 再生数やいいねなどが取得できる

Search:list

https://developers.google.com/youtube/v3/docs/search/list

  • 汎用の検索用の API、動画やチャンネルが検索できる

  • 今回はチャンネルの ID(channelId)を取得するために使う

  • なので通常はSearch:listを使わなくてもchannelIdは分かる

    • チャンネルを検索したり情報(概要、サムネイルなど)を取得したい時にSearch:listを使う
  • 下記は HikakinTV という query で Search:list を呼び出した時のレスポンス

    • "channelId": "UCZf__ehlCEBPop-_sldpBUQ"channelIdに該当
{
  "kind": "youtube#searchListResponse",
  "etag": "MbmXZk8nA8FgTh0Izv-n8JTXs8I",
  "nextPageToken": "CAUQAA",
  "regionCode": "JP",
  "pageInfo": {
    "totalResults": 95625,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#searchResult",
      "etag": "K9MC--aTjZ_QSSRwSZ1-KJ7i20Y",
      "id": {
        "kind": "youtube#channel",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ"
      },
      "snippet": {
        "publishedAt": "2011-07-19T11:31:43Z",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ",
        "title": "HikakinTV",
        "description": "HikakinTVはヒカキンが面白いものを紹介するチャンネルです。 ◇プロフィール◇ YouTubeに ...",
        "thumbnails": {
          "default": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLQZxfFwNwOkE2Kp_uQtMdjRMLONxs1OFdOKFh8MJw=s88-c-k-c0xffffffff-no-rj-mo"
          },
          "medium": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLQZxfFwNwOkE2Kp_uQtMdjRMLONxs1OFdOKFh8MJw=s240-c-k-c0xffffffff-no-rj-mo"
          },
          "high": {
            "url": "https://yt3.ggpht.com/ytc/AKedOLQZxfFwNwOkE2Kp_uQtMdjRMLONxs1OFdOKFh8MJw=s800-c-k-c0xffffffff-no-rj-mo"
          }
        },
        "channelTitle": "HikakinTV",
        "liveBroadcastContent": "none",
        "publishTime": "2011-07-19T11:31:43Z"
      }
    },
    ...

Channels:list

https://developers.google.com/youtube/v3/docs/channels/list

  • channelIdを指定すると当該のチャンネルの情報が取得できる

  • チャンネルにアップロードされた動画は プレイリスト 毎に管理されている、アップロード済み動画もプレイリストのうちの一つ

  • 今回は アップロード済み動画 の ID(playlistId)を取得するために使う

  • API リクエストで contentDetails を指定するとplaylistId が取得できる

  • 以下は Hikakin さんのチャンネル(channelId:UCZf__ehlCEBPop-_sldpBUQ)に対してChannels:listcontentDetailsを取得した時のレスポンス

    • "uploads": "UUZf__ehlCEBPop-_sldpBUQ" がアップロード済み動画のplaylistId
{
  "kind": "youtube#channelListResponse",
  "etag": "VkhzwWMfbS-AImFCVbdk9bsAkHU",
  "pageInfo": {
    "totalResults": 1,
    "resultsPerPage": 5
  },
  "items": [
    {
      "kind": "youtube#channel",
      "etag": "DmQDzl3s73mpYdvhg652SASTHzY",
      "id": "UCZf__ehlCEBPop-_sldpBUQ",
      "contentDetails": {
        "relatedPlaylists": {
          "likes": "",
          "uploads": "UUZf__ehlCEBPop-_sldpBUQ"
        }
      }
    }
  ]
}

PlaylistItems:list

https://developers.google.com/youtube/v3/docs/playlistItems/list

  • Channels:list で取得した playlistId を使うとプレイリストに含まれる動画のリストが取得できる

  • リクエストで snippet を指定するとプレイリストに含まれている各動画の概要と ID(videoId)が取得できる

  • 以下は先ほど取得した playlistID UUZf__ehlCEBPop-_sldpBUQ を使って snippet を取得した時のレスポンス

    • itemsの配列に動画のリストが含まれている
    • タイトル・概要・サムネイルの URL・videoId などが取得できる
{
  "kind": "youtube#playlistItemListResponse",
  "etag": "BYCEJTIzwWnSGP8xRcbE-wMKY88",
  "nextPageToken": "EAAaBlBUOkNBVQ",
  "items": [
    {
      "kind": "youtube#playlistItem",
      "etag": "mF-v7__x9vtSAUlAu7KIBvS4R98",
      "id": "VVVaZl9fZWhsQ0VCUG9wLV9zbGRwQlVRLjdLc2F4MldHTm5R",
      "snippet": {
        "publishedAt": "2022-03-04T07:17:26Z",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ",
        "title": "【都市伝説】海老のかわりにパイの実でエビチリ作るとウマいってマジ…!?【ヒカキンTV】",
        "description": "◆チャンネル登録はこちら↓\nhttp://www.youtube.com/user/hikakintv?sub_confirmation=1\n\n◆ツイッター\nhttps://twitter.com/hikakin\n\n◆インスタグラム\nhttps://instagram.com/hikakin/\n\n◆TikTok\nhttps://vt.tiktok.com/BTWxUN/\n\n◆ヒカキンゲームズ\nhttp://www.youtube.com/hikakingames\n\n◆ビートボックス動画のHIKAKINチャンネル\nhttp://www.youtube.com/HIKAKIN\n\n◆ラフな動画のHikakinBlog\nhttp://www.youtube.com/hikakinblog\n\n\n◆ヒカキンLINEスタンプはこちら\nhttps://store.line.me/stickershop/product/1022677/ja\n\n\n◆ヒカキンLINE公式アカウント\n●友達登録はこちら↓\nhttp://line.naver.jp/ti/p/%40hikakin\n\n#パイの実\n#エビチリ\n#料理",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "HikakinTV",
        "playlistId": "UUZf__ehlCEBPop-_sldpBUQ",
        "position": 0,
        "resourceId": {
          "kind": "youtube#video",
          "videoId": "7Ksax2WGNnQ"
        },
        "videoOwnerChannelTitle": "HikakinTV",
        "videoOwnerChannelId": "UCZf__ehlCEBPop-_sldpBUQ"
      }
    },
    {
      "kind": "youtube#playlistItem",
      "etag": "3DilffukqinoaU_e1hjz7vaYpLQ",
      "id": "VVVaZl9fZWhsQ0VCUG9wLV9zbGRwQlVRLnFoeHc4MEo3ZHJF",
      "snippet": {
        "publishedAt": "2022-03-02T09:18:51Z",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ",
        "title": "メガネの動きがヤバすぎる人www #Shorts #TikTok",
        "description": "◆チャンネル登録はこちら↓\nhttp://www.youtube.com/user/hikakintv?sub_confirmation=1\n\n◆ツイッター\nhttps://twitter.com/hikakin\n\n◆インスタグラム\nhttps://instagram.com/hikakin/\n\n◆TikTok\nhttps://vt.tiktok.com/BTWxUN/\n\n◆ヒカキンゲームズ\nhttp://www.youtube.com/hikakingames\n\n◆ビートボックス動画のHIKAKINチャンネル\nhttp://www.youtube.com/HIKAKIN\n\n◆ラフな動画のHikakinBlog\nhttp://www.youtube.com/hikakinblog\n\n\n◆ヒカキンLINEスタンプはこちら\nhttps://store.line.me/stickershop/product/1022677/ja\n\n\n◆ヒカキンLINE公式アカウント\n●友達登録はこちら↓\nhttp://line.naver.jp/ti/p/%40hikakin\n\n#Shorts\n#TikTok",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/qhxw80J7drE/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/qhxw80J7drE/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/qhxw80J7drE/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/qhxw80J7drE/sddefault.jpg",
            "width": 640,
            "height": 480
          },
          "maxres": {
            "url": "https://i.ytimg.com/vi/qhxw80J7drE/maxresdefault.jpg",
            "width": 1280,
            "height": 720
          }
        },
        "channelTitle": "HikakinTV",
        "playlistId": "UUZf__ehlCEBPop-_sldpBUQ",
        "position": 1,
        "resourceId": {
          "kind": "youtube#video",
          "videoId": "qhxw80J7drE"
        },
        "videoOwnerChannelTitle": "HikakinTV",
        "videoOwnerChannelId": "UCZf__ehlCEBPop-_sldpBUQ"
      }
    },
    ...

Videos:list

https://developers.google.com/youtube/v3/docs/videos/list

  • videoId を指定すると動画の詳細情報が取得できる

  • タイトルなどは snippet に、再生数などは statistics に含まれている

  • 複数の videoId を 1 回のリクエストに含めるとまとめて取得することもできる

  • 以下はvideoId7Ksax2WGNnQを指定して取得した時のレスポンス

{
  "kind": "youtube#videoListResponse",
  "etag": "SH45PQYpChpo9r8NNNWyn1T1lrw",
  "items": [
    {
      "kind": "youtube#video",
      "etag": "oRlvGMaJZ58fr7W_ofYH0CTNUFs",
      "id": "7Ksax2WGNnQ",
      "snippet": {
        "publishedAt": "2022-03-04T10:00:15Z",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ",
        "title": "【都市伝説】海老のかわりにパイの実でエビチリ作るとウマいってマジ…!?【ヒカキンTV】",
        "description": "◆チャンネル登録はこちら↓\nhttp://www.youtube.com/user/hikakintv?sub_confirmation=1\n\n◆ツイッター\nhttps://twitter.com/hikakin\n\n◆インスタグラム\nhttps://instagram.com/hikakin/\n\n◆TikTok\nhttps://vt.tiktok.com/BTWxUN/\n\n◆ヒカキンゲームズ\nhttp://www.youtube.com/hikakingames\n\n◆ビートボックス動画のHIKAKINチャンネル\nhttp://www.youtube.com/HIKAKIN\n\n◆ラフな動画のHikakinBlog\nhttp://www.youtube.com/hikakinblog\n\n\n◆ヒカキンLINEスタンプはこちら\nhttps://store.line.me/stickershop/product/1022677/ja\n\n\n◆ヒカキンLINE公式アカウント\n●友達登録はこちら↓\nhttp://line.naver.jp/ti/p/%40hikakin\n\n#パイの実\n#エビチリ\n#料理",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/7Ksax2WGNnQ/hqdefault.jpg",
            "width": 480,
            "height": 360
          }
        },
        "channelTitle": "HikakinTV",
        "tags": [
          "ヒカキン",
          "ヒカキンtv",
          "hikakintv",
          "hikakin",
          "ひかきん",
          "ひかきんtv",
          "ユーチューバー",
          "YouTube",
          "YouTuber",
          "商品紹介",
          "おもちゃ",
          "オモチャ",
          "玩具",
          "動画",
          "ビートボックス",
          "Beatbox",
          "ボイパ",
          "ヒューマンビートボックス",
          "ボイスパーカッション",
          "レビュー"
        ],
        "categoryId": "24",
        "liveBroadcastContent": "none",
        "localized": {
          "title": "【都市伝説】海老のかわりにパイの実でエビチリ作るとウマいってマジ…!?【ヒカキンTV】",
          "description": "◆チャンネル登録はこちら↓\nhttp://www.youtube.com/user/hikakintv?sub_confirmation=1\n\n◆ツイッター\nhttps://twitter.com/hikakin\n\n◆インスタグラム\nhttps://instagram.com/hikakin/\n\n◆TikTok\nhttps://vt.tiktok.com/BTWxUN/\n\n◆ヒカキンゲームズ\nhttp://www.youtube.com/hikakingames\n\n◆ビートボックス動画のHIKAKINチャンネル\nhttp://www.youtube.com/HIKAKIN\n\n◆ラフな動画のHikakinBlog\nhttp://www.youtube.com/hikakinblog\n\n\n◆ヒカキンLINEスタンプはこちら\nhttps://store.line.me/stickershop/product/1022677/ja\n\n\n◆ヒカキンLINE公式アカウント\n●友達登録はこちら↓\nhttp://line.naver.jp/ti/p/%40hikakin\n\n#パイの実\n#エビチリ\n#料理"
        },
        "defaultAudioLanguage": "ja"
      },
      "statistics": {
        "viewCount": "573613",
        "likeCount": "14561",
        "favoriteCount": "0",
        "commentCount": "1359"
      }
    }
  ],
  "pageInfo": {
    "totalResults": 1,
    "resultsPerPage": 1
  }
}

まとめ

ここまでの内容で冒頭に記載した 特定のチャンネルにアップロードされている動画の一覧を取得して各動画の詳細(タイトル、説明、再生数など)を取得する は実現できそうでした。

参考になったらいいねしてもらえると嬉しいです。

Discussion