【YouTube要約アプリ開発】第4回:ついに完成! 検索と要約機能を組み合わせる

AI

こんにちは! 【YouTube要約アプリ開発】シリーズも今回で最終回となります。

第1回でAPIの基本を知り、第2回でYouTube Data APIを使って動画を検索する方法を学びました。そして第3回では、Gemini APIを使って動画内容を要約するプログラムを作成しましたね。

いよいよ第4回となる今回は、これまでの学びと作成したコードを全て組み合わせ、「YouTube動画の検索と要約ができるアプリ」を完成させます! AIとの共同制作の集大成として、一緒に形にしていきましょう!

YouTube要約アプリ開発のシリーズ展開

このシリーズでは、YouTube動画の検索と要約アプリを完成させるために、以下のステップで進めていきます。

開発に必要な部品と知識は手元にあります!

これまでのステップで、あなたはすでにアプリ開発に必要な**重要な「部品」**を手にしています。

第1回:APIの基本とAIプログラミング

APIがプログラムとサービスを繋ぐ仲介役であること、AIがパートナーになること、そしてPythonとColabでプログラミングできる基礎を学びました。

第2回:YouTube動画を検索する

YouTube Data APIを使って動画情報を検索するプログラムを作成しました。

具体的には、APIキーを使ってYouTubeの動画データを検索し、指定したキーワードに関連する動画のリストを取得する方法を学びました。

検索クエリや取得件数(max_results)を指定し、結果として動画のタイトルやURLといった情報を取得するプログラムを作成しています。

第3回:Geminiに動画内容を要約してもらう

Gemini APIを使って動画内容を要約するプログラムを作成しました。

要約の元となる動画の文字情報(特に字幕)を取得するための関数を作成しました。

この関数は、動画IDから字幕テキストや動画の説明文を取得します。そして、文字情報をGemini APIに渡して要約を実行する関数を作成しました。この要約を行う関数は、指定された最大文字数(max_chars)内に収まるようにテキストを要約し、結果をMarkdown形式の文字列で返してくれるようにしています。

これらの関数(部品)と、それぞれのAPIを使うためのAPIキーがあれば、アプリを組み立てる準備ができています!

ファイル名関数名 (機能)
youtube_search.pysearch_youtube_videos(query, max_results)
(YouTube動画の検索)
youtube_transcript.pyget_transcript(video_id)
(動画の文字情報取得)
gemini_summarize.pysummarize_text(text_to_summarize, max_chars)
(テキストの要約)

部品を組み立てる! アプリ全体の流れを設計しよう

部品が揃ったところで、これらの部品を組み合わせて、ユーザーが操作できる一つのアプリとして動かすための「全体の流れ」を考えましょう。

ユーザーがアプリを使って、アイデアを実現する操作をイメージします。

  • 👤 (ユーザー) アプリ起動
  • 👤 (ユーザー) 検索したいキーワードを入力
  • 💻 (アプリ) search_youtube_videos関数を呼び出して検索した動画を番号付きで表示
  • 👤 (ユーザー) 要約したい動画の番号を入力
  • 💻 (アプリ) get_transcript関数を呼び出して文字情報を取得
  • 💻 (アプリ) summarize_text関数を呼び出して文字情報を要約
  • 💻 (アプリ) 結果を表示、Markdownファイル作成・表示

これが、アプリ全体の基本的な流れです。この流れを、Pythonコードとして記述していきます。

AIと一緒に最終コード作成! 機能統合とMarkdownファイル出力

さあ、いよいよAIに、この全体の流れを実装した最終アプリのコードを書いてもらいましょう!

開発の準備

今回も、VS CodeGemini Code Assistで開発を進めます。

VS Codeを起動し、前回の作業フォルダを開いてください。

VS CodeGemini Code Assistの詳細については以下をご覧ください。

第2回、第3回で作成したPythonファイルなどがあると思います。

  • youtube_search.py
  • youtube_transcript.py
  • gemini_summarize.py
  • config.json

AIにコードを生成してもらう

これまでの第2回、第3回で作った関数のコードをAIに伝えて、それらを組み合わせるように指示します。

それでは、Gemini Code Assistにお願いしてみましょう!

プロンプトの例

プロジェクトフォルダにの以下のPythonファイルがあります。
youtube_search.py
youtube_transcript.py
gemini_summarize.py
そしてその中に以下の関数があります。
search_youtube_videos(query, max_results) (YouTube動画の検索)
get_transcript(video_id) (動画の文字情報取得)
summarize_text(text_to_summarize: str, max_chars: int) (テキストの要約)
これらをインポートして呼出し、キーワードで動画を検索し、その中から選択した動画の要約をMarkdownファイルとして保存したい。
動画の検索件数は10件としてください。
要約後の文字数は1000文字としてください。
操作イメージは以下となります。
👤 (ユーザー) アプリ起動
👤 (ユーザー) 検索したいキーワードを入力
💻 (アプリ) search_youtube_videos関数を呼び出して検索した動画を番号付きで表示
👤 (ユーザー) 要約したい動画の番号を入力
💻 (アプリ) get_transcript関数を呼び出して文字情報を取得
💻 (アプリ) summarize_text関数を呼び出して文字情報を要約
💻 (アプリ) 結果を表示、Markdownファイル作成・表示
「main_app.py」というファイル名で作成してください。
全体の流れと各部分の解説もお願いします。

すると、コードを作成してくれました。

「Ctrl + S」キーを押して「main_app.py」というファイル名で保存しておきます。
※AIは学習状況やタイミングにもより、生成してくれるコードは異なります。

YouTube動画を検索し要約を表示するアプリのコード

アプリを動かしてみよう!

VS Code のメニューから「表示」>「ターミナル」を選択します。
または「Ctrl + @」キーを押します。

ターミナルで以下のコマンドを実行します。

python main_app.py

実行の例
検索したい動画のキーワードを入力、検索結果から要約したい動画の番号を選択する。

アプリが終了すると選択した動画のMarkdownファイルが作成される。

Markdownファイルを右クリックし「プレビューを開く」をクリックする。

動画の要約が見やすく表示されます。

興味が沸いたら動画のURLをクリックして視聴できます。

今回のコードのポイント

モジュールのインポート

    from youtube_search import search_youtube_videos
    from youtube_transcript import get_transcript
    from gemini_summarize import summarize_text

別のファイル(第2回、第3回で作ったコード)から関数をインポートして使えるようにしています。

ユーザー入出力

    # 1. 検索キーワードの入力
    query = input("検索したいキーワードを入力してください: ")

input()でユーザーの入力を受け付けます。

関数の呼び出し

        videos = search_youtube_videos(query, max_results=MAX_SEARCH_RESULTS)
        transcript = get_transcript(video_id)
        summary = summarize_text(transcript, max_chars=MAX_SUMMARY_CHARS)

インポートした関数を呼び出しています。

Markdownファイルの保存

    try:
        with open(output_filepath, "w", encoding="utf-8") as f:
            f.write(f"# {video_title} の要約\n\n")
            f.write(f"**動画URL:** https://www.youtube.com/watch?v={video_id}\n\n")
            f.write("---\n\n")
            f.write(summary)
        print(f"ファイルに保存しました: {output_filepath}") # 絶対パスで表示
    except IOError as e:
        print(f"ファイル保存中にエラーが発生しました: {e}")
    except Exception as e:
        print(f"予期せぬエラーが発生しました: {e}")

要約をMarkdownファイルとして保存します。

エラー発生時はエラーメッセージを表示します。

アプリの改良に向けて

完成したコードを実行し、指示に従って検索キーワードを入力、検索結果から動画番号を選ぶと要約が生成され、Markdownファイルとして保存される!

AIとの協力で、実際に動く1つの「アプリ」として形になりました!

この達成感は、プログラミングの何よりの醍醐味です!

アプリを使ってみる中で、「もっとこうしたいな」「ここが使いにくいな」といった改善点や、追加したい機能のアイデアがきっと浮かんでくるはずです。

それが、次の開発への原動力になります。

皆さんもぜひ改善点を考えてみてください。

改善点の例

  • 動画の要約を連続してできるようにする
  • 動画のサムネイルを表示する
  • 再生回数や高評価の数などの情報を表示する
  • ユーザーインターフェースをもっと見栄えの良いものにする
  • スマホアプリで実行できるようにする
  • コードの中で同じような処理が重複しているので整理する(リファクタリング)

などなど。

以下は、AIと相談して、もう少し使いやすいWebアプリにしてみた場合の例です。

API使用状況の確認

今回は、YouTube Data API 、Gemini API のAPIキーを作成してアプリを開発しました。

でも、APIをどれだけ使ってよいのか気になるかと思います。

APIの使用状況はGoogle Cloud Consoleで確認できます。

左上のナビゲーションメニューをクリックします。

「APIとサービス」をクリック。

確認したいAPIをクリック。

「割り当てとシステム上限」をクリック

現在の使用量が表示されます。

どちらのAPIも、個人でつかうだけなら十分な使用量がありますね。

終わりに

【YouTube要約アプリ開発】シリーズ、最後までお付き合いいただき、そしてアプリを完成させていただき、本当にありがとうございました!

APIというインターネット世界の窓口と、Geminiという賢いAIを、あなたのプログラムを通して自在に操れるようになった今、あなたの創造力こそが、どんな素晴らしいものを作り出せるかの可能性そのものです。

今回は YouTube Data APIGemini API を組み合わせてアプリを作りましたが、これはいろいろと応用がきくのではないでしょうか。

Gemini API の機能は、今回のように要約はもちろんのこと、翻訳文章作成など、とても広範囲にわたります。

Gemini API を活用することで、これまでにない革新的なアプリを生み出す可能性が広がったと言えるでしょう。

皆さんも、思いついたアイデアを気軽に試せる環境が整っていますので、ぜひ開発に挑戦してみてください。

コメント

タイトルとURLをコピーしました