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)

全国630店舗以上!もみほぐし・足つぼ・ハンドリフレ・クイックヘッドのリラクゼーション店【りらくる】

Python + CycleGAN-VC2でオリジナルデータにおける音質変換を実装する

Python + CycleGAN-VC2でオリジナルデータにおける音質変換を実装する

Clubhouseの影響で音質系に興味を持ちました.本稿では,Python + CycleGAN-VC2でリジナルデータにおける音質変換を実施します.

YouTube Data API を使ってチャンネルIDから動画の情報を取得する

YouTube Data API を使ってチャンネルIDから動画の情報を取得する

YouTube Data API を使ってチャンネルIDから動画の情報を取得します.