YouTubeで再生リストに含まれる動画を一覧で取得する方法【YouTube Data API x Pythonスクリプト解説】

YouTubeで再生リストに含まれる動画を一覧で取得する方法【YouTube Data API x Pythonスクリプト解説】

YouTube Data APIを使って、再生リストや動画の情報を自動取得し、CSVファイルに保存する方法を解説します。Pythonスクリプトで簡単に管理でき、APIキーやチャンネルIDの取得手順も丁寧に説明。初心者でもすぐに試せます!
Clock Icon2024.09.19

クラスメソッドのYouTubeチャンネルは、おかげさまで1.3万人以上のチャンネル登録数をいただいてます。
チャンネルでは、AWS等の技術を動画で紹介するのはもちろん、開催したイベントの動画も上がっており、延べ800本を超えます。

YouTubeをさらに使いやすくして、もっと観てもらいたい!

と思うものの、YouTube上のデータを管理画面上のエクスポートだと解析データが主になるため、一覧情報のようなものは取得しにくいようです。そこで今回は、YouTube Data APIを使って、チャンネルの再生リストとその中にある動画を自動で取得し、CSVファイルに出力する方法をご紹介します。

プログラミングに慣れていなくても、このスクリプトを使えば簡単に再生リストと動画の情報をまとめることができるので、ぜひやってみてください。

YouTube Data APIって何?

YouTube Data API は、YouTubeのデータにアクセスできるツールのようなものです。APIを使うことで、動画の情報、再生リスト、チャンネルに関するデータなどをプログラムで取得できます。手動で行うよりも効率的にデータを扱うことができるので、特に動画が多いチャンネルでは役立ちます。

事前準備1. チャンネルIDを取得する

まず、再生リストを取得するには、対象のYouTubeチャンネルのチャンネルIDが必要です。次の手順で簡単にチャンネルIDを確認できます。

  1. YouTubeにアクセスし、チャンネルのページを開きます。
  2. URLの末尾が/channel/に続く文字列(例: UCxxxxxxxxx)がチャンネルIDです。
  3. URLが/c//user/で終わっている場合は、次の手順でIDを確認できます。
    • チャンネルページの空白部分で右クリックし、「ページのソースを表示」を選択。
    • ページソースの表示画面で「Ctrl + F」(Macでは「Cmd + F」)を押して「channelId」を検索。
    • channelIdに続く文字列が、そのチャンネルのIDです。

事前準備2. APIキーを取得する

APIを使うためには、APIキーを取得する必要があります。手順は次の通りです。

  1. Google Cloud Consoleにアクセスして、新しいプロジェクトを作成します。
  2. 左側のメニューから「APIとサービス」を選択し、「ライブラリ」に移動します。
  3. 「YouTube Data API v3」を検索し、有効化します。
  4. 「認証情報」タブから、APIキーを作成します。これがAPIにアクセスするための鍵となります。

事前準備3. 必要なライブラリをインストールする

今回利用するPythonのスクリプトでは、requestsというライブラリが必要です。以下のコマンドでインストールしてください。

pip install requests

Pythonスクリプトの流れ

今回のスクリプトは以下のステップで進みます。

  1. 再生リストを取得:チャンネルにある再生リストを全部取得します。
  2. 再生リスト内の動画を取得:再生リストごとの動画を取得して、タイトルとURLを取り出します。
  3. CSV出力:すべての情報をCSVファイルに書き出します。

これにより、再生リストとその中にある動画の一覧がまとめられます。

再生リストと動画を取得するPythonスクリプト

以下のスクリプトを実行するだけで、再生リストとその中の動画をCSVに出力できます。チャンネルIDとAPIキーを正しく設定すれば、すぐに使えるのでぜひ試してみてください。

以下をコピペして youtube_playlists_and_videos.py という名前で保存してください。

import csv
import requests

CHANNEL_ID = 'YOUR_CHANNEL_ID'  # チャンネルID
API_KEY = 'YOUR_API_KEY'  # あなたのAPIキー
PLAYLIST_URL = 'https://www.googleapis.com/youtube/v3/playlists'
PLAYLIST_ITEMS_URL = 'https://www.googleapis.com/youtube/v3/playlistItems'
VIDEO_URL_TEMPLATE = 'https://www.youtube.com/watch?v={video_id}'
CSV_FILE_PATH = 'youtube_playlists_and_videos.csv'  # 保存するCSVファイル名

def get_playlists(page_token=None):
    """ チャンネルの再生リストを取得 """
    params = {
        'part': 'snippet',
        'channelId': CHANNEL_ID,
        'maxResults': 50,
        'key': API_KEY,
        'pageToken': page_token
    }
    response = requests.get(PLAYLIST_URL, params=params)
    data = response.json()
    return data.get('items', []), data.get('nextPageToken')

def get_playlist_items(playlist_id, page_token=None):
    """ 再生リスト内の動画を取得 """
    params = {
        'part': 'snippet',
        'playlistId': playlist_id,
        'maxResults': 50,
        'key': API_KEY,
        'pageToken': page_token
    }
    response = requests.get(PLAYLIST_ITEMS_URL, params=params)
    data = response.json()
    return data.get('items', []), data.get('nextPageToken')

def main():
    with open(CSV_FILE_PATH, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(['Playlist Title', 'Video Title', 'Video URL'])  # CSVヘッダー

        page_token = None
        while True:
            # 再生リストの取得
            playlists, next_page_token = get_playlists(page_token)
            if not playlists:
                break

            for playlist in playlists:
                playlist_title = playlist['snippet']['title']
                playlist_id = playlist['id']

                # 再生リスト内の動画を取得
                playlist_page_token = None
                while True:
                    playlist_items, playlist_next_page_token = get_playlist_items(playlist_id, playlist_page_token)
                    if not playlist_items:
                        break

                    for item in playlist_items:
                        video_title = item['snippet']['title']
                        video_id = item['snippet']['resourceId']['videoId']
                        video_url = VIDEO_URL_TEMPLATE.format(video_id=video_id)

                        # CSVに書き込む
                        writer.writerow([playlist_title, video_title, video_url])

                    if not playlist_next_page_token:
                        break
                    playlist_page_token = playlist_next_page_token

            if not next_page_token:
                break
            page_token = next_page_token

if __name__ == '__main__':
    main()

スクリプトの使い方

  1. チャンネルIDの設定
    YOUR_CHANNEL_IDの部分に、取得したチャンネルIDを設定してください。

  2. APIキーの設定
    YOUR_API_KEYの部分に、取得したAPIキーを設定してください。

  3. スクリプトの実行
    ターミナルやコマンドプロンプトでスクリプトを実行します。

    python youtube_playlists_and_videos.py
    
  4. 結果の確認
    スクリプトが正常に実行されると、youtube_playlists_and_videos.csvというファイルが生成され、再生リストとその中の動画のタイトル、URLが保存されます。

出力サンプル

Playlist Title Video Title Video URL
Hibiya.Tech Hibiya Tech #6 CM Odyssey re:Cap プラットフォームエンジニアリング編 https://www.youtube.com/watch?v=VDo-lLSGtAY
クラスメソッド福岡オフィス エンジニアはなぜ福岡に行くのか?移住のリアルを語る #DevIOラジオ部 https://www.youtube.com/watch?v=xcQoMh3dmKw
Microsoft Azure Azure アーキテクチャセンターから Microsoft Azure の基本構成を学ぼう#cm_odyssey https://www.youtube.com/watch?v=jcEOJANytx8
コールセンター Amazon Connectのベストプラクティス - 効果的な設計と運用の秘訣 #cm_odyssey https://www.youtube.com/watch?v=bQfU5PB2ccU
コールセンター Amazon Connect を利用した CloudWatch Alarm 電話通知 #cm_odyssey https://www.youtube.com/watch?v=3wiqrDBxn30

まとめ

YouTube Data APIを使えば、再生リストや動画の情報を簡単に管理できます。この方法を使うことで、手動でリストを確認する手間が省け、効率的にデータを管理できます。チャンネル運営者にとって、こうしたスクリプトは大きな助けになるはずです。ぜひ、実際に試してみてください!

あと、この機会にチャンネル登録もぜひお願いします。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.