YouTubeのAPIを使用し、YouTubeスクレイピング的なことをやりたいと想います。

また、この記事は長くなりそうなので、何回かにわけて記載していってます。

今回はAPIを叩き、YouTubeのチャンネルIDから最新動画データを取得したいと思います。

前回

前回は準備編として記載しました。

準備としてはYouTubeAPIを使用できるようし、APIキーを取得したところで終わりました。今回はその続きです。

YouTubeAPIを使用しデータを取得してみる

では、さっそくやっていきます。

まず、スプレッドシートを作成し、「ツール」⇨「スクリプトエディタ」を選択します。

プロジェクトの名前を「YoutubeScraping」にしておきます。これは前回でYouTubeAPIを使用できるようにした際に、プロジェクト名を指定したと思うので、そのプロジェクト名に合わせてます。

また最初にコード.gsも「YoutubeScraping.gs」に変更。

メソッド名もmyFunctionから「DataCollection」に変更しました。この辺は適当な名前で。(別に後ででもいい。)

はい、で、ここからAPIを使っていこうかと思いますが、どうやって使うかは仕様をみないと使い方がわからないので

今回利用するSearch: listをみます。

仕様をみるとGETのHTTPリクエストが記載しているので、そのまま使用します。また、URLの後ろにパラメータをくっつけていく感じになります。

パラメータに関しては、欲しい情報やフィルタを指定するため、自分の好きなものを選びます。

今回私は以下のパラメータを使用したいと思います。

  • part
  • channelId
  • order
  • maxResults

使用するパラメータを簡単に説明するとこんな感じです。

  • part    →Idやsnippetを指定します。レスポンスに動画のタイトルや説明等が含まれて結果が返ってきます。
  • channelId  →YouTubeのチャンネルIDを指定する事ができます。
  • order    →並び替えができます。日付の降順など。
  • maxResults →返ってくる検索結果の最大値を指定します。未指定だと5みたいです。そんなにいらないので3くらいにしときます。

んで、上記のURLとパラメータをくっつけると以下のようになると思います。パラメータは&で複数くっつけてます。

https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=3&order=date&key=XXXXXXXXXXXX&channelId=YYYYYYYYYYYYYYY

key=XXXXXXXXXXXX に関してはCredentials pageで作成したAPIキーを指定します。

channelId=YYYYYYYYYYYYYYY に関してはYouTubeユーザーのチャンネルIDです。

チャンネルIDはユーザーのチャンネルページへ飛んでURLを確認します。

https://www.youtube.com/channel/[チャンネルID]

Search API実行してみる

上記完成したAPIをブラウザ上でHTTPリクエストしてみると、JSON構造でたくさん情報が取得できました。

動画タイトルやアーティスト名、動画のURLもわかります。

動画のURLに関しては”videoId”の値になります。

"videoId": "ABCDEFG"

また、videoIdの値だけではURLにはならないので、以下のURL(固定)の後ろにvideoIdをくっつけてあげるとアクセスできるようになります。

https://www.youtube.com/watch?v=

その他情報はSearch: listのプロパティと照らし合わせて見るとなんとなく解ります。

チャンネルIDがない場合

チャンネルIDに関してですが、YouTubeのチャンネルページのURLはこんな感じになってます⇨ https://www.youtube.com/channel/[チャンネルID] 

たまに[チャンネルID]が表示されておらずユーザー名がURLになっている場合があります。こんな感じ⇨ https://www.youtube.com/user/[ユーザー名]

今回のようにデータ取得にはチャンネルIDが必須なので、以下のAPIを使用しユーザー名からチャンネルIDに変換します。

Channels: list

こちらも下記のURLにパラメータをくっつけていきます。

パラメータは以下です。

  • part
  • forUsername

partに関しては色々指定できるみたいですが、余計なのは不要なので「id」だけ指定します。

forUsernameに関してはURLのユーザー名部分を指定します。⇨ https://www.youtube.com/user/[ユーザー名]

んで、できたHTTPリクエストが以下のような感じです。 上のSearchリクエストと同じようにAPI使用するときは必ずKeyをつけて使用します。

https://www.googleapis.com/youtube/v3/channels?part=id&key=XXXXXXXXXXXXXXX&forUsername=ZZZZZZZZZZZ

Channels APIを実行してみる

こちらも上記のURLをブラウザで実行してみます。

Serachと違って情報は少なめです。ですが欲しい情報は取得できました。

”id”の値がチャンネルIDになります。これでユーザー名からチャンネルIDの変換ができました。

 "id": "チャンネルID"

変換後にSerachリクエストを実行すれば動画の情報が取得できます。

最後

今回はAPIを実行してみたというところで終わります。

次回はGASのコードに書いていきたいと思います。

そういえば書くタイミングを逃しましたが、API実行には制限があります。クォーターの使用量ってやつです。(結構重要)

今回のAPIリクエストはそこまで使用量いきませんが、動画をアップロードするAPIはやばそうです。今回のデータ取得APIに関しても余計なデータは取得しない方がよさそうです。

クォーターについては以下を確認してみてください。

https://cloud.google.com/docs/quota?hl=ja