23
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

n8nでBBCニュースを自動翻訳・要約してDiscordに通知する仕組みを作ってみた

23
Posted at

はじめに

海外ニュースを追いたいけど、毎回英語の記事を読むのは少しハードルが高い。
そこで今回は、BBCのRSSをn8nで定期取得し、新着ニュースだけをAIで日本語要約してDiscordに投稿する仕組みを作ってみました。

やっていることはシンプルです。

  • BBC NewsのRSSを1時間ごとにチェック
  • すでに処理した記事は除外
  • AIで日本語に自然に翻訳&要約
  • Discordに自動通知

情報収集をかなり楽にできるので、英語ニュースのウォッチ用としてかなり便利です。

作ったもの

今回作ったワークフローは、以下の流れです。

  1. RSS Feed TriggerでBBC NewsのRSSを定期取得
  2. Remove Duplicatesで過去に処理済みの記事を除外
  3. Geminiで記事タイトル・本文を日本語で要約
  4. Discordに投稿

n8nだけで完結しつつ、AI要約までつなげられるので、かなり実用的でした。

全体構成

今回のワークフロー構成はこんな感じです。

RSS Feed Trigger
  ↓
Remove Duplicates
  ↓
翻訳&要約(Gemini)
  ↓
Discord送信

ポイントは、「新着だけ拾う」 と 「人が読みやすい日本語にする」 の2つです。

使用した主なノード

  • RSS Feed Trigger
  • Remove Duplicates
  • Google Gemini Chat Model
  • AI Agent
  • Discord

AIまわりは、n8nのLangChain系ノードを使っています。

仕組みの概要

1. BBCのRSSを定期取得する

まずは RSS Feed Trigger でBBC NewsのRSSを取得します。

今回使ったRSSは以下です。

http://feeds.bbci.co.uk/news/rss.xml

実行タイミングは everyHour にして、1時間ごとに新着を確認するようにしました。

これで、自分からニュースサイトを見に行かなくても、最新記事を自動で拾えます。

2. 同じ記事を何度も通知しないようにする

RSSは定期実行なので、そのままだと同じ記事を何度も処理する可能性があります。
そこで Remove Duplicates ノードを使って、以前の実行ですでに見た記事を除外します。

重複判定にはRSSの guid を使っています。
image.png

RSSの記事ごとに一意なIDとして guid が入っていることが多いので、これを使うとかなり安定します。

この一手間だけで、Discordが同じニュースで埋まるのを防げます。

3. AIで日本語に翻訳&要約する

取得したニュースは、そのままだと英語です。
そこでAIノードを使って、日本語で短く読みやすく要約させます。

今回のプロンプトは以下のようにしています。

Please read the following news article information and return the result in Japanese.

Requirements:
- Output in Japanese only
- First line: short headline-style summary
- Second line onward: 2 to 3 short bullet points
- Make the translation natural, not literal
- Keep names of people and organizations in the original language when appropriate
- If the content is unclear, say so briefly instead of making up details

Title: {{$json.title}}
Published: {{$json.pubDate}}
Content: {{$json.contentSnippet || $json.content || ""}}

このプロンプトのポイントは以下です。

  • 日本語だけで返す
  • 1行目は見出し風
  • 2行目以降は箇条書き
  • 直訳ではなく自然な日本語にする
  • 不明な内容を無理に補完させない

特に最後の
内容が不明なら作り込まずにそう書く
という指示は大事で、ニュース要約に影響します。

4. Discordに通知する

最後に、整形された要約結果をDiscordへ送信します。

投稿内容は以下のような形にしています。

image.png

本文の下に guid を添えているので、必要であれば後から記事の識別にも使えます。

Discordに投げることで、

  • 自分用のニュース通知チャンネルを作れる
  • サーバー内でニュース共有できる
  • スマホでもすぐ確認できる

というメリットがあります。

実際の出力例

たとえばこんな形式でDiscordに流れます。
image.png

英語記事をそのまま貼るより、かなり読みやすくなります。

この構成のよかった点

新着だけ処理できる

Remove Duplicates を挟んでいるので、同じニュースの再通知を防げるのが大きいです。
ニュース配信系ではかなり重要なポイントでした。

日本語要約で読む負担が減る

BBCなどの海外ニュースは情報量が多いですが、
AIで短くしてDiscordに飛ばすだけで、ざっと流し読みしやすくなります。

n8nだけで完結しやすい

ニュース取得、重複排除、AI要約、通知まで全部n8nの中でつながるので、
メンテナンスしやすい構成になりました。

実装時の注意点

1. RSSの本文が短いことがある

RSSによっては contentSnippet が短かったり、本文がほとんど入っていない場合があります。
その場合、AIが十分に要約できないことがあります。

今回のように、

{{$json.contentSnippet || $json.content || ""}}

としておくと、多少取りこぼしを減らせます。

ただし、RSSだけでは詳細情報が足りないケースもあるので、必要に応じて記事URLへアクセスして本文を取得する構成も検討できます。

2. AIの出力形式はなるべく固定する

Discord通知に使うので、出力形式が毎回バラバラだと読みにくくなります。
プロンプトで、

  • 1行目は見出し
  • 2〜3個の箇条書き
  • 日本語のみ

のように形式を固定しておくのがおすすめです。

3. エラーでも全体を止めない設計は便利

今回の 翻訳&要約 ノードでは onError: continueErrorOutput になっています。
これにより、AI要約で一部失敗しても、ワークフロー全体が止まりにくくなります。

ニュース配信のような定期処理では、
1件の失敗で全停止しない設計 が大事です。

改善案

今回の構成でも十分使えますが、さらに育てるなら以下もよさそうです。

記事URLも一緒にDiscordへ送る

今は要約中心ですが、元記事URLも添えると、気になったニュースをすぐ読みに行けます。

カテゴリ別に投稿先を分ける

たとえば、

政治
テック
ビジネス
国際

などでチャンネルを分けると、より見やすくできます。

要約結果をGoogle SheetsやNotionに保存する

Discord通知だけでなく、後から振り返れるようにデータベース化しておくのも便利です。

重要度でフィルタする

AIに「重要そうなニュースだけ送る」判定をさせれば、通知量を減らせます。

まとめ

今回は、n8nを使って

  • BBCニュースを定期取得
  • 重複除外
  • AIで日本語要約
  • Discord通知

までを自動化してみました。

海外ニュースは気になるけど、毎回ちゃんと読むのは大変です。
そんなときに、まず日本語でざっと把握できる仕組みがあるとかなり楽になります。
また、カテゴリや重要度の絞り込みができればさらに使い勝手がよくなると思います。

n8nはこういう「ちょっと便利」を作るのに本当に相性がいいので、
ニュース収集を自動化したい人はぜひ試してみてください。

23
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?