n8nで複数RSSを一括取得!ラクに情報を集めよう

AI

気になってブックマークしていた複数のサイト、最初はチェックしてたけど最近はサボりがち…
そんな経験、ありませんか?
至るところに情報が流れていて、量が膨大すぎて情報の海に溺れていくような感覚を味わう方は多いと思います。(よくあなぐまは頭が痛くなります)

ここではそんな情報収集をラクにするため、n8nを使って複数のRSSを巡回し、AIが内容を要約した上で、Notionにデータベースとして保管していく方法をご紹介します。
一度動かしてしまえば、後は放置するだけで情報が集まります。
取捨選択も簡単になるので、情報収集に使っていた時間を別のことに使っちゃいましょう!

こんな方におすすめです

  • n8nの環境を構築済みで、ワークフロー作成を試したいと思っている方
  • 日々トレンド等の最新情報を追っていくのが面倒臭い、忘れがちで続かない方
  • 一つのフローで複数の引用元から情報収集したいと考えている方

ワークフローの全体像

ワークフローの全体像は下記のようになっています。
ループ処理が2つもあるのでちょっと長いですね💦

大まかな流れは「記事を収集→内容を整形→重複を除外→要約→保存」の5段階になっています。

  1. RSSソース一覧を定義し、毎日決まった時間に起動
  2. 各RSSの情報を順番に取得後、データを整える
  3. 記事URLから重複記事を除外(これまでの処理+現在の処理)
  4. 1件ずつAI(Gemini)に内容を要約してもらう
  5. Notionに保存

主なポイントは3つです。

  • 複数のRSSを一度のフローでまとめて取得できる!
  • 重複を除外することで「これ前に見たことあるような…」がなくなる!
  • AIに要約してもらった上で、出力形式を固定することで安定したデータ保持が可能になる!

次のセクションで順番に説明していきますね。

フローの主要ポイント

1.RSSソースをCodeノードで一元管理

使用ノード

  1. Code
  2. Loop Over the Items
  3. RSS Read
  4. Edit Fields

解説

RSSソースごとにフローを作ったりノードを増やすのではなく、
「Code」ノードにソース一覧を記載し、順番に読み込むことでシンプルにしています。
「RSS read」でRSSでソースを読み込んだ後、どのRSSソースから取得したものか分かるよう、
「Edit Fields」で情報を追加しています。

「code」ノードの中身は以下のようになっています。

const sources = [
  {
    "url": "https://qiita.com/tags/%E7%94%9F%E6%88%90ai/feed.atom",
    "sourceTag": "Qiita",
    "category": "開発/AI",
    "enabled": true
  },
  {
    "url": "https://zenn.dev/topics/llm/feed",
    "sourceTag": "Zenn",
    "category": "開発/AI",
    "enabled": true
  }
  ];

各項目の意味は以下です。
ソースを追加したいときはこの4項目を追加してあげるだけでOKです。
また、暫く使わないけどRSSソースの情報は置いときたい場合には、
enabled: false にすれば一時的に取得対象外にすることもできます。

urlRSSソースのURL
sourceTagRSS取得元を判別するためのタグ
(適当につけてね)
categoryカテゴリ
(Notionにまとめた後カテゴリ分けしています)
enabledRSS取得する対象か否か

ちなみに「Edit Fields」の中身は以下のようになっています。
Include Other Input FieldsのトグルをONにするのを忘れないようご注意ください。

2.重複記事の除外

使用ノード

  • Remove Duplicates ×2

解説

単純なんだけど結構悩まされる、重複記事の除外です。
今回は以下の2段構えにしています。

1段目(現在):1回の実行時の中で重複記事があった場合除外

2段目(過去):前回までのフロー実行時で既に記録したことがある記事を除外

RSSを取得していると、結構同じ記事が引っかかってきます。
後でNotion等で見る時に邪魔なのもあるんですが、AIに記事を要約してもらうときに重複内容があるとAPI制限にも引っかかりやすくなって大変勿体ないんですよね…
なお、あまりないと思いますが、同一実行時に重複記事があった場合にも除外できるよう、
2段構えで重複記事を除外するようにしています。

具体的な設定内容はこんな感じです。
dedupKeyにはsourceTagとURLを結合させた文字列が入っています。
(同じ記事が別のRSSソースから来た場合は別記事としての扱い)

3.AIによる記事内容要約

使用ノード

  1. Basic LLM Chain
  2. Google Gemini Chat Model(model: gemini-2.5-flash)
  3. Structured Output Parser

解説

ここではAIに記事を要約してもらっています。
流れはn8nで情報を取得する際に他記事でもよく見るものと思いますが、
ポイントは出力形式を固定させるために「Structured Output Parser」を使用している点です。

設定自体は簡単ですが以下の様に出力を固定しています。

{
  "subject": "記事の件名(30文字以内)",
  "summary": "要約(200文字程度)"
}

これによって後でNotionに記録するために項目のマッピングを行っています(Codeノード)が、
記事タイトルと要約をちゃんと参照できるようにしています。
「Basic LLM Chain」のプロンプト上でも出力は指定フォーマットに従ってくださいと明示することで、形式ブレを抑えています。


なお、本セクションの本筋とはそれますが、本フローでは一件ずつ記事をGeminiに流し込んで要約してもらっています。
APIレート制限に引っかからないように「Wait」ノードを使用している(20秒待機)ので処理にはある程度時間がかかるのですが、出力形式の安定を重視している形です。

各ノードの全体説明

ここでは本フロー内で使用している各ノードの名前や役割を一覧で記載しています。
全部細かく載せていると量が膨大になってしまうので、こちらがもし参考になればと思います。
(希望があればフローのもう少し詳細な点を追記したいと思います。)

標準ノード名フロー内の表示名何をする?フロー内での役割
Schedule TriggerSchedule Trigger指定した時刻や間隔でワークフローを自動実行するトリガー定期実行用の開始トリガー
CodeCode – RSS Source ListJavaScriptでデータを加工・生成するRSSのURL、取得元名、カテゴリを一覧で読み込ませる
Loop Over Items
(Split in Batches)
Loop Over Items – RSS Sources複数の入力データを順番に処理する複数のRSSソースを順番にRSS Readへ渡す
RSS ReadRSS ReadRSSから記事を取得する各RSSフィードから記事タイトル、URL、本文などを取得する
Edit Fields (Set)Edit Fields – Add Source取得元の情報を追加する各記事に追加情報(取得元やタグ付け)を付与する
CodeCode – Normalize For NotionJavaScriptでデータを加工・生成するRSSごとに違う項目名や本文形式を、共通の形式にそろえる
Remove DuplicatesRemove Duplicates – Current Input重複を除外する同じ実行の中で重複した記事を除外する
Remove DuplicatesRemove Duplicates – Previous Executions重複を除外する前回以前に処理済みの記事を再登録しないようにする
Loop Over Items
(Split in Batches)
Loop Over Items – Gemini Rate Limit複数の入力データを順番に処理する記事を一件ずつループ処理する
(記事内容要約→記録)
Basic LLM ChainBasic LLM Chain – Summarize RSSAIに何らかの処理を実施してもらう記事本文を元に、件名と要約を生成する
Google Gemini Chat ModelGoogle Gemini Chat Model – RSS SummaryGeminiモデルを指定するBasic LLM Chain が利用するGeminiモデルを接続する
Structured Output ParserStructured Output Parser – Subject SummaryAIの出力形式を固定するsubject と summary のJSON形式で受け取る
MergeMerge – Original + AI複数のデータを結合する元の記事情報とGeminiの要約結果を1つにまとめる
CodeCode – Final Map For NotionJavaScriptでデータを加工・生成するNotionの各プロパティに合う値に変換する
NotionNotion – Create PageNotionへ保存するまとめた記事情報
(記事タイトル、取得元、URL、要約)をNotionデータベースへ追加する
WaitWait – 20 Seconds処理を一定時間停止させるGeminiへの連続リクエストを抑え、レート制限を避けやすくする

使ってみての感想・注意点

実際に使ってみてNotionに記録していった結果はこんな感じになります。

暫く使用していますが、Notionに記事がどんどん溜まっていくのは思ったよりも快適です。
今までとりあえずGmailに流すか…と処理していたら、メールボックスが埋もれてしまったり、前見た記事どこだっけ…と迷子になっていたので、これでかなり整理できました。
また、AIの要約があることで英語記事の内容がさっと分かったり、自分が気になる情報をより早く見つけられるので、情報の収集・取捨選択が随分楽になりますね。

注意点としては、記事を1件ずつ処理している以上、取得する記事の件数が多いと、Waitノードで間隔を空けていてもGemini APIのレート制限に引っかかることがあります。
その場合はWaitの秒数を増やすか、RSSソースごとの取得件数をLimitノード等で絞る方法が有効かと思います。
こちらはまた改善できたら追記したいと思います。

おわりに

情報過多な現代、手を動かして情報を色々追いかけていくとそれだけで時間は非常に溶けていきますので、情報の取捨選択は更に重要度を増していると感じます。
このフローで情報収集〜記録までを一括して自動化できますので、興味ある方は是非試してみてください。
毎日の情報サーチに疲れている方やn8nのフローに興味のある方に少しでも参考になれば幸いです。

コメント

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