YouTube Data API を使って再生リストから動画の再生回数等の情報を取得する
YouTube Data API を使って再生リストから動画の再生回数等の情報を取得します.
全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】
# YouTube Data APとは
YouTubeが提供しているAPIで、動画やチャンネル、再生リストに関わる情報を取得して、自分のWebサイトやアプリケーションで使用することができます。
公式のドキュメントが用意されているので、詳しくはこちらをご覧ください。
https://developers.google.com/youtube/v3/getting-started?hl=ja
引用元:YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた (opens new window)
YouTube が提供している API で、動画やチャンネルなど情報を取得して、自分の Web サイトやアプリケーションで使用することができます。
一日あたりのAPI使用量(クォータ)の上限が10000になっているので、注意して使用してください。
引用元:【Python】YouTube Data API を使って、いろんな情報を取得してみた! (opens new window)
# モジュールのインストール
!pip install google-api-python-client
# プレイリストの動画情報を取得
下記のコードで再生リストの情報を取得します.
本稿で取得する再生リストは以下の通りです.
https://www.youtube.com/playlist?list=PLDb67L4FP3ujetyC-iu1e3ybe2ErKfa69
import datetime
import pandas as pd
from apiclient.discovery import build
#numに入れた数字×5件の情報を取得
#その他のパラメーターはAPIから情報を取得するパラメータと同じ
# 動画のタイトル等を抜粋()
def get_playlist_video_info(part, playlist_Id, maxResults):
dic_list = []
next_page_token = None
#一度に5件しか取得できないため何度も繰り返して実行
while 1:
output = youtube.playlistItems().list(part=part,playlistId=playlist_Id,pageToken=next_page_token,maxResults=maxResults).execute()
dic_list = dic_list + output['items']
next_page_token = output.get('nextPageToken')
if next_page_token is None:
break
df = pd.DataFrame(dic_list)
df = df.rename(columns={'id': 'videoId'})
#各動画毎に一意のvideoIdを取得
df1 = pd.DataFrame(list(pd.DataFrame(list(df['snippet']))['resourceId']))['videoId']
#各動画毎に一意のvideoIdを取得必要な動画情報だけ取得
df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description','thumbnails']]
ddf = pd.concat([df1,df2], axis = 1)
return ddf
#videoIdを入力することで、その動画の具体的な再生回数やいいね数を取得する関数を作成
def get_statistics(id):
statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
return statistics
#videoIdを入力することで、その動画の具体的な再生時間を取得する関数を作成
# https://qiita.com/kon2/items/f09def292c3b0be2bb8e
def get_contentDetails(id):
contentDetails = youtube.videos().list(part = 'contentDetails', id = id).execute()['items'][0]['contentDetails']
return contentDetails
def make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults=50):
# 動画情報の取得
df_snippet = get_playlist_video_info(part='snippet',playlist_Id=playlist_Id, maxResults=maxResults)
# 動画の再生回数等を取得
df_static = pd.DataFrame(list(df_snippet['videoId'].apply(lambda x : get_statistics(x))))
# 動画の再生時間等を取得
df_contentDetails = pd.DataFrame(list(df_snippet['videoId'].apply(lambda x : get_contentDetails(x))))
# データフレームの結合
df_output = pd.concat([df_snippet,df_static,df_contentDetails], axis = 1)
# スクレイピング日時を入力
scrape_date = str(datetime.date.today()).replace('-','')
df_output['scrape_date'] = scrape_date
return df_output
# 引数
YOUTUBE_API_KEY = 'AIzaSyBQnquVQbzDNxEnj18mNT17OeOHRAs2Wng'
playlist_Id = 'PLWbkonia8z_R_xrRVOcdxQJvRRAEtFxp5'
order = 'date'
maxResults = 10
# APIの取得
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)
# データフレーム実行
df_playlist = make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults)
# 描画
display(df_playlist[0:3])
# 保存
# channelTitle = df_playlist['channelTitle'][0].replace(' ', '_')
# print(channelTitle)
# df_playlist.to_csv('./channel_csv/{0}_playlist_{1}.csv'.format(str(datetime.date.today()).replace('-',''), channelTitle), index=False)
videoId | channelTitle | publishedAt | channelId | title | description | thumbnails | viewCount | likeCount | dislikeCount | favoriteCount | commentCount | duration | dimension | definition | caption | licensedContent | contentRating | projection | scrape_date | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | DKpE4TfoEog | メンタリスト DaiGo | 2020-03-09T02:57:13Z | UCFdBehO71GQaIom4WfVeGSw | 人間関係に関する悩みに答えます【質疑応答】 | 📘この動画内で紹介したおすすめ動画・ニコニコ動画は\n知識のNetflix【Dラボ】で見放題... | {'default': {'url': 'https://i.ytimg.com/vi/DK... | 158232 | 2192 | 84 | 0 | 8 | PT57M52S | 2d | hd | false | True | {} | rectangular | 20210701 |
1 | Sdfn7S06zgg | メンタリスト DaiGo | 2020-03-19T17:03:17Z | UCFdBehO71GQaIom4WfVeGSw | 質疑応答!スキルアップとキャリアアップに関する質問に答えます【質疑応答】 | 📘この動画内で紹介したおすすめ動画・ニコニコ動画は\n知識のNetflix【Dラボ】で見放題... | {'default': {'url': 'https://i.ytimg.com/vi/Sd... | 123418 | 1516 | 78 | 0 | 6 | PT1H4M44S | 2d | hd | false | True | {} | rectangular | 20210701 |
2 | 5jK5IvJb8EU | メンタリスト DaiGo | 2020-04-02T12:05:59Z | UCFdBehO71GQaIom4WfVeGSw | 人生相談受けます【質疑応答】 | 📘この動画内で紹介したおすすめ動画・ニコニコ動画は\n知識のNetflix【Dラボ】で見放題... | {'default': {'url': 'https://i.ytimg.com/vi/5j... | 128133 | 1715 | 77 | 0 | 7 | PT1H1M21S | 2d | hd | false | True | {} | rectangular | 20210701 |
# 参考サイト
【Python】YouTube Data API を使って、いろんな情報を取得してみた! (opens new window)
YouTube Data API v3を使用して、YouTubeページと同じリストモジュールを作ってみた (opens new window)
Youtube Data APIを使ってPythonでYoutubeデータを取得する (opens new window)
Search: list | YouTube Data API | Google Developers (opens new window)
youtube API get all playlist id from a channel : python (opens new window)