【Python】指定したYouTuberの動画情報を一括で全件取得する方法

Python

お気に入りのユーチューバーの過去の動画を探すとき、スクロールがとても大変に感じたことはありませんか?そのような場合、動画のタイトルと動画のURL情報がセットになっている一覧が取得できたら便利ですよね。

そこで今回はYouTube Data APIを使用して指定したユーチューバーの動画情報を取得しましょう。

これにより、過去の動画のURLへのアクセスが容易になるかもしれません。

ではいってみましょう。

パッケージのインストール

まずは以下の3つのパッケージをインストールしましょう。

pip install isodate
pip install google-api-python-client
pip install python-dateutil

コードサンプル

こちらが指定したユーチューバーの動画情報を全件取得するコードです。

import datetime
import csv
import isodate
from googleapiclient.discovery import build
from dateutil.relativedelta import relativedelta

#-------↓パラメータ入力↓-------

developerKey = "ここに自身のAPIキー"
channel_id = "ここにYouTuberのチャンネルID"

#-------↑パラメータ入力↑-------

youtube = build("youtube", "v3", developerKey=developerKey)
video_info = []

def youtube_search(pagetoken, st, ed):

    # YouTubeAPIをビルド
    youtube = build("youtube", "v3", developerKey=developerKey)

    # 指定したチャンネルの情報を取得
    search_response  = youtube.search().list(
        part = "snippet",
        channelId = channel_id,
        maxResults = 50,
        type = "video",
        publishedAfter = st, #'2013-01-01T00:00:00Z',
        publishedBefore = ed, #'2014-01-01T00:00:00Z',
        order = "date",
        pageToken = pagetoken
    ).execute()

    # 取得したチャンネルの情報から動画IDを取得
    video_list = []
    for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
            video_list.append(search_result["id"]["videoId"])

    # 動画IDの一覧から動画情報を取得
    video_response= youtube.videos().list(
        part = "id,snippet,contentDetails,player,statistics",
        id  = ",".join(video_list)
    ).execute()

    # 取得した動画情報から各情報を取得
    for video_result in video_response.get("items", []):

        # API参考URL = https://developers.google.com/youtube/v3/docs/videos?hl=ja#resource
        publishedAt = video_result["snippet"]["publishedAt"] if 'publishedAt' in video_result['snippet'] else ''
        title = video_result["snippet"]["title"] if 'title' in video_result['snippet'] else ''
        video_id = video_result["id"]
        url = 'https://www.youtube.com/watch?v=%s' % video_result["id"]
        categoryId = video_result["snippet"]["categoryId"] if 'categoryId' in video_result['snippet'] else ''
        if "duration" in video_result["contentDetails"]:
            duration = isodate.parse_duration(video_result["contentDetails"]["duration"])
        else:
            ""
        viewCount= video_result["statistics"]["viewCount"] if 'viewCount' in video_result['statistics'] else ''
        likeCount = video_result["statistics"]["likeCount"] if 'likeCount' in video_result['statistics'] else ''
        commentCount = video_result["statistics"]["commentCount"] if 'commentCount' in video_result['statistics'] else ''
        video_info.append([publishedAt,title,video_id,url,categoryId,duration,viewCount,likeCount,commentCount])
        print(video_info)

    try:
        nextPagetoken = search_response["nextPageToken"]
        youtube_search(nextPagetoken, st, ed)
    except:
        return

# ここを適宜変更してください
dt = datetime.datetime(2024, 1, 1, 0, 0)
for i in range(1, 9):
    youtube_search('', dt.isoformat()+'Z', (dt + relativedelta(months=1)).isoformat()+'Z')
    dt = dt + relativedelta(months=1)

dt_now = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
with open(dt_now + '_' + channel_id + '_channel-video-info.csv', 'w', newline='', encoding='utf-16') as f:
    writer = csv.writer(f, dialect='excel-tab', quoting=csv.QUOTE_ALL)
    writer.writerows(video_info)

使用方法

YouTubeの動画情報を取得するためにはYouTubeAPIを使用する必要があります。APIを使用するにはAPIキーを取得する必要があります。

YoutubeAPIキーの取得

こちらの記事を参考にAPIキーを取得しましょう!

【Youtube】APIキーの取得手順(2021/04/08時点のキャプチャ) - Qiita
はじめにYoutubeのAPIがあれば動画情報の取得が出来ます。YoutubeはWEBスクレイピングを規約違反としているのでAPI経由で情報を取得する必要があります。私は↓のPythonライブ…

APIキーをプログラムに記載

取得したAPIキーをプログラムの次の部分に記載しましょう。

#——-↓パラメータ入力↓——-

developerKey = “ここに自身のAPIキー
channel_id = “ここにYouTuberのチャンネルID”

#——-↑パラメータ入力↑——-

YouTuberのチャンネルIDを調べる

こちらのサイトでYouTuberのチャンネルIDを調べましょう。

他人のYouTubeのチャンネルIDを調べる - ilr - アイ・エル・アール
概要 自分自身のチャンネルIDはYouTube Studio>カスタマイズ>基本情報 で確認することができますが、他人のチャンネルでカスタム URLを使用されているチャンネルはチャンネルIDがわかりません。 ソースから確

チャンネルIDをプログラムに記載

調査したチャンネルIDをプログラムの次の部分に記載しましょう。

#——-↓パラメータ入力↓——-

developerKey = “ここに自身のAPIキー“
channel_id = “ここにYouTuberのチャンネルID

#——-↑パラメータ入力↑——-

取得期間の変更

取得する動画の投稿日を適宜変更してください。例えば2023年の3月からの動画を取得したい場合は赤字の部分を2023, 3に変更します。そしてrange(1, 9)は、何か月分を取得するかを指定します。例えばrange(1, 9)は8回ループするので、8か月分が取得されます。

# ここを適宜変更してください
dt = datetime.datetime(2024, 1, 1, 0, 0)
for i in range(1, 9):
youtube_search(”, dt.isoformat()+’Z’, (dt + relativedelta(months=1)).isoformat()+’Z’)
dt = dt + relativedelta(months=1)

実行結果

同じ階層に実行結果のCSVファイルが作成されます。

さいごに

いかがだったでしょうか。

今回はYouTube Data APIを使用して、指定したユーチューバーの動画情報を取得する方法をご紹介しました。

ぜひご活用ください。

※参考にさせていただいたサイトです。

コメント