OpenAI APIを用いたYouTube動画の要約とNotionへの保存

# 1. はじめに
この記事では、OpenAI APIを活用して、お気に入りのYouTubeのチャンネルの新着動画の字幕を自動で要約し、要約した結果をLINEで通知する仕組みを実現したので、実装の過程を連載記事として紹介していきます。

また、完成したスクリプトからChatGPTを用いてQiitaの記事を作成できるかについても、この記事を通して検証します。

# 2. モチベーションと実際作ったもの
"YouTube Summary with ChatGPT" や "ChatGPT for YouTube" のようなChromeのアドオンを使用すれば、YouTube動画の要約を生成することは可能です。
しかし、全ての新着動画を毎日一つずつ手作業で要約を生成するのは、非常に時間と手間がかかる作業でした。

そこで、要約したいチャンネルはある程度決まっていたので、そのチャンネルの新着動画だけを対象に、毎朝自動的に要約を生成し、要約した結果を通知してくれる仕組みがほしいと考え、実装しました。

(2023/07/15追記)　youtube_transcript_apiを使用した字幕情報の取得は、厳密には規約違反というご指摘をいただいたため、確認が取れるまでGithubのリポジトリを公開停止にします。
[Github URL]


これにより、お気に入りのYouTubeチャンネルの新着動画の要約を効率的にチェックできるようになりました。

**OpenAI APTでの要約結果**
[スティーブ・ジョブズのスピーチのYoutube動画](https://www.youtube.com/watch?v=UF8uR6Z6KLc)を要約した結果のサンプル
<details>
<summary>OpenAI　APIでの要約結果(クリックで展開)</summary>

# スティーブ・ジョブズの2005年のスタンフォード大学卒業式スピーチ
## 要約
スティーブ・ジョブズは、スタンフォード大学の卒業式でスピーチを行いました。彼は自身の人生から3つの物語を紹介しました。最初の物語は、人生のつながりについてであり、彼が大学を中退した経緯や、偶然の出会いが後に彼の人生に大きな影響を与えたことを語りました。2つ目の物語は、愛と喪失についてであり、彼がアップルを追われた経験や、その後の人生で新たな挑戦を始めることができたことを語りました。3つ目の物語は、死についてであり、彼ががんと診断された経験や、死を意識することが人生の選択において重要であることを語りました。彼は、自分の心と直感に従う勇気を持つことが重要であり、他人の意見に惑わされずに自分自身を信じることを強調しました。彼は、卒業生たちに「飢えている心を持ち続け、愚かさを忘れずにいてほしい」というメッセージを送りました。
## 章リスト
- つながりについて
- 愛と喪失について
- 死について
## つながりについて
### 事実
- スティーブ・ジョブズは大学を中退したが、後に大学の授業に興味を持ち、学び直すことができた。
- 彼が大学で学んだ書道の技術は、後にMacintoshコンピュータのデザインに活かされた。
### キーポイント
- 人生のつながりは、前方向ではなく後方向につながることがわかる。
- 自分の好奇心と直感に従うことが重要である。
## 愛と喪失について
### 事実
- スティーブ・ジョブズはアップルを追われたが、その後新たな挑戦を始めることができた。
- 彼がアップルで学んだ経験は、後にNeXTとPixarの設立につながった。
### キーポイント
- 失敗や挫折は新たな創造の機会となることがある。
- 自分が本当に愛することを見つけることが重要である。
## 死について
### 事実
- スティーブ・ジョブズはがんと診断されたが、手術によって回復した。
- 死を意識することは人生の大きな選択をするための重要なツールである。
### キーポイント
- 死は人生の変化のエージェントであり、自分自身を信じる勇気を持つことが重要である。
- 自分の心と直感に従うことが、本当になりたい自分になるための道を示してくれる。
## 要約
スティーブ・ジョブズは、スタンフォード大学の卒業式で、自身の人生から3つの物語を紹介しました。彼は、人生のつながりについて、愛と喪失について、そして死について語りました。彼は、自分の好奇心と直感に従うこと、自分が本当に愛することを見つけること、そして死を意識することの重要性を強調しました。彼は、卒業生たちに「飢えている心を持ち続け、愚かさを忘れずにいてほしい」というメッセージを送りました。
</details>


**Notionへの保存結果**
![スクリーンショット 2023-07-12 1.00.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141995/2c2224c7-4be5-daf7-4d1a-70230f0500c5.png)


**LINEへの通知内容**
タイトル、チャンネル名、動画へのURL、要約へのURLを通知してくれる。
<img width="400" alt="IMG_4205.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141995/0545e457-e7d5-8c0d-46d5-a960611822e1.png">

# 3. 制作の流れ
以下のステップで実現します：
1. YouTube Data APIを使用して指定したチャンネルの新着動画の一覧を取得する
2. それぞれのYouTube動画の字幕情報を取得する
3. OpenAI APIを使用して、字幕情報を要約し、適切なタグを生成する
4. Notion APIを使用して、要約とタグをNotionのページとして保存する
5. LINE Notifyを使用してNotionに保存した要約のリンクを通知する
6. GCPのCloud Functionsで毎朝実行する設定を行う

# 3. 使用したAPIの紹介
このスクリプトで使用したAPIを簡単に紹介します：

* [YouTube Data API](https://developers.google.com/youtube/v3/getting-started?hl=ja): YouTubeのデータをプログラム的に操作するためのGoogleの公式APIです。このAPIを使用すると、動画、プレイリスト、字幕などの情報を検索、取得、更新することができます。
* [OpenAI API](https://openai.com/blog/openai-api): OpenAIの強力な自然言語処理モデルGPT-3を使用するためのAPIです。このAPIを使用すると、テキスト生成、テキストの要約、意味の理解、感情分析など、多くのNLPタスクを実行することができます。
* [Notion API](https://developers.notion.com/): Notionのデータをプログラム的に操作するためのAPIです。このAPIを使用すると、ページを作成、更新、検索、削除することができます。
* [LINE Notify](https://notify-bot.line.me/ja/): LINE Notifyは、LINEのメッセージ送信機能をAPIとして提供するサービスです。これを使用すると、LINEのメッセージをプログラムから送信することができます。

## 4. 目次
※　連載記事として随時更新していきます。

### 第1回 YouTube Data APIを用いて指定したYoutubeチャンネルの新着動画一覧を取得する
YouTube Data APIを使用して特定のチャンネルから24時間以内に投稿された動画のIDのリストを取得します。
詳細な手順とコードの説明については、別の記事で詳しく説明します。

https://qiita.com/Shuto050505/items/18e2e63e0046de5c50fd

~~### 第2回 youtube_transcript_apiを用いてYouTubeの字幕を取得する~~
~~それぞれのYouTube動画の字幕情報を取得します。~~
~~詳細な手順とコードの説明については、別の記事で詳しく説明します。~~

### 第3回 OpenAI APIを用いてYouTube動画の字幕の要約とタグを生成する
OpenAIのGPT-3モデルを使用して、YouTube動画の字幕情報の要約とタグを生成します。
詳細な手順とコードの説明については、別の記事で詳しく説明します。

### 第4回 Notion APIを用いてNotionに要約結果をアップロードする
生成した要約とタグを、Notion APIを使用してNotionに保存します。
詳細な手順とコードの説明については、別の記事で詳しく説明します。

### 第5回 LINE Notifyを用いて動画と要約のURLを通知する
LINE Notifyを使用して動画と要約のURLを通知します。
これにより、Youtube動画の要約がNotionに保存されたことをLINEで知ることができます。
詳細な手順とコードの説明については、別の記事で詳しく説明します。

### 第6回 GCPのCloud Functionsを用いて毎朝定期実行する
Google Cloud PlatformのCloud Functionsを使用して毎朝定期実行します。
詳細な手順については、別の記事で詳しく説明します。

## まとめ
この記事では、OpenAIをYouTube動画の字幕を要約し、Notionに保存し、最後にLINEで通知するというスクリプトについて紹介していきます。
また、完成したPythonスクリプトからブログ記事の内容を生成できるかについても検証していきます。

## 次の記事
https://qiita.com/Shuto050505/items/18e2e63e0046de5c50fd