YouTube Data APIで特定のYouTubeチャンネルでアップロードされた動画のみ取得する方法

特定のYouTubeチャンネル(以下、チャンネル)でアップロードされている動画を取得する方法の1つで、YouTube Data APIの「Search: list」を使う方法があります。ちょっと案件で使うことがあったので、今後も使いそうなのでメモ書きしておこうと思いました。

もし似たようなことをされたい場合は、ご参考ください。

前提があります

※この方法は、YouTube Data APIを使えるようにしておくことが前提です。設定方法はこちらの記事「YouTube Data APIを使って動画の情報を取得する方法」をご参考ください。

それでは早速いきましょう~。

YouTubeで特定のチャンネルを指定して動画を取得

やりかたはとてもシンプルです。「Search: list」にも書いてあるんですが、HTTPリクエストにクエリパラメーターを設定してあげればOK、という感じです。

「Search:list」のHTTPリクエスト

https://www.googleapis.com/youtube/v3/search

・・・ちょっと専門的な用語がいくつかありますね。ここであまり深く考えて前に進まないのもあれですので、単純にブラウザのアドレスバーに上のurlを貼り付けてアクセスしましょう。

ブラウザのアドレスバーに貼り付けてアクセス

すると、以下のような表示が出てくると思います。

結果

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required parameter: part",
    "locationType": "parameter",
    "location": "part"
   }
  ],
  "code": 400,
  "message": "Required parameter: part"
 }
}

上のコードの「message」に注目すると「part」パラメーターが必要ですよ、って書いてあります。なので、「part」パラメーターを設定します。

「part」パラメーターを設定してアドレスバーに貼り付けてまたアクセス

https://www.googleapis.com/youtube/v3/search?part=snippet

partに設定できるパラメーターは他にもあります。詳細は「Search: list」を確認してください。

結果

{
 "error": {
  "errors": [
   {
    "domain": "usageLimits",
    "reason": "dailyLimitExceededUnreg",
    "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
    "extendedHelp": "https://code.google.com/apis/console"
   }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
 }
}

細かい説明は省略しますが、このリクエストにはAPIキーが必要なんですね。なので、「key」パラメーターを入れてあげます。値は、APIコンソールで作成したAPIキーを入力します。(※こちらの記事にAPIキーの確認方法も書いてあります)

「key」パラメーターにAPIキーを指定してまたまたアクセス

https://www.googleapis.com/youtube/v3/search?part=snippet&key=APIキー

結果

{
 "kind": "youtube#searchListResponse",
 "etag": "\"xxxxxxx\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 1000000,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"xxxxxxx\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "S9bCLPwzSC0"
   },
・・・省略

ようやくエラーがなくなって、データがたくさん出てきます。ここからが本題ですね。

ここからが本題。特定のチャンネルを指定して動画情報を取得

特定のチャンネルの動画のみ取得するには「チャンネルID」を指定するとできます。「チャンネルID」はこの記事の方法などを使うと知ることができます。

また、別の方法として、例えばAKB48の公式チャンネルのURLに注目しますと「UCxjXU89x6owat9dA8Z-bzdw」がチャンネルIDになっています。こっちのほうが手軽に調べられますかね。

というわけで、AKB48のチャンネルID「UCxjXU89x6owat9dA8Z-bzdw」を使って「channelId」パラメーターを指定します。

「channelId」パラメーターを設定してまたまたまたアクセス

https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UCxjXU89x6owat9dA8Z-bzdw&key=APIキー

結果

・・・省略

"items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"xxxxxxx\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "ZCNiY-j6VsI"
   },
   "snippet": {
    "publishedAt": "2013-07-20T03:15:06.000Z",
    "channelId": "UCxjXU89x6owat9dA8Z-bzdw",
    "title": "恋するフォーチュンクッキー  STAFF Ver. / AKB48[公式]",
    "description": "御礼!!900万再生突破!! 皆さんにお見せできるものができるのだろうかと ドキドキしながら、一生懸命スタッフ一同踊りました。 そんなミュージックビデオを900万回も ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/ZCNiY-j6VsI/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/ZCNiY-j6VsI/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/ZCNiY-j6VsI/hqdefault.jpg"
     }
    },
    "channelTitle": "AKB48",
    "liveBroadcastContent": "none"
   }
  },
  {
   "kind": "youtube#searchResult",
   "etag": "\"xxxxxxx\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "AFkT9fFTWvc"
   },
   "snippet": {
    "publishedAt": "2010-09-08T12:09:21.000Z",
    "channelId": "UCxjXU89x6owat9dA8Z-bzdw",
    "title": "【MV】 遠距離ポスター / AKB48 [公式]",
    "description": "AKB48 15thシングルc/w「遠距離ポスター」 作詞:秋元康 作曲:小川コータ 編曲:野中\"まさ\"雄一 AKB48 15thシングル「桜の栞:のカップリング曲。 【AKB48× 週刊ヤング ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/AFkT9fFTWvc/default.jpg"
     },
     "medium": {

・・・省略

という感じで、AKB48公式チャンネルで公開されている動画情報のみ取得できました。

応用するといろいろできる

例えば検索クエリのパラメーターを入れてあげると「特定のチャンネル内で、さらに特定のキーワードに合致した動画を取得」とか「動画再生数とか評価とかにソートして表示」などもできます。ここは、組み合わせ次第ですね。

以上、特定のYouTubeチャンネルの動画情報のみ取得する方法でした。何かのご参考となりましたら幸いです。

著者:bouya Imamura