- 更新日: 2020年07月10日
- 公開日: 2020年01月19日
[YouTube Analytics API&Python]YouTubeの統計データを自由に操ろう
先日ご紹介させていただいた 「YouTubeレポートBot」。 こちらで使用した "YouTube Analytics API" の使い方についてご紹介させて頂きます。
YouTubeのデータ分析等を考えておられる方にとって参考になると思いますよ。
- YouTube Analytics API&PythonでYouTubeの統計データを自由に操ろう
- YouTube Analytics APIを使うメリット
- YouTube Analytics APIとYouTube Data APIの違い
- YouTube Analytics APIとYouTube Reporting APIの違い
- YouTube Analytics APIとは
- YouTube Analytics APIを使う方法
- YouTube Analytics APIのサンプルプログラム
- YouTube Analytics APIを実行する様子の動画
- YouTube Analytics APIの利用制限について
- まとめ
YouTube Analytics API&PythonでYouTubeの統計データを自由に操ろう
YouTube Analytics APIを使うメリット
自分が管理している動画、チャンネルの統計データを公開できる
動画やチャンネルの統計データのチェックが自動化できる
頑張ればデータ分析&ラーニングさせて、予測値を得られる
一般的に YouTube で公開した動画の "視聴数" や "お気に入り登録数" などは YouTube Studio から確認すると思います。
YouTube Studioは、データやグラフもあって動画の傾向を簡単に把握できるのですが、その画面、自分しか見れないですよね。特に "自分だけ" 統計データを見る状況に不具合はないかもしれませんが、データをオープンにできたらどうでしょうか?
例えば今はお気に入り数が 50 でも、その 50 が 1ヶ月で生成されたもので、そして今も上昇できていることを示せたら、より信用してもらえそうではありませんか?
また成功されている YouTuber の中には、 "スポンサー" が付いているケースも。 動画の中に "広告" を差し込む方法、これはまるでブログのバナー広告状態。こうしたスポンサー、 YouTuber にとっては非常に魅力的な資金源ですが、私のようなジリ貧 YouTuber にとってはスポンサー獲得は難しい状態。 しかし、自分の動画の統計データを公開できたら、信用増でスポンサーの申し込みにも期待できるでしょう。
従来こうした個人のデータ公開は、管理画面のスナップショットを撮って、ブログやツイッターで情報公開していると思います。 しかし、毎度毎度スナップショットを撮ってデータ共有するのって、面倒くさいですし、時間がもったいないですよね。
一方で YouTube Analytics API を使うと、自分の動画やチャンネルの統計データを "データ" として管理できますので、メールで誰かに統計データを自動送信したり、毎月の統計レポートを自動化させたりと従来人間が行っていた "確認" "報告" という手間を大幅に削減してくれます。
また現在 YouTuber にスポンサーしている、もしくはスポンサーを検討している方は、 YouTuber と Analytics API で統計データを共有することで "安心" と "コストメリット" を感じられるでしょう。
しかもこの YouTube Analytics API は無料で利用可能です。
YouTube Analytics APIとYouTube Data APIの違い
YouTube Analytics API を使おうと思って Google で検索すると、 "YouTube Data API" と混同しやすいと思います。
どちらも YouTube 上のデータをプログラムから収集できるサービスですが、根本的な違いは以下の通り。
- YouTube Analytics API は自分のチャンネルや動画の統計データを取得できる
- YouTube Data API は、公開されているチャンネルや動画の累計データを取得できる
つまり Analytics API の方は分析用で、 Data API の方は検索や動画の取り扱いに関するもの。
また Analytics API の方は、 YouTubeからデータを参照する際に、今アクセスしている人が "自分" であることを証明するために "トークン" の認証作業が必要。 Data API については、こうした厳しいアクセス制限は設けられていません。
YouTube に対するニーズはいろいろと思いますが、 like の動向や お気に入り登録の動向、 国別のアクセス状況の確認などを行おうと思うと Analytics API を使う必要がありますね。
YouTube Analytics APIとYouTube Reporting APIの違い
YouTube Analytics API の公式ページにアクセスすると、 YouTube Analytics API と YouTube Reporting API が登場。
これまで登場した YouTube API の種類をまとめると、
- YouTube Data API
- YouTube Analytics API
- YouTube Reporting API
はじめて YouTube API を使う人にとって、この 3つの言葉、似ていて、非常にややこしいですよね。
まず Data API については前章でご紹介したとおり、統計に関するデータは取得できません。
Analytics API と Reporting API ですが、この違いは以下の通り。
- Analytics API は、データを取得できる
- Reporting API は、 CSVファイルを取得できる
つまり定期的にデータを残したい場合は Reporting API で、 データを使って何か処理を行いたい場合は Analytics API といったところでしょう。
はじめのうちは、どの API を使うべきか悩むところですが、一度今回のように
・ Data API
・ Analytics API
・ Reporting API
を整理して考えると、何を使うべきか明確になりそうですね。
YouTube Analytics APIとは
さて前置きが長くなっていますが、 「YouTube Analytics API でできること」について確認しておきましょう。
YouTube Analytics API の公式ドキュメントを見ると、文字ばかりで内容を理解するのに "パワー" が入りますが、 大まかな理解としては上図が参考になるでしょう。
まず YouTube Analytics API で取得できるデータ範囲としては、自分が公開している動画の範囲(上図黒枠部分)。他人の統計データを参照することはできません。
次に YouTube Analytics API では、 Demensions と Metrics を指定して、欲しいデータを取得します(上図赤点線部分)。 Demensions を基準に使用できる Metrics は決まっていて、まず Demensions として設定できる項目を確認すると以下の 9種類。
・ ageGroup
・ channel
・ country
・ day
・ gender
・ month
・ sharingService
・ uploaderType
・ video
そして Demensions に対応する Metrics としては以下の 13種類。
・ annotationClickThroughRate
・ annotationCloseRate
・ averageViewDuration
・ comments
・ dislikes
・ estimatedMinutesWatched
・ estimatedRevenue
・ likes
・ shares
・ subscribersGained
・ subscribersLost
・ viewerPercentage
・ views
実際に YouTube Analytics API を動かして、 各 Demensions や Metrics の様子を確認してみましょう。
尚、 YouTube Analytics API の利用には Google のアカウント認証プロセスが必要となります。
YouTube Analytics APIを使う方法
YouTube Analytics API は、ブラウザでテストする方法と、実際にプログラムを組んで実行する方法の 2種類。まずは手軽に試せる "ブラウザ" から Analytics API を実行してみたいと思います。
Demensions: ageGroupの使用方法
Demensions: ageGroup のサンプルページ
Demensions: ageGroup では、自分の動画を試聴しているユーザーの年齢を知ることができます。上図のように Demensions と Date、 metrics を入力し、 「EXECUTE」 ボタンを押すと視聴者の年齢別データを取得可能。
Analytics API の実行結果は、 JSON形式で返ってきます。私の場合、 25歳から 34歳の方に見ていただいていることがわかりますね。
Demensions: channelの使用方法
Demensions: channel のサンプルページ
Demensions: channelからは、 自分のチャンネルに関するデータを取得可能。 閲覧数や閲覧時間、 likeの数、 お気に入り登録数、 お気に入り登録削除数 などを期間毎にデータ収集。通常 Google 1アカウントに対して 1チャンネル と思いますので、 Demensions: channel から得られるデータは限定的かもしれません。
Demensions: countryの使用方法
Demensions: country のサンプルページ
Demensions: country を実行すると、自分の動画がどの国から見られているか確認可能。概ね日本からが多いと思いますが、その次に多い国はどこでしょうか?
Demensions: genderの使用方法
Demensions: gender のサンプルページ
コンテンツ制作によっては、視聴者の "性別" って大事かもしれませんよね。 Demensions: gender を実行すると、自分の動画が "男性向き" か "女性向き" かデータ分析できますね。
Demensions: videoの使用方法
Demensions: video のサンプルページ
恐らくこの Demensions: video が一番よく使うと思います。自分の公開している動画に紐づくデータを収集し、 ソート(sort)機能を使ってランキング形式でデータを取得できます。 上図では、 2019年の「お気に入り登録された動画Top 10」 を表示。このデータを元に計算したり、データ分析したりいろいろ応用できそうです。
さてここまで 5つの Demensions を試して、 "Demensions" と "metrics" ちょっと慣れてきましたね。実際に 「YouTubeレポートBot」 のようなプログラム内で Analytics API を使おうと思うと、ブラウザ上ではなくコンピューター上でプログラムを実行する必要が。 次のセクションでは、 プログラムとして YouTube Analytics API を実行する方法をご紹介させて頂きますね。
YouTube Analytics APIのサンプルプログラム
今回はこちらの公式ドキュメントの流れに沿って、 YouTube Analytics API を Python で動かしてみたいと思います。
【YouTube Analytics APIをPythonで実行する手順】
- APIを利用するための準備(トークンの取得)
- PythonでAPIを利用するための準備(pip install)
- プログラム
- プログラムを実行し、 Gooleのアカウント認証を行う
- YouTube Analytics API のデータ取得
まず 「1. APIを利用するための準備(トークンの取得)
」 については、文字よりも動画の方が流れを理解しやすいと思います。以下の動画を参考に YouTube Analytics API 用のトークンファイルをダウンロードしてみて下さい。
24秒から 2分 48秒までが YouTube Analytics API用のトークンを取得する様子
YouTube Analytics APIのトークン・ファイルをダウンロードするための手順(テキスト)
- Google APIコンソールで、プロジェクトを作成または選択。
- プロジェクトの "YouTube Analytics API" を有効に。
- [資格情報(OAuth consent)]ページの上部で、[OAuth同意画面]タブを選択。 電子メールアドレスを選択し、まだ設定されていない場合は製品名を入力し、[保存]ボタンをクリック。
- [資格情報(OAuth consent)]ページで、[資格情報の作成(Create credentials)]ボタンをクリックし、[OauthクライアントID(Oauth client ID)]を選択。
- アプリケーションの種類として[その他]を選択し、「YouTube Analytics APIクイックスタート(YouTube Analytics API Quickstart)」という名前を入力して、[作成(CREATE)]ボタンをクリックします。
- [OK]をクリックして、結果のダイアログを終了。
- クライアントID(client ID)の右側にあるfile_download(JSONのダウンロード)ボタンをクリック。
- ダウンロードしたファイルを作業ディレクトリに移動。完了!
次に 「2. PythonでAPIを利用するための準備(pip install)
」 ですが、これを実行する前に今回のプログラムをローカル環境で行うのか、オンライン上で行うのか決めておく必要があります。難易度的にオンラインの方が易しいので、このセクションではオンラインの 「Google Colab(無料)」 で実行。
公式ドキュメントに書かれている以下の 4つのライブラリをインストールします。
!pip install --upgrade google-api-python-client
!pip install --upgrade google-auth google-auth-oauthlib google-auth-httplib2
一度上記コードを実行すると、 「RESTART RUNTIME」 というボタンが登場すると思います(下図参照)。
「RESTART RUNTIME」ボタンを押して、ランタイムを再起動、そしてもう一度 !pip install ・・・・
を実行してみましょう。 pip install
が完了すると思います。
Google Colab で pip install する場合、 pip の前に ! マークを付ける必要があります。
次は 「3. プログラム
」 ということで、プログラム・ファイルの準備。とりあえず 公式ドキュメント に書かれているコード(yt_analytics_v2.py)をコピペしてみます。
コードを貼り付けて、上から確認していくと分かるのですが、 14行目の CLIENT_SECRETS_FILE
の項目を書き換える必要があります。
YouTube Analytics API のトークン・ファイルを Google Colab にアップロードします。そして 14行目の CLIENT_SECRETS_FILE = '〇〇'
の部分を トークンファイル名に書き換え。 プログラムを実行してみます。
すると上記のようなエラーが。 Google のサンプルにも "ヒッカケ" があるようですね。 38行目の文末に , を足しましょう。そして再びプログラムを実行すると下記のように URL が登場。
リンクを開くと Google アカウントの認証プロセスおよび YouTube Analytics へのアクセス許可の画面が登場。一通り 「許可」 すると、下図のようなコードが紹介されますので、 Google Coalb の方に貼り付けます。
すると上図のような JSON 形式の結果が。この JSONデータ自体は、 25行目の print(response)
によって出力されている内容で、 keys()
などを使って JSON データを分解すると、データ内容を把握しやすいと思います。
実際に keys()
を使ってデータを解析し、 1つのデータをピックアップした様子が下記の画像。
上図のコード
# 公開動画の日毎累計データを取得するコード
# dimensions='day'
# -*- coding: utf-8 -*-
import os
import google.oauth2.credentials
import google_auth_oauthlib.flow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
SCOPES = ['https://www.googleapis.com/auth/yt-analytics.readonly']
API_SERVICE_NAME = 'youtubeAnalytics'
API_VERSION = 'v2'
CLIENT_SECRETS_FILE = 'client_secret_382784964069-0u3vvubopdb8npbqegfair2fovcncnd7.apps.googleusercontent.com.json'
def get_service():
flow = InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_console()
return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
def execute_api_request(client_library_function, **kwargs):
response = client_library_function(
**kwargs
).execute()
print("--- response ---")
print(response)
print("\n--- type(response) ---")
print(type(response))
print("\n--- response.keys() ---")
print(response.keys())
rows = response[u'rows']
header = response[u'columnHeaders']
print("\n--- rows ---")
print(rows)
print(len(rows))
print("\n--- header ---")
print(header)
data1 = rows[0][0]
print("\n--- 1日目 ---")
print("1日目の日付: " + data1 + ", 視聴時間: " + str(rows[0][1]) + ", View: " + str(rows[0][2]) + ", likes: " + str(rows[0][3]) + ", お気に入り登録数: " + str(rows[0][4]))
if __name__ == '__main__':
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
youtubeAnalytics = get_service()
execute_api_request(
youtubeAnalytics.reports().query,
ids='channel==MINE',
startDate='2019-01-01',
endDate='2019-12-31',
metrics='estimatedMinutesWatched,views,likes,subscribersGained',
dimensions='day',
sort='day'
)
Google Analytics 公式ドキュメントのコード(yt_analytics_v2.py) では、 一定期間の日毎の累計視聴時間やお気に入り登録数を表示。
一定期間の日毎データは、上図の rows
という変数部分で確認でき、 print(len(rows))
` を実行すると 365こ の要素が格納されていることが確認できると思います。
そして rows
は配列形式となるため、 rows[0][0]
とすると 1日目の日付(dimension)を取得でき、 rows[0][1]
とすると 1日目の視聴時間(metrics 1つ目の estimatedMinutesWatched)、 rows[0][2]
とすると 2日目の View(metrics 2つめの views) が確認できるというわけ。
今回は rows[0][0]
などで個別データを取得していますが、一覧データを得たい場合はループ処理してあげれば OK ですね。
次は Demensions を day
から video
に変更し、 ビデオ毎の視聴時間や View を確認してみました。
上図のコード
# 自分が公開してる動画のビデオ毎のデータを収集するコード
def execute_api_request(client_library_function, **kwargs):
response = client_library_function(
**kwargs
).execute()
print("--- response ---")
print(response)
print("\n--- type(response) ---")
print(type(response))
print("\n--- response.keys() ---")
print(response.keys())
rows = response[u'rows']
header = response[u'columnHeaders']
print("\n--- rows ---")
print(rows)
print("\n--- header ---")
print(header)
data1 = rows[0][0]
print("\n--- data1 ---")
print("1つめのvideo: " + data1 + ", 視聴時間: " + str(rows[0][1]) + ", View: " + str(rows[0][2]) + ", likes: " + str(rows[0][3]) + ", お気に入り登録数: " + str(rows[0][4]) + ", 失ったお気に入り登録数: " + str(rows[0][5]) )
if __name__ == '__main__':
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
youtubeAnalytics = get_service()
execute_api_request(
youtubeAnalytics.reports().query,
ids='channel==MINE',
maxResults = '5',
startDate='2019-01-01',
endDate='2019-12-31',
metrics='estimatedMinutesWatched,views,likes,subscribersGained,subscribersLost',
dimensions='video',
sort='-estimatedMinutesWatched'
)
プログラムの要領としては先ほどと同じですが、実際にプログラムを編集していくと、 Demensions と metrics の組み合わせ方で困るかもしれません。例としては、 YouTube Analytics API の Sample API Requests ページ や metricsページ が参考になります。
ちなみに Google Colab では使用した変数を、後のセルでも使えるという利点がありますが、今回の出力変数は ❌
サンプルプログラムのあとのセルで response
としてもエラーがでます。
これでは出力結果を制御しようとプログラムを組み直すたびに、 Google の認証プロセスを踏む必要が。このストレスは global
を利用することで解決。上図のように global response
と加えるだけで、下図のように response
の値を下のセルでも扱えるようになります。
global response して、 サンプロコード以下のセルで response した結果。
そして今回はプログラムを実行したら、 YouTube Analytics API から一度だけデータを取得してプログラムが終了ですが、継続的に API データが欲しい時ありますよね。
そうしたケースでは、一旦 Google の認証プロセスを得た後にループ処理してあげれば OK。
上図のコード
# 定期的に YouTube Analytics データを取得
# 変数の外部利用 global
import time
def execute_api_request(client_library_function, **kwargs):
global response
response = client_library_function(
**kwargs
).execute()
if __name__ == '__main__':
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
youtubeAnalytics = get_service()
while True:
try:
execute_api_request(
youtubeAnalytics.reports().query,
ids='channel==MINE',
maxResults = '5',
startDate='2020-01-01',
endDate='2020-01-31',
metrics='estimatedMinutesWatched,views,likes,subscribersGained,subscribersLost',
dimensions='video',
sort='-estimatedMinutesWatched'
)
print(response)
print("YoTube Analytics APIデータ取得OK!")
time.sleep(120)
except:
print("APIデータ取得エラー")
サンプルコード: yt_analytics_v2.pyでは Google の認証および API リクエストの許可を 18行目の def get_service()
で定め、 後半の youtubeAnalytics = get_service()
で実行。
そして認証を実行した後のコード execute_api_request()
の部分で YouTube Analytics API からデータを取得。つまり youtubeAnalytics = get_service()
の後に継続処理したい内容を記述すれば OK。
上図では、 2分おきにデータを取得するプログラムを作成。 17行目から 35行目が Google 認証後に繰り返し行われるようになっています。ここの部分を応用すると 「YouTubeレポートBot」 のように定期的にメールを送る Bot が作れたり、 CSV にデータを書き出すと報告書を自動で作れたり、データ分析すると最適な動画時間やタイトルなど予測デキるかもしれません(人工知能)。
尚、今回 YouTube Analytics API を使ってきたわけですが、取得できるデータは直近 2日前と YouTube Studio で確認できる統計データと同じ範囲になります。
また YouTube Analytics API で取得する Video データは、 video id
。 視覚的にわかりやすくしようと思うと video id
を title
に変換する必要があります。 id
から title
への変換は、 YouTube Data API によって変換可能。 YouTubeレポートBot の 64 - 73行目あたりが参考になると思います。
YouTube Analytics APIを実行する様子の動画
本稿でご紹介した内容を実行する様子の動画です。本テキストと合わせてご参照ください。
YouTube Analytics APIの利用制限について
YouTube Analytics のデータにアクセスして、取得できるデータ量には制限があります。
API のデータ量は "Quotas" と言われる単位でデータ量が管理されており、 https://console.developers.google.com/iam-admin/quotas で確認可能。
自分のプロジェクトで利用している API 一覧を確認すると、各 API で利用できる Quotas の量は違ってきます。
無料利用枠では比較的厳しい制限がありますが、有料モードにすると柔軟に API 使用量を増やすことが可能。 API を使ってアプリを開発する時に "有料モード" を検討する必要がありますね。
\AIエンジニアに必要なスキルが身に付く/
まとめ
元々は 「自分のお気に入り登録数ってどの動画から発生したの?」 から始まった YouTube Analytics API。
最初は、 Data API を使うのか、 Analytics API 使うのかも分からない所からスタートし、公式ドキュメントを読み、サンプルコードを何度も実行。
このプロセス、完全に "文系力" が必要です。
きちんとドキュメントを読まないと、扱えるパラメーターや取得できるデータ範囲を理解できません。
従来プログラミングは "理系" 的なイメージがありますが、 "文系力" もかなり必要であることが今回のテストで確認できました。
「数学は苦手だけど、 ロボット や IT には興味ある」 「計算は苦手だけど、これからの AI社会に適合していきたい」 、しかし一方で 「だからといって特に何もしていない」 「 何もしていない自分に不安を感じる」 「将来が不安...」 、という方も多いのではないでしょうか?
明確な方法や答えは個人個人、その時々で違ってくると思いますが、まずはプログラムを動かしてみて、自分がどう感じるか、ということも重要ではないでしょうか?
「えっ、でも自分のパソコンで Python 動くかどうか分からない」 「前に一度挑戦したがダメだった...」 でも IT や プログラミングに将来の可能性を感じるなら、 "プログラミング・スクール" 検討してみませんか?
「プログラミング・スクール = 高い、 続かない」 というイメージあるかもしれませんが、今もそうでしょうか? まずは実際に確かめてみて、判断されてはいかがでしょう? 試した場合と試さなかった場合、どちらが 3年後の自分にいい影響を与えるでしょうか?
CodeCamp では無料体験や無料相談を随時行っていますので、 皆様の将来の可能性に微力ながら寄与できるのではないかと思っています。 無料体験および無料相談については、 公式ページ より確認してみて下さい。
昨今のプログラミング・ニーズの高まりを受けて、無料体験枠が埋まっている日もあります。予め、ご了承ください。
- この記事を書いた人
- オシママサラ