これは公開前記事の共有用画面です。

YouTube APIを使用した動画トランスクリプト取得プログラムの実装手順 (初心者向け)


この手順書では、YouTubeの動画の字幕データ(トランスクリプト)を取得するプログラムを、Google Colaboratoryを使って作成する方法を、初心者の方向けに詳しく解説します。特に、YouTube APIキーの取得方法について丁寧に説明しますので、安心して進めてください。

1. 準備

1.1 Googleアカウントを用意する

プログラムの実行にはGoogleアカウントが必要です。まだアカウントを持っていない場合は、Googleのウェブサイトで作成してください。

1.2 Google Colaboratoryを開く

Google Colaboratory (Colab) は、ブラウザ上でPythonコードを実行できる無料のサービスです。今回は、Colabを使ってプログラムを作成・実行します。以下のリンクからColabを開いてください。https://colab.research.google.com/

2. YouTube APIキーの取得

YouTube APIを利用するには、APIキーと呼ばれる特別なコードが必要です。APIキーを取得するには、以下の手順に従ってください。

2.1 Google Cloud Consoleにアクセスする

Google Cloud Consoleは、Google Cloud Platformのサービスを管理するためのウェブサイトです。以下のリンクからアクセスしてください。

https://console.cloud.google.com/

2.2 新しいプロジェクトを作成する

APIキーは、プロジェクトごとに発行されます。今回は、新しいプロジェクトを作成して、そのプロジェクトにAPIキーを発行します。

  1. 右上のプロジェクト選択ドロップダウンをクリックします。

  2. 「新しいプロジェクト」を選択します。

  3. プロジェクト名を入力します (例: youtube-transcript)。

  4. 「作成」をクリックします。

画像
「新しいプロジェクト」を選択
画像
プロジェクト名の入力

プロジェクトの作成には少し時間がかかる場合があります。

2.3 YouTube Data API v3を有効にする

APIキーを発行するには、使用するAPIを有効にする必要があります。今回は、YouTube Data API v3を使用します。

  1. 左側のメニューから「APIとサービス」→「ライブラリ」を選択します。

  2. 検索バーに「YouTube Data API v3」と入力します。

  3. 検索結果に表示された「YouTube Data API v3」をクリックします。

  4. 「有効にする」ボタンをクリックします。

画像
ライブラリの選択
画像
「YouTube Data API v3」と入力
画像
有効にする

2.4 認証情報を作成する

APIキーは、認証情報の一種です。

  1. 左側のメニューから「APIとサービス」→「認証情報」を選択します。

  2. 「認証情報を作成」→「APIキー」をクリックします。

  3. APIキーが作成され、表示されます。このAPIキーをコピーし、安全な場所に保存してください。このAPIキーは、後ほどプログラムで使用します。

画像
認証情報の作成
画像
APIキーの取得

2.5 APIキーを制限する (オプションだが推奨)

セキュリティを高めるために、APIキーの使用を制限することを推奨します。

  1. 作成したAPIキーをクリックします。

  2. 「アプリケーションの制限」で「HTTPリファラー」を選択します。

  3. 「ウェブサイト」を選択し、許可するドメイン (例: colab.research.google.com) を追加します。

  4. 「APIの制限」で「キーを制限」を選択します。

  5. 「YouTube Data API v3」のみを選択します。

  6. 「保存」をクリックします。

3. コードの実装

3.1 Google Colaboratoryで新しいノートブックを作成する

Colabの画面左上の「ファイル」→「ノートブックを新規作成」をクリックして、新しいノートブックを作成します。
*今回はこちらのノートブックをコピーしてください。

画像

3.2 以下のコードを入力し、実行する

以下のコードを、Colabのコードセルに入力し、実行してください。


!pip install google-api-python-client youtube-transcript-api

import os
from google.colab import drive
from googleapiclient.discovery import build
from youtube_transcript_api import YouTubeTranscriptApi
import datetime
import time

# Google Driveをマウント
drive.mount('/content/drive')

# YouTube Data API の設定
API_KEY = '***************'  # ここにあなたのAPI keyを入力してください
youtube = build('youtube', 'v3', developerKey=API_KEY)

def get_all_videos(channel_id):
    videos = []
    next_page_token = None

    while True:
        request = youtube.search().list(
            part="snippet",
            channelId=channel_id,
            order="date",
            type="video",
            maxResults=50,
            pageToken=next_page_token
        )
        response = request.execute()

        for item in response['items']:
            videos.append({
                'id': item['id']['videoId'],
                'title': item['snippet']['title'],
                'published_at': item['snippet']['publishedAt']
            })

        next_page_token = response.get('nextPageToken')
        if not next_page_token:
            break

        time.sleep(1)  # APIレート制限を避けるため

    return videos

def get_transcript(video_id):
    try:
        transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=['ja'])
        return ' '.join([entry['text'] for entry in transcript])
    except Exception as e:
        print(f"Error getting transcript for video {video_id}: {str(e)}")
        return None

def main():
    # ユーザーからの入力を受け取る
    channel_id = input("チャンネルIDを入力してください: ")
    channel_name = input("チャンネル名を入力してください: ")

    videos = get_all_videos(channel_id)

    today = datetime.datetime.now().strftime("%Y-%m-%d")
    filename = f"/content/drive/MyDrive/{today}_{channel_name}_transcripts.txt"

    with open(filename, 'w', encoding='utf-8') as f:
        for video in videos:
            transcript = get_transcript(video['id'])
            if transcript:
                f.write(f"Video ID: {video['id']}\n")
                f.write(f"Title: {video['title']}\n")
                f.write(f"Published at: {video['published_at']}\n")
                f.write(f"Transcript:\n{transcript}\n\n")
                f.write("---\n\n")
            time.sleep(1)  # APIレート制限を避けるため

    print(f"Transcripts have been saved to {filename}")
    print(f"Total videos processed: {len(videos)}")

if __name__ == "__main__":
    main()

3.3 API_KEY変数に、ステップ2.4で取得したAPIキーを入力する

上記のコードの `API_KEY = '******'` の部分を、実際に取得したAPIキーに置き換えてください。

4. プログラムの実行

4.1 コードを実行する

コードセルを実行するには、セル左側の実行ボタンをクリックするか、 `Shift` + `Enter` キーを押します。

4.2 プロンプトが表示されたら、取得したいYouTubeチャンネルのチャンネルIDとチャンネル名を入力する

プログラムを実行すると、チャンネルIDとチャンネル名の入力を求められます。取得したいチャンネルの情報を正しく入力してください。

  • チャンネルID: YouTubeチャンネルのURLの一部です。通常、「UC」で始まる文字列です。

  • チャンネル名: チャンネルの名前です。ファイル名の一部として使用されます。

4.3 プログラムが実行され、指定したチャンネルの全動画のトランスクリプトが取得される

プログラムの実行には、時間がかかる場合があります。動画の数が多いチャンネルや、動画の長さが長い場合は、特に時間がかかります。

4.4 取得したデータは、指定したGoogle Driveのパスに保存される

トランスクリプトは、Google Driveの「My Drive」フォルダに保存されます。ファイル名は、日付とチャンネル名、"transcripts.txt" を組み合わせたものになります。

注意事項

  • APIキーは秘密情報です。公開したり、他人と共有したりしないでください。

  • YouTube APIには使用制限があります。大量のリクエストを短時間で行うと、一時的にブロックされる可能性があります。

  • チャンネルIDは、チャンネルのURLから取得できます。通常、「UC」で始まる文字列です。

この手順に従えば、YouTube APIを使用して動画のトランスクリプトを取得するプログラムを実装できます。初めてAPIを使用する場合は、各ステップをゆっくり確認しながら進めてください。

さらに学びたい方へ

このプログラムでは、基本的なトランスクリプトの取得方法を紹介しました。YouTube APIでは、他にも様々なことができます。例えば、動画のタイトルや説明文を取得したり、動画をアップロードしたりすることもできます。

YouTube APIについてもっと詳しく知りたい方は、以下のリソースを参考にしてください。

この手順書が、あなたのYouTube APIを使った開発の第一歩となることを願っています!

この記事が気に入ったらサポートをしてみませんか?

【プレビュー】YouTube APIを使用した動画トランスクリプト取得プログラムの実装手順 (初心者向け)|groundcobra009|note
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1