はじめに
世界最大級の音楽祭「コーチェラ・フェスティバル」が今年も開催されました。2024年は4月12日〜14日、19日〜21日の2週間にわたって開催され、YOASOBI、初音ミク、新しい学校のリーダーズ、Awich、Number_iなど日本のアーティスト5組が出演し、日本の音楽を世界に発信しました。
その模様はYouTubeでストリーミング配信され、また再生リストでピックアップされたライブ動画が公開されています。
日本のアーティストのライブがどのくらい評価されているのか気になりますし、また視聴回数やlike数から見る海外の人気アーティストも気になります。
そこで、YouTubeのチャンネル"Coachella"の再生リスト"Live at Coachella 2024"で公開されているライブ動画の情報をYouTube APIで収集するためのPythonのコードを作成しました。
このコードを使って、日本人アーティストの評価や人気アーティストの動画を分析していきます。リストで公開されているライブ動画の情報をYouTube APIで収集するためのPythonのコードを作成しました。
下記のサイトのコードをほぼ使わせていただきましたが、非公開動画が再生リストに含まれているとエラーになるので、対処するためのコードを追加しました。
開発環境と準備
*Google Colaboratory(Colab Pro.)
*Python
*事前にGoogle CloudにてAPI Keyを取得しておきます。
*再生リストのIDはurl
"https://www.youtube.com/playlist?slist=PLIjqRbAQP0WJpM_afrS_j_vvRFKm3YRBi"
のPL以降の文字列です。
Import
import datetime
import pandas as pd
from apiclient.discovery import build
関数の定義
def get_playlist_video_info(part, playlist_Id, maxResults):
dic_list = []
next_page_token = None
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']]
ddf = pd.concat([df1,df2], axis = 1)
#列'description'がThis video is private.’の行を削除
ddf = ddf[ddf['description'] != 'This video is private.']
#ddfのindexを0から昇順に振り直し
ddf = ddf.reset_index(drop=True)
#列'description','favoriteCount'を削除
ddf = ddf.drop('description', axis=1)
return ddf
# videoIdから各動画の統計データを取得
def get_statistics(id):
statistics = youtube.videos().list(part = 'statistics', id = id).execute()['items'][0]['statistics']
return statistics
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_output = pd.concat([df_snippet,df_static], axis = 1)
# スクレイピング日時を入力
scrape_date = str(datetime.date.today()).replace('-','')
df_output['scrape_date'] = scrape_date
#列'favoriteCount'を削除
df_output = df_output.drop('favoriteCount', axis=1)
return df_output
パラメータ設定とAPIのbuild
YOUTUBE_API_KEY = '取得したAPI_KEY'
playlist_Id = 'PLIjqRbAQP0WJpM_afrS_j_vvRFKm3YRBi' #再生リストのID
order = 'date'
maxResults = 10
# APIの取得
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)
実行
df_output = make_playlist_video_dataframe(YOUTUBE_API_KEY, playlist_Id, maxResults)
df_output.head()