【データサイエンス】YouTubeのAPIを使ってYouTube内のデータを収集してみよう


【データサイエンス】YouTubeのAPIを使ってYouTube内のデータを収集してみよう

月間 278億の訪問件数を誇る世界 2位*の Webサービス、 YouTube。

単なる動画視聴やアップロードに留まらず、今やそのプラットフォームを利用して "マーケティング" や "データ分析" を行いたいと思うことも少なくないでしょう。

そこで今回は YouTube API を Python で使って、一定期間の動画アップ数を抽出し、 CSVファイルに自動保存したいと思います。

Web や YouTube 関係者以外に営業、開発、企画、経営などされている方にとっても参考になると思いますよ。

目次
  1. 【データサイエンス】YouTubeのAPIを使ってYouTube内のデータを収集してみよう
  2. YouTube API とは
  3. YouTube Data API v3
  4. 「YouTube Data API v3」の「Search」を使ってみる
  5. YouTube APIキーを取得する方法
  6. YouTube APIをPythonにセットして使う
  7. YouTubeの統計データを自動でCSVに保存
  8. YouTube Data APIを使う様子の動画
  9. まとめ

【データサイエンス】YouTubeのAPIを使ってYouTube内のデータを収集してみよう

YouTube API とは

image

img: Google APIs Explorer

YouTube API は、 Google が提供している API の一つで、 API 172 ある中 YouTube API は 4種類公開されています。

  • YouTube Analytics API
  • YouTube Data API v3
  • YouTube Live API v3
  • YouTube Reporting API

今回は 「YouTube Data API v3」 という検索や動画投稿に関する API を使ってみたいと思います。

【APIとは・・・】

API は、 Application Programming Interface の略で、プログラミング初心者にとっては ??? ですよね。
この日常生活とはかけ離れた専門用語、文章で理解するより、実際に使ってみて、利便性を体験する方が分かりやすいと思います。

あえて簡単に説明すると、 API を使うと APIプロバイダーのサーバーにある情報をタイムリーに取得できる、ということ。
例えば、 YouTubeの視聴回数や お気に入り登録状況、 YouTubeのライブチャットデータなどを "データ" として入手することができます。
"データ" として 視聴回数やチャットデータを入手することで、それを元に統計をとったり、 自分の Webサイトに表示することができるように。
このように API を使うと、画面上に表示されている数値や文字を "データ" として入手でき、アプリケーションの開発に利用することが可能。
このある種特権的なデータは、無料で利用できます。
Google アカウントさえあれば、だれでも "特権" データ API にアクセスできますので、自分が欲しい情報を手軽に入手できるメリットがありますね。

YouTube Data API v3

image

https://developers.google.com/youtube/v3

「YouTube Data API v3」 を使うと Webサイト や アプリ から YouTube に動画をアップロードできるようになったり、 YouTube 上の動画データを詳しく検索できるようになります。主だった機能をいくつかご紹介。

  • 動画のアップロード(Videos: insert
  • 動画の視聴回数のデータを取得(viewCount
  • 特定期間の特定キーワードの動画公開数を検出(Search: list
  • キャプチャ画像の取得(Captions

今回は YouTube 内のデータ分析をすることが目的なので YouTube Data API v3 の "Search" という機能を使ってみたいと思います。

「YouTube Data API v3」の「Search」を使ってみる

image

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

YouTube API は、 「本格的に使うパターン」 と 「とりあえず使うパターン」 の 2種類あります。まずは「とりあえず使う」方からテスト。

「とりあえずの利用」は、ブラウザ上から API をテストすることが可能ですが、すべての機能をカバーしているとは限りませんので、ご注意下さい。

私の場合、 videoCategoryId を入力しても 400 エラーでデータを取得できませんでした。 しかし、自分の API キーを使ったら、 videoCategoryId も利用でき、思うような結果を取得できました。

試しに YouTube内のデータを検索できる API https://developers.google.com/youtube/v3/docs/search/list にアクセスしてみましょう。

image

そして上図のように part 部分には snippet、 channelID は自分の YouTube ID を入力。

【snippetについて】
【snippetとは】 現在作業している YouTube API List のページを見ていると、 part 部分は snippet を入力してくださいと書かれています(上図参照)。 snippet、気になりますよね。 snippet はプログラミング言語の一種で、この場合では API アクセスによってサーバーから返ってくるデータを適切に処理するために必要な項目。 Google 検索の検索結果表示でも snippet が使われていますね(下図参照)。

【channelIDについて】
channelIDは、 YouTubeアカウントに紐付いている ID。上図のように自分のアカウントページを開くと channelID を確認することができます。

channelID 以外にも詳細検索の項目がたくさんありますが、とりあえず一番下までスクロールして EXECUTE。すると Google のアカウント確認があって、そのあと以下のようなデータが出力されます。

image

これは私の YouTubeチャンネルに関する情報で、 JSON形式でデータが返ってきていることが確認できます。少々見にくいので、内容を確認したい場合は、この JSON コードをテキストエディタなどにコピペすると使いやすいでしょう。

書かれている内容は、

  • kind/ APIの種類
  • etag/ タグ情報
  • nextPageToken/ 次のページに関する情報
  • regionCode/ エリアコード
  • pageInfo/ APIリクエスト結果の概要
  • items/ 検索結果の詳細リスト

このように YouTube API は、ブラウザ上で簡単に内容を確認・テストすることができて便利。テスト的に YouTube 内を検索する場合は「とりあえず」で OKですが、実際に API データを使って統計やアプリ開発を行いたい場合は、いくつかのステップを踏む必要があります。

YouTube APIキーを取得する方法

image

先ほどブラウザでとりあえず YouTube API を使った際は、 API キーなどの設定は必要ありませんでした。しかし、 YouTube APIで取得できるデータを使って、何かしようと思うと専用の API キーが必要になってきます。

専用の APIキーは、 Googleアカウントがあれば無料で利用可能。

まずは Googleアカウントの開発画面 https://console.developers.google.com にアクセスして、 「プロジェクト」 を作ります。そして「プロジェクト」作成後に APIキー を取得できる、という流れです。

プロジェクトは 30個*まで作成でき、 APIの作成上限は確認できませんでした。ただし、 API の利用制限があって、「Quotaクォータ」 使用量として管理されます。 クォータ使用量はパケット量のようなもので、 API 通信を行う際に必要となる通信量。 制限としては、 1プロジェクト・ 1日 10,000ユニットまで利用可能。この 10,000ユニットという数字、利用用途にもよると思いますが、今回のような検索系の場合、一瞬で 10,000に達します。複数のプロジェクトおよび YouTube API を作成して、大量の API 通信をこなすか、 YouTubeチームに Quotaのユニット数を増やしてもらうように申請する必要があります。今回は前者の "複数のプロジェクト作成" で Quota制限をクリアしながら YouTube API を楽しみました。

さて YouTube API ですが、まずは https://console.developers.google.com にアクセス。

image

そして、 「CREATE ボタン」を押して、プロジェクトを作成します。

image

プロジェクト名は任意で、 Location も今回はなしで設定。 API の Quota がリミットに達し、このプロジェクトを削除する可能性が高いためです。プロジェクトの作成には 1分ほど時間がかかると思います。

image

プロジェクトの作成が完了したら、画面右上のベルマークをクリック。すると新しくできたプロジェクトが表示されています。クリックして API の設定を行っていきましょう。

image

プロジェクト画面を開くといろいろ書かれていますが、今回はとりあえず API。画面中央付近の 「Go to APIs overview」 をクリック。

image

ENABLE APIS AND SERVICES をクリック。

image

検索欄に youtube と入力し、 YouTube Data API v3 を選択。

image

ENABLE をクリック。

image

APIの管理画面が登場しましたが、まだ APIキーはできていません。CREATE CREDENTIALS をクリック。

image

上図のように選択項目をチェックして、一番下のボタンをクリック。尚、こちらの選択項目は必要に応じて変更して下さい。

image

やりました! YouTube Data APIキーを入手出来ました。 が表示されていますが、これは APIキーの認証作業を行っていないため。安全に API を使うための設定項目になりますが、今回は使い捨て的な API キーになりますので、認証作業は割愛します。

image

ちなみに作成した APIキーの Quota使用量は、画面上部の検索バーに 「Quota」 と入力すれば、該当項目が表示されますので 「All Quotas」 をクリック。

image

するとこのプロジェクトの API 使用量や残りの量を確認することができますね。

最初は慣れないので APIキーの取得も戸惑いますが、 3、 4回繰り返すと、クリックの連続で慣れてきます。

YouTube APIをPythonにセットして使う

先ほど入手した API キーを使って、 YouTube上のデータを CSV に自動保存してみましょう。 YouTube API の使い方(サンプルコード)は、公式ページにも紹介されていますが、 Python2....* **。 Python3 に少し書き換えて使います。

尚今回の Pythonは、 Google Colab を使ってオンライン上で実行。

  • プレーンのGoogle Colab
  • コードをセットした完成済みの Google Colabシート
  • 【今回のコードを今見る】
    
    """
     -*- coding: utf-8 -*-
    post★YouTubeAPI_Demo.ipynb
    
    Automatically generated by Colaboratory.
    
    Original file is located at
        https://colab.research.google.com/drive/1MRVGRLnGqQTiruWLGj-MWHwLDKR6nX-e
    
    """ Get API Key """
    
    https://console.developers.google.com
    """
    
    """下記のAPIキーを自分のAPIキーに置き換えてください"""
    api_key = "AIzaSyAiKmRzBXF8EkEYBiPaLZrooSroY7i24z8"
    
    from apiclient.discovery import build
    
    my_youtube = build("youtube","v3",developerKey=api_key)
    
    type(my_youtube)
    
    my_youtube
    
    """カテゴリーID  [リスト](https://gist.github.com/dgp/1b24bf2961521bd75d6c)
    
    """ キーワード検索 Kotlin の場合 """
    
    request_kotlin = my_youtube.search().list(
        q="kotlin",
        part="snippet",
        type="video",
        videoCategoryId="27",
        publishedBefore="2019-11-01T00:00:00Z",
        publishedAfter="2016-01-01T00:00:00Z")
    
    response_kotlin = request_kotlin.execute()
    
    response_kotlin
    
    type(response_kotlin)
    
    response_kotlin.keys()
    
    response_kotlin["pageInfo"]
    
    response_kotlin["pageInfo"]["totalResults"]
    
    kotlin_youtube = response_kotlin["pageInfo"]["totalResults"]
    
    type(kotlin_youtube)
    
    """ 日付をループすればOK """
    
    year = ["2016","2017","2018","2019"]
    month = ["01","02","03","04","05","06","07","08","09","10","11","12"]
    
    """ Kotlin & Dart """
    def my_function():
      request_kotlin = my_youtube.search().list( q="kotlin", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore) 
      response_kotlin = request_kotlin.execute()
      kotlin_youtube = response_kotlin["pageInfo"]["totalResults"]
    
      print("Kotlin: " + str(kotlin_youtube))
    
      with open('YouTubeAPI_Kotlin.csv', 'a') as csvFile:
        writer = csv.writer(csvFile)
        writer.writerow([str(y), str(i), str(kotlin_youtube)])
      csvFile.close()
    
    import csv
    for y in year:
      i = 0
      while i < 12:
        if i == 11:
          i = i + 1
          my_publishedAfter = str(y) + "-12-01T00:00:00Z"
          yy = int(y) + 1
          my_publishedBefore = str(yy) + "-01-01T00:00:00Z"
          my_function()
          break
    
        else:
          """ from "my_publishedAfter" to "my_publishedBefore """"
          after_month = month[i]
          i = i + 1
          before_month = month[i]
          my_publishedAfter = y + "-" + after_month + "-01T00:00:00Z"
          my_publishedBefore = y + "-" + before_month + "-01T00:00:00Z"
          my_function()
    

image

まずは https://console.developers.google.com で取得した YouTube Data APIキーを 変数 api_key にセット。そして必要なライブラリを読み込み、 build() 関数を実行。これで YouTube Data API v3 を使う準備ができました。

次は検索条件の設定。 YouTube Data API v3 の search 機能を使いますので、 モジュール search() を実行。検索条件の各パラメーターは list() 内に納めます。

【上記コードの検索条件】

q="kotlin" / 検索キーワード: kotlin
part="snippet" / part: snippet(定型文) 
type="video" / 検索対象: video
videoCategoryId="27" / カテゴリー:27(Education)
publishedBefore="2019-11-01T00:00:00Z" / 検索対象期間、この日時までを検索
publishedAfter="2016-01-01T00:00:00Z" / 検索対象期間、この日時から検索

◎検索対象: 2016.1.1から 2019.11.1 までの カテゴリー: Education(教養) で kotlin を含む動画

そして APIの実行は execute() で実行。今回はデータ制御のこともありますので、 API実行結果を response_kotlin に代入。

response_kotlin の最下部をみると、検索条件に該当する動画が何本あるか確認できます(totalResults、 109152本)。

そして API実行結果の response_kotlin の中身を keys() で確認。今回は検索条件に該当する動画アップ数を抽出したいので pageInfo を参照。

response_kotlin["pageInfo"] を実行すると pageInfo 内の totalResults を確認。結局は response_kotlin["pageInfo"]["totalResults"] とすることで今回のお目当ての新規動画アップロード数が獲得できます。

次は YouTube API で獲得できたデータを CSV に自動保存していきたいと思います。

YouTubeの統計データを自動でCSVに保存

上記コード

まず CSV に保存する内容を先ほどの "合計値" から "月別" に変更して実行してみたいと思います。月別の新規 YouTube 数は、 時系列を指定する publishedAfterpublishedBefore を毎月の指定になるように変更すればOK。例えば 2016年 1月なら

  • publishedAfter="2016-01-01T00:00:00Z"
  • publishedBefore="2016-02-01T00:00:00Z"

この年を意味する 2016 と月を意味する 01 を順番にループ処理すれば良さそうですね。今回は 2016年 から 2019年までを毎月検索できるように、配列 yearmonth を準備。 Pythonモジュールの datetime() もありますが、 "型" の変更が頻繁に伴うかもしれませんので純粋に配列で処理しました。

そしてループ文の実行を考えると、以下のような不具合が。

  • publishedAfter="2016-12-01T00:00:00Z"
  • publishedBefore="2016-13-01T00:00:00Z"

13月ってないですよね。そのため 12月の処理の時(i==11)だけ、翌年の 1月になるよう特別処理。それが if i == 11: の部分で表現されています。

このループ文に API処理を書いてもいいのですが、コードが長くなるため今回は 関数 my_function() に処理内容をまとめました。

上図コード

API処理内容は、先ほど Kotlin の合計動画数をピックアップしたのと同じで、期間指定部分だけループ処理で指定される日時を my_publishedAftermy_publishedBefore を設定。 指定年月の新規動画数は、 Kotlin_youtube として出力されます。

そしてその Kotlin_youtube を CSV に書き込むため、 with open() で CSV を呼び出し、書き込み実行。

この my_function() は、 ループ処理の前に実行しておく必要がありますので、セルの順番を変えておきましょう。

ループを実行すると 2016年 1月から順番に "Kotlin" の新規動画アップ数が抽出され、それと同時に CSV にデータが書き込まれていきます。 Google Colab 左サイドバーに作成される YouTubeAPI_Kotlin.csv をダウンロードして内容を確認してみて下さい。この CSV を元にグラフを書いたり、他の言語と比較したりするとより良いプレゼン資料になると思います。

そして API を何回か実行した後、 Google開発画面の "Quotas" を改めて確認。すると Quotas が消費されていることが確認できます。

プログラム的には Kotlin も Dart も Java も一度に YouTube API でクロールすることは可能ですが、上記 Quotas の通り、各月のデータ抽出をすると一気に Quotas が消費されます。そのため Quotas リミットになると、APIを実行できませんので、改めて新規プロジェクトを作成し、API キーを作成する必要が出てきます。

ちなみに APIの Quotas が上限に達したら以下の様な 403エラーが表示されます。

HttpError: <HttpError 403 when requesting https://www.googleapis.com/youtube/v3/search?q=kotlin&part=snippet&type=video&videoCategoryId=27&publishedAfter=2019-11-01T00%3A00%3A00Z&publishedBefore=2019-12-01T00%3A00%3A00Z&key=AIzaSyCclBdt4Fx1nHsqimtYVvY3pJ7X8ukzH-o&alt=json returned "The request cannot be completed because you have exceeded your <a href="/youtube/v3/getting-started#quota">quota</a>.">

YouTube Data APIを使う様子の動画

本稿と合わせてご参照下さい。

まとめ

API ってどこか特別感があって取っつきにくい印象がありますが、どうでしょうか? サンプルコードがあると、なんかいけそうな気がしてきませんか?

そして今回収集したデータは、恐らくあなただけのものです。つまり他の人より、より具体的なデータで説得力のあるマーケティング、プレゼンを行うことが可能に。ビジネスマンならこうした情報処理能力、身につけておきたいですよね。

「Python、新聞でもよく見るけど、パソコンでの使い方わからないんだよな...」「特定の動画を集めたいけど、サンプル見ても分からないな...」と悩んでおられる方、もう一人で考えるの止めにしませんか? 悩みすぎたり、時間をかけ過ぎたりすると、モチベーションが下がります。そして段々考えなくなります。もったいないですよね。

CodeCamp では、独学プログラマーを応援すべく 「Pythonデータサイエンスコース」 や 「レッスン受け放題プラン」 を運営中。 受講料はかかりますが、将来への自己投資とすると、高いでしょうか? CodeCamp ではレッスン内容を事前にデモできる "無料体験" を開催中。チョット真剣にプログラミング、 Python 考えておられる方、一度 無料体験 考えてみませんか? 申し込みや詳しい内容については 公式ページ をご確認下さい。


関連記事

オシママサラ
この記事を書いた人
オシママサラ
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp