RSSフィードをAIエージェントに接続する方法
RSSとAIエージェントの組み合わせが機能する理由
ウェブを読み取るAIエージェントは、多くの場合ページのスクレイピングから始めます。つまり、HTMLの解析、JavaScriptのレンダリング、レート制限やCAPTCHAへの対処、そしてサイトのレイアウトが変わるたびにページセレクターを修正する作業が必要になります。
SereneReaderはRSSフィードを取得・解析し、記事を構造化データとして保存します。APIはそのデータをJSONとして返すため、エージェントはウェブページではなく、タイトル・リンク・著者・日付・概要を扱うことができます。
構造化されたJSON。 エージェントはRSSやXMLを処理する必要がありません。SereneReaderがすでにフィードを解析し、HTMLエンティティをデコードし、二重エンコードされたコンテンツを修正し、エンコードの問題を正規化しているため、エージェントはAPIに問い合わせるだけで構造化されたJSONを受け取れます。
自分で選んだソース。 フィードはご自身で選ぶため、エージェントは選択したソースだけを参照します。
スクレイピング不要。 エージェントはSereneReader APIを呼び出すだけで、ソースとなるウェブサイトに直接アクセスしません。そのため、robots.txtのルールやボット対策は関係ありません。
日付によるフィルタリング。 結果は新しい順に返され、指定した日時以降に公開された記事だけを取得できます。フィードによっては記事の公開が遅れたり、古い日付が付いていたりすることがあります。記事を見逃したり重複処理したりしないようにするには、処理済みの記事IDをエージェント側で管理してください。
OpenClawとの連携方法
2026年10月時点で、OpenClawはご自身のコンピューター上で動作するオープンソースのAIアシスタントです。WhatsApp、Telegram、Discordなどのチャットアプリを通じて操作でき、外部APIを呼び出すスキルを追加して機能を拡張できます。SereneReaderと接続するには:
- SereneReaderの設定 > APIでAPIキーを作成します(ProプランおよびTeamプランで利用可能)。
- SereneReader API用のスキルを追加します。設定のAPIタブには、スキルに必要なエンドポイント・パラメーター・リクエスト例が記載されています。
- アシスタントにタスクを与えます。例:「毎朝RSSフィードを確認し、インフラセキュリティに関連する記事をまとめて、Obsidianのボールトに要約を保存する。」
スケジューリング・フィルタリング・要約はアシスタントが担当し、フィードの取得と記事の保存はSereneReaderが担当します。
エージェントプロンプトの例
エージェントへの指示は、おおよそ次のような形になります:
SereneReader APIにアクセスできます。毎日午前8時に、過去24時間に公開された記事を取得してください。各記事について、サイバーセキュリティ・インフラ・DevOpsに関連するかどうかを判断し、該当する場合は日次サマリーに追加してください。サマリーをObsidianボールトの「Daily Digests」フォルダに新しいノートとして保存してください。
エージェントはAPIを呼び出し、結果を処理してノートを保存します。エージェントプラットフォームがスケジュール実行に対応している場合、コードを書く必要はありません。対応していない場合は、後述のスクリプトがcronを使って同じ処理を行います。
活用例
ニュースモニタリングエージェント
SereneReaderで20〜30件の業界フィードを購読し、自社・競合他社・特定のトピックへの言及をスキャンするエージェントを接続します。各フィードを自分で確認する代わりに、日次のブリーフィングを受け取れます。
リサーチダイジェスト
学術プレプリントのフィード(arXiv、bioRxiv)や技術ブログをフォローし、新しい論文をトピック別に分類するエージェントを設定します。現在のプロジェクトに関連するものにフラグを立て、週次の読書リストとしてまとめることができます。
コンテンツパイプライン
自分のニッチなフィードを購読し、トレンドのトピックを特定してキーポイントを抽出し、コンテンツブリーフの下書きを作成するエージェントを活用します。コンテンツの執筆は自分で行いますが、リサーチの最初のステップはエージェントが担います。
競合インテリジェンス
競合他社のブログ・更新履歴フィード・プレスリリースを追跡します。エージェントが製品リリース・価格変更・機能発表を検知し、構造化された形式でログに記録します。
他のLLMツールとの連携
SereneReader APIはHTTP経由で標準的なJSONを返すため、認証済みAPIリクエストを送れるツールであればどれでも利用できます:
- OpenClaw — タスクを実行するアシスタント
- LangChain / LlamaIndex — 検索拡張生成(RAG)
- カスタムスクリプト — OpenRouter経由で任意のLLM APIを利用(後述の例を参照)
- Zapier / Make — AIステップを含むノーコード自動化
- n8n — セルフホスト型のワークフロー自動化
基本的なパターンはいつも同じです:SereneReaderから記事を取得し、LLMに渡して、出力を必要な場所に送ります。
例:OpenRouterを使った日次ダイジェストスクリプト
SereneReaderから過去24時間の記事を取得し、OpenRouter経由で選んだモデルを使って要約し、結果をローカルファイルに書き出すNode.jsスクリプトです。SERENE_API_URLには記事エンドポイントのフルURL(設定のAPIタブに記載されているベースURLに/api/v1/articlesを付けたもの)を、OPENROUTER_MODELにはOpenRouterのモデルID(例:OpenRouterのモデル一覧にあるClaudeモデル)を設定してください。node digest.mjsで実行するか、cronでスケジュール実行できます。
このスクリプトは1ページ分の結果を読み取り、APIはデフォルトで1ページあたり50件の記事を返します。1日にそれ以上の記事が公開される場合は、limitパラメーター(最大200)を指定するか、offsetを使ってページングしてください。
// digest.mjs
// Requires: SERENE_API_KEY, SERENE_API_URL, and OPENROUTER_API_KEY env vars.
// Your API settings page in SereneReader has the base URL and endpoint paths.
const SERENE_API_KEY = process.env.SERENE_API_KEY;
const SERENE_API_URL = process.env.SERENE_API_URL; // from your API settings page
const OPENROUTER_API_KEY = process.env.OPENROUTER_API_KEY;
import { writeFileSync } from "node:fs";
// 1. Fetch yesterday's articles from SereneReader
const yesterday = new Date(Date.now() - 86400000).toISOString();
const res = await fetch(`${SERENE_API_URL}?since=${yesterday}`, {
headers: { Authorization: `Bearer ${SERENE_API_KEY}` },
});
if (!res.ok) {
console.error(`SereneReader API error: ${res.status}`);
process.exit(1);
}
const { articles } = await res.json();
if (articles.length === 0) {
console.log("No new articles since yesterday.");
process.exit(0);
}
// 2. Build a prompt from article titles and snippets
const articleList = articles
.map((a) => `- ${a.title} (${a.feedName})\n ${a.snippet}`)
.join("\n\n");
const prompt = [
`Here are ${articles.length} articles from my RSS feeds`,
`published in the last 24 hours:\n\n${articleList}\n\n`,
`Write a concise daily digest. Group related articles`,
`by topic. For each topic, summarize the key points in`,
`2-3 sentences. Include the article titles so I know`,
`which ones to read in full.`,
].join(" ");
// 3. Send to any model via OpenRouter
const llmRes = await fetch("https://openrouter.ai/api/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${OPENROUTER_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: process.env.OPENROUTER_MODEL, // set to the model ID you want from openrouter.ai/models
messages: [{ role: "user", content: prompt }],
}),
});
if (!llmRes.ok) {
console.error(`OpenRouter API error: ${llmRes.status}`);
process.exit(1);
}
const { choices } = await llmRes.json();
const summary = choices[0].message.content;
// 4. Write the digest to a local markdown file
const date = new Date().toISOString().split("T")[0];
const output = `# Daily Digest - ${date}\n\n${summary}\n`;
writeFileSync(`digest-${date}.md`, output);
console.log(`Digest written to digest-${date}.md (${articles.length} articles)`);このスクリプトは依存パッケージもビルドステップも不要です。モデルを変更したり、プロンプトを書き換えたり、出力先をファイルではなくObsidian・Notion・Slackに変更したりできます。
はじめに
APIアクセスはPro(ウェブで月額$5)およびTeamプランに含まれています。
- まだの場合はSereneReaderに登録してください。
- エージェントに読み取らせたいフィードを購読します。
- 設定 > APIでAPIキーを作成します。
- SereneReader APIを呼び出すようにエージェントを設定します。
設定のAPIタブには完全なエンドポイントリファレンスが記載されています。APIそのものについて詳しくは、SereneReader APIを使った自動化の構築をご覧ください。