YouTube APIでチャンネルの動画一覧データを取得する

本記事では、`YouTube Data API V3`を使って、特定のチャンネルに投稿された動画の一覧データを取得する流れをまとめています。

チャンネルに投稿された動画の一覧データを取得するのはチャンネルIDをパラメーターに指定すれば1発で取れそうなイメージがありますが、実際には`channnels`にリクエストして、そのレスポンスデータを使って、`playlistItems`を実行する、という2つのリソースへのアクセスが必要でした。

そして、この事が公式ドキュメントを探した限り出てこなくてハマったので、記事に残そうと思います。

## 実践
**（１）**
[Google Cloud コンソール](https://console.cloud.google.com/projectselector2/apis/dashboard?hl=ja&inv=1&invt=AbziDw)を開き、プロジェクトを作成する。
作成済みであれば、プロジェクトを選択する。

**（２）**
検索ボックスに`youtube`と入力すると**YouTube Data API V3**が出るので選択する

![スクリーンショット 2025-06-08 10.40.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/ccd595b3-9286-418e-9623-de20215a9e19.png)

**（３）**
**YouTube Data API V3製品詳細ページ**へ遷移するので、`有効にする` ボタンをクリック

![スクリーンショット 2025-06-08 10.40.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/8715d479-f046-42b1-89e3-2867076f7349.png)

**（５）**
前のページに戻り、左のサイドメニューから`認証情報`を選択する

![スクリーンショット 2025-06-08 10.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/8705dfa9-8631-4933-b895-79bc8e27ee70.png)

ページの上部にある`＋認証情報を作成`をクリックて、`APIキー`を選択するとAPIキーが作成されるので、控えておきます。

![スクリーンショット 2025-06-08 10.42.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/e4249bab-88ed-4d57-8e69-01511da5bbcf.png)

**（６）**
再度ヘッダーの検索ボックスに`youtube`と入力して、**YouTube Data API V3製品詳細ページ**を開き、ページの下の方に、`Learn more`というリンクがあるので、クリックして開く

![スクリーンショット 2025-06-08 12.01.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/67e9fb6e-4021-4b13-a73b-1cde45e9733b.png)

**（７）**
ページが開いたら、ヘッダーのメニューから`サンプル`を選択し、YouTube Data API (V3)の下に各言語のリンクが並んでいるので、`JavaScript`を選択

![スクリーンショット 2025-06-08 12.03.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/3fdb140d-2793-4546-a7f2-a2a9d38be1e1.png)

**（８）**
ユースケースとコード スニペットというページが開きます。ここでリソース、メソッドを選択してAPIを実行できます。
本記事では特定のチャンネルのアップロード動画を取得したいと思います。
<sup>チャンネルIDを用意しておいてください。(*チャンネルIDの確認の仕方は省略)</sup>
リソース、メソッドは以下を選択します。
リソース：`channels`
メソッド：`list`

![スクリーンショット 2025-06-08 11.41.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/a9bc05a1-4923-4c5d-a4fb-001a38559c8a.png)
サンプル名の横にある赤色のコードアイコン`</>`をクリックします。

**（９）**
**API Explorerモーダル**が開くので、チャンネルIDを`id`パラメーターに指定し、下にあるExecuteボタンをクリックする。
*partに入っているのはレスポンスオブジェクトに含める情報で、デフォルトのままでOK

![スクリーンショット 2025-06-08 11.30.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/f48244b6-73de-4405-b38b-40a77a78e8cd.png)

**（１０）**
200が返って成功するとレスポンスに以下が含まれます。
```json
"contentDetails": {
  "relatedPlaylists": {
    "likes": "",
    "uploads": "UUL6JY2DXJNDOIqCP1CRADng"
  }
}
```
`contentDetails.relatedPlaylists.uploads` が次のリソース（playlistItems）に必要なplaylistIdとなります。

**（１１）**
続いて、リソース、メソッドは以下を選択します。
リソース：`playlistItems`
メソッド：`list`
同様に赤色のコードアイコン`</>`をクリックしてAPI Explorerモーダルを開き、`playlistId`をパラメーターに指定して、Executeします。成功すると`items`に各動画のチャンネルID、タイトル、サムネイル（サイズ別）など必要なデータが揃ったオブジェクトが配列で格納されます。

![スクリーンショット 2025-06-08 12.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173182/fa7e5039-4795-49be-bc8c-b793499f892d.png)

API Explorerの右側にCurlコマンド、各言語での実装サンプルも出してくれてます。
それには冒頭で取得したAPIキーが必要になります。

`channels`を叩いて、playlist IDを取得し、`playlistItems`を叩いて、アップロード動画一覧が取得できるのですが、2つのチャンネルでテストしてみた結果、どうやら`playlist ID`はチャンネルIDの２文字目を`C`から`U`に変えただけぽかったです。
この決まりであれば、`playlistItems`だけリクエストすればいいのかなと思いましたが、確証ははないので、本記事のように2つのリソースにリクエストするやり方が確実だと思います。

某チャンネルID
`UCL6JY2DXJNDOIqCP1CRADng`
playlist ID
`UUL6JY2DXJNDOIqCP1CRADng`

某チャンネルID
`UCBRZGokm2-SNYfvFWy3hfYg`
playlist ID
`UUBRZGokm2-SNYfvFWy3hfYg`