【データサイエンス】YouTube DATA API を使ってユーチューバーの情報をゲットしよう


【データサイエンス】YouTube DATA API を使ってユーチューバーの情報をゲットしよう

大手SEOサービス RankRanger によると、 2020年になって YouTube.com が Google.com をトラフィックで抜き、世界で 2番目にアクセスされるページに。

image

https://www.rankranger.com/top-websites

またご承知の通り YouTube は、無料動画配信では圧倒的シェアで、有料の Amazon Prime や NETFLIX とも収益面では引けを取らない状況。

  • YouTube $15 Billion
  • Amazon Prime $14 Billion
  • NETFLIX $20 Billion

さあ今後も伸びると予測される YouTube マーケット、プレイヤーであるユーチューバーさんのデータを Python で扱ってみませんか?

目次
  1. 【データサイエンス】YouTube DATA API を使ってユーチューバーの情報をゲットしよう
  2. ユーチューバーの情報をゲットするメリット
  3. ユーチューバーの検索
  4. ユーチューバーの情報をPythonでゲットする方法
  5. ユーチューバーのビデオ情報をPythonでゲットする方法
  6. まとめ

【データサイエンス】YouTube DATA API を使ってユーチューバーの情報をゲットしよう

ユーチューバーの情報をゲットするメリット

2つのキーワード検索結果のユーチューバーの累計視聴回数を比較した結果の様子

上図のプログラム: Google Colab (要 Google YouTube Data API Key)

メリットをご紹介する前にまず私の失敗談から。私は 2016年ぐらいから YouTube に動画をアップするようになりましたが、当初の目的は動画を管理するため。自分のパソコン上ではどの動画をドコに保存したかわからなくなる一方、 YouTube上に上げておけば検索も可能で、 PC上のデータ消費も避けられ好都合だったから。

そして年月は経ち、動画数も 100 を超えてきたので広告もいいかな、と思いきや 「広告掲載には Subscribe 1000以上、年間視聴時間 4,000 以上」 というハードルが。そしてそのハードルをクリアしようと検討するも、戦略的・戦術的に YouTube を始めていなかったため、 "検索" で自分の動画・チャンネルがヒットしにくい状況に。つまり Web でいうところの SEO が ❌ ということ。

具体的に ❌ なポイントとしては、 「チャンネル名」 と 「戦略的に取り組んでいなかったこと」 が挙げられます。

特にこのチャンネル名、どういうキーワードにすればいいか悩むもの。検討要因としては、

  • どのキーワードがアクセスされやすいか?
  • どのキーワードが競合少ないか?

「どのキーワードがアクセスされやすいか?」 については、 YouTube への流入が Google検索からと YouTube検索から、それから SNSからと多種多様であるため選定は困難。

それでは 「どのキーワードが競合少ないか?」 についてはどうでしょう? これは既存のユーチューバーのデータを確認することで見えてくるところもあると思います。例えば、 「python」 というキーワードでヒットする トップ10 ユーチューバーの視聴回数と 「AI」 というキーワードでヒットする トップ10 ユーチューバーの視聴回数。

予め YouTube 上のマーケットを知った上で参入すると、モチベーションも長続きしそうですよね。またビジネスで YouTube チャンネルを開設する方にとっては、こうしたマーケティング情報が説得材料の一つになるでしょう。

ユーチューバーの検索

image

https://www.youtube.com/results?search_query=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&sp=EgIQAg%253D%253D

ユーチューバーの情報を確認しようと思うと、一般的には上図のように youtube.com にアクセスして、 Filter 機能を使うと思います。

一時的な確認であれば問題ないのですが、マーケティング的にユーチューバーの情報が欲しいと思った時、イチイチユーチューバーの情報をメモしていたのではとても時間が足りませんよね。

また上図の Filter 機能では、チャンネル作成日の期間指定ができませんし、各ユーチューバーの視聴回数を確認しようと思うと、ユーチューバーの about ページまで移動する必要があります。

こうした部分、 YouTube DATA API の Search機能を使うとクリアできますね。

ユーチューバーの情報をPythonでゲットする方法

一定条件下のユーチューバーの情報を詳しく取得しようと思うと、いくつかの YouTube Data API 機能を使う必要があります。

  • 一定条件下のユーチューバーを抽出するためには、 YouTube > Data API > Search: list
  • ユーチューバーの視聴回数や Subscribe数をゲットしようと思うと、 YouTube > Data API > Channel: list
  • ユーチューバーの動画情報をゲットしようと思うと、 再び YouTube > Data API > Search: list

注意点としては、 "Search: list" と "Channel: list" 似ていますが、全く異なる機能(関数)になりますので、間違えないように気をつける必要があります。

そして本 YouTube Data API を使おうと思うと、事前に下記の API Key が必要に。

  • YouTube Data API Key

こちらの API Key、利用数制限はあるものの、無料で直ぐに取得&利用することが可能です。 YouTube Data API Key の取得方法については、下記動画を参考にしてみて下さい。

そして YouTube Data API Key を獲得できたら下記のように、 api_key = "〇〇" の部分にコピペ。

上図のコードを今確認する

api_key = "API Key"
from apiclient.discovery import build
youtube = build("youtube","v3",developerKey=api_key)

request = youtube.search().list(
    part="snippet",
    type="channel",
    regionCode="JP",
    q="プログラミング",
    publishedBefore="2020-03-01T00:00:00Z",  #from  after  to  before
    publishedAfter="2020-01-01T00:00:00Z",
    maxResults=5)

response = request.execute()
response

プログラムを実行すると JSON 形式のデータをゲット。見難いと思いますので JSONデータをオンライン上で見やすくしてくれる Webサービス(JSON Editor Online)を利用。

先ほどの出力結果を上図の様に見やすくすると、 "プログラミング" で検索した結果のユーチューバーの情報を獲得できたことが確認できます。ただし、ココには 視聴回数や Subscribe数(お気に入り登録数) が確認できませんね。

"視聴回数" や "Subscribe数(お気に入り登録数)" を確認しようと思うと、 "Channel: list" 機能を使う必要があります。先ほど実行したのは "Search: list" なので違う機能を使ってデータを取得、という訳ですね。

【最初のプログラム実行で獲得したデータ】
・ 5件のユーチューバーのチャンネルIDやチャンネルのタイトル
・ 累計の該当件数

上図のコードを今確認する

上段のコード
 # 特定のユーチューバーの Channel ID を取得
channelID = response['items'][0]['snippet']['channelId']
print(channelID)

下段のコード
request = youtube.channels().list(
    part="snippet,contentDetails,statistics",
    id=channelID
)
response = request.execute()
response

最初のプログラム実行で 5件のユーチューバー ID を取得しました。その中の最初のユーチューバーさんの "視聴回数" や "Subscribe数" を確認してみたいと思います。

"視聴回数" や "Subscribe数" を確認するには "Channel: list" を使えばいいわけですが、 その際に検索対象の Channel ID が必要に。先ほどの JSON データから Channel ID を抽出する方法としては、以下のように "変数" 設定すれば OK。

channelID = response['items'][0]['snippet']['channelId']

そして上図のように Channel ID をプログラムにセットすれば、対象ユーチューバーの "視聴回数" や "Subscribe数" をゲットできた事が確認できます(上図参照)。ただこれでは必要・・な情報といらない・・・・情報が混じっていますので、例えば Subscribe数 だけをピックアップするには以下のように指定してあげれば OK。

上図のコードを今確認する

上段のコード
response['items'][0]['statistics']



下段のコード
response['items'][0]['statistics']['subscriberCount']

あと試しにこのユーチューバーさんの一番新しい動画の "タイトル"と"概要書き"を確認してみると以下のように。

上図のコードを今確認する

title = response['items'][0]['snippet']['title']
descriptions = response['items'][0]['snippet']['description']
print(title)
print(descriptions)

response['items'][0]['snippet']['title']response['items'][0]['snippet']['description'] で対象ユーチューバーの最新のビデオ・タイトルと概要書きを取得できることが確認できますね。

ユーチューバーのビデオ情報をPythonでゲットする方法

先程まではユーチューバー(Channel)に関する情報だけを制御してきました。次は、ゲットしたユーチューバーの動画に関する情報をゲットしていきます。

上図のコードを今確認する

request = youtube.search().list(
    part="snippet",
    channelId=channelID,
    order="date",
    type="video"
)
response = request.execute()
response

対象となるユーチューバーのビデオを情報を獲得しようと思うと、上図のように Search: list 機能を使えば OK。 いくつかソート機能を利用できますが、今回は新しいもの順に抽出できるよう order = "date" を利用。 そして実際の動画については下記のように指定してあげれば、対象ユーチューバーの最新動画を確認できます。

上図のコードを今確認する

上段のコード
video = response['items'][0]['id']['videoId']
thumbnail = response['items'][0]['snippet']['thumbnails']['high']['url']
print(video)
print(thumbnail)



下段のコード
from PIL import Image
import requests
from io import BytesIO

response_img = requests.get(thumbnail)
img = Image.open(BytesIO(response_img.content))
img
■動画のURL(ID)を獲得するコード■
response['items'][0]['id']['videoId']

■動画のサムネイル画像を獲得するコード■
response['items'][0]['snippet']['thumbnails']['high']['url']

動画の URL については、 https://youtube.com=watch?v= の部分が抜けていますので、下記のように文字列の結合をしてあげれば ○ 。

上図のコードを今確認する

youtube_video_url = "https://www.youtube.com/watch?v=" + video
print(youtube_video_url)


最後にデータ分析を行う際は、取得データをリスト管理する必要があると思います。参考までにユーチューバーさんの "タイトル" と "チャンネルID" をリスト管理できるようにしてみた例をご紹介します。

上図のコードを今確認する

i = 0
channel_Title_list = []
channel_ID_list = []

while i < 5:
    channel_Title = response['items'][0]['snippet']['channelTitle']
    channel_ID = response['items'][0]['snippet']['channelId']
    channel_Title_list.append(channel_Title)
    channel_ID_list.append(channel_ID)
    i += 1

print(channel_Title_list)
print(channel_ID_list)

あとはこのリストデータを CSV に書き込んだり、 データベースに書き込んだりできると様々なデータ分析に利用できそうですね。

私の場合は、今回のような YouTube Data API を利用して、以下のような Web アプリを作ってみました。

https://pythonchannel.com/myapp/youtuber/

AIエンジニアに必要なスキルが身に付く

無料カウンセリングはこちら

まとめ

私達の生活とは関係ないところで劇的に変化し続ける Webテクノロジー。またそれに合わせて関連するデータ量は増え続け、そのデータをマーケティングに活かせるかどうかが事業継続のターニングポイントにも。 こうした "変化" と "データ" に対する対策は、どうでしょうか?

今世の中にはたくさんの Webサービスやアプリがあり、その中のインフラ的なモノについては API が公開されています。 "API" ちょっと専門的でプログラマ的な要素ですが、今は 20年前のエクセル感覚になりつつあるのではないでしょうか? つまり利用できるデータを活かせるかどうかという問題。

今回ご紹介したユーチューバーのマーケティング的な API も、 以下のリンクを開き、 API Key をセットすれば誰でもデータ取得可能な環境です。

https://colab.research.google.com/drive/1Fg5zewjbi_00blLT0aZfHgSzBktyiiMZ

グローバルで情報格差がなくなりつつある現在、もし次の一手が思い浮かばないのであれば、データ適用力を伸ばすための "ITリテラシー向上教育" いかがでしょうか?

経営者の方、個人事業主の方、教育担当の方、 CodeCamp の ITリテラシーメソッド である 「テクノロジーリテラシー 速習コース」を参考にしてください。


関連記事

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