Skip to content

YouTube Data API を使って動画の再生回数等の情報を取得します.

YouTube Data APとは

YouTubeが提供しているAPIで、動画やチャンネル、再生リストに関わる情報を取得して、自分のWebサイトやアプリケーションで使用することができます。
公式のドキュメントが用意されているので、詳しくはこちらをご覧ください。
https://developers.google.com/youtube/v3/getting-started?hl=ja
引用元:YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた

YouTube が提供している API で、動画やチャンネルなど情報を取得して、自分の Web サイトやアプリケーションで使用することができます。
一日あたりのAPI使用量(クォータ)の上限が10000になっているので、注意して使用してください。
引用元:【Python】YouTube Data API を使って、いろんな情報を取得してみた!

モジュールのインストール

python
!pip install google-api-python-client

youtubeの情報を取得(複数の動画)

特定のキーワードで検索かけて,複数の動画の情報を取得します.

最終的には,DataFrameで出力します.

ここでは,以下の情報を取得します.

  • video_id
  • タイトル
  • クレイピング日時
  • 動画の公開日時
  • チャンネルタイトル
  • チャンネルID
  • 概要欄
  • サムネイル

youtubeの情報をDataFrame形式で取得(前回と一緒)

ここでは,特定キーワードを含むタイトルの動画を再生回数順でDataFrame形式で取得します.

また,任意の動画数分だけ取得できるようにもしています.

python
import datetime
import pandas as pd
from apiclient.discovery import build

#numに入れた数字×5件の情報を取得
#その他のパラメーターはAPIから情報を取得するパラメータと同じ
# 動画のタイトル等を抜粋()
def get_video_info(part, q, order, type, num):
    dic_list = 
    search_response = youtube.search().list(part=part,q=q,order=order,type=type)
    output = youtube.search().list(part=part,q=q,order=order,type=type).execute()

    #一度に5件しか取得できないため何度も繰り返して実行
    for i in range(num):        
        dic_list = dic_list + output['items']
        search_response = youtube.search().list_next(search_response, output)
        output = search_response.execute()

    df = pd.DataFrame(dic_list)
    #各動画毎に一意のvideoIdを取得
    df1 = pd.DataFrame(list(df['id']))['videoId']
    #各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
    df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description','thumbnails']]
    
    ddf = pd.concat([df1,df2], axis = 1)

    # 日本時刻に修正+9hours
    ddf['publishedAt'] = pd.to_datetime(ddf['publishedAt']) + datetime.timedelta(hours=9)

    return ddf

再生回数等の情報を取得

上記のタイトル情報を整理したDataFrameに再生回数等の情報を追記します.

  • 再生回数
  • good数
  • Bad数
  • コメント数
python
#videoIdを入力することで、その動画の具体的な再生回数やいいね数を取得する関数を作成
def get_statistics(id):
    statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
    return statistics
python
def make_video_dataframe(q, order, _type, num):
    # 動画情報の取得
    df_snippet = get_video_info(part='snippet',q=q,order=order,type=_type,num = num)
    # 動画の再生回数等を取得
    df_static = pd.DataFrame(list(df_snippet['videoId'].apply(lambda x : get_statistics(x))))
    
    # データフレームの結合
    df_output = pd.concat([df_snippet,df_stati, axis = 1)
    
    # スクレイピング日時を入力
    scrape_date = str(datetime.date.today()).replace('-','')
    df_output['scrape_date'] = scrape_date

    # 日本時刻に修正+9hours
    df_output['publishedAt'] = pd.to_datetime(df_output['publishedAt']) + datetime.timedelta(hours=9)
    
    return df_output

コードの実行

以下のコードで実行します.

python
# 引数
part='snippet'
q = 'ボードゲーム'
order = 'date'
_type = 'video'
num = 10 #Max:75/day->75*5=375本/day

# APIの取得
YOUTUBE_API_KEY = '************'
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

# 情報をデータフレーム形式で取得
df_youtube = make_video_dataframe(q, order, _type, num)
display(df_youtube.head())

# csvに出力
# df_info.to_csv('{}_scape.csv'.format(scrape_date), index=False)
videoIdchannelTitlepublishedAtchannelIdtitledescriptionthumbnailsviewCountlikeCountdislikeCountfavoriteCountcommentCountscrape_date
0k955sk9AOugただのハセベ2021-06-16T20:59:12ZUCc308oE3ONLKlHWyh2BYsig【たまるば】ボードゲームアリーナ。ニムトやってみました!★5月31日分の配信です。 今回は「ボードゲームアリーナ」をたまるばの4人でやっていきます。 ...{'default': {'url': 'https://i.ytimg.com/vi/k9...2000020210617
14ZEVCDBfTUoエレクリ放送局2021-06-16T19:47:33ZUCPo0NkhoaqJAbsDxFiEwAlw【ラジオ】りんとら&ぺんぎんぬでボードゲーム雑談ラジオ【エレクリラジオ#3】【作業用】タイムスタンプ(目次)~ 配信後に更新します この企画では、りんとらと毎回変わるゲストがボー...{'default': {'url': 'https://i.ytimg.com/vi/4Z...0000020210617
2jf-OpbwFDvoはるGameカンパニー2021-06-16T16:57:05ZUCoNouSqOoyy2PmPMcweQKLg【ボードゲーム】コードネームする!【連想】【コラボ配信】今回2回目のプレイですが、前回よりも更に楽しんでいこうと思います! 年越(主催者様) Twi...{'default': {'url': 'https://i.ytimg.com/vi/jf...7000020210617
3Ai3u1Axmzvgソレイユ・ソレル / soleil soler2021-06-16T16:50:34ZUCqN_ItttzXou1G8-rhKDQNA【世界のアソビ大全51】なかなか終わらないボードゲーム!?!?それが、ルドー!!!ローズとコ...NPCには負けないぞっっ!!! ♪コラボ相手♪ ローズ・ロアンヌ(Land project)...{'default': {'url': 'https://i.ytimg.com/vi/Ai...0100020210617
4_mS8Ml-Opk4縁側ボードゲーム2021-06-16T13:29:17ZUCyRwYeUzCvkNYBcEdnZ0J0g「ヘックメック」ボードゲームプレイ動画ヘックメックを4人で遊んでいます 扇風機がうるさかったり解説が高速だったりしてすみません.{'default': {'url': 'https://i.ytimg.com/vi/_m...9000NaN20210617

参考サイト

【Python】YouTube Data API を使って、いろんな情報を取得してみた!

YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた

Youtube Data APIを使ってPythonでYoutubeデータを取得する

Search: list | YouTube Data API | Google Developers