RSSフィードをAIエージェントに接続する方法
RSSとAIエージェントの組み合わせが有効な理由
ウェブを読む必要があるAIエージェントの多くは、ページのスクレイピングから始めます。そうなると、HTMLのパース、JavaScriptのレンダリング、レート制限、CAPTCHA、サイトがリデザインされるたびに変わるレイアウトへの対処が必要になります。
SereneReaderはすでに困難な作業を担っています。RSSフィードを取得し、XMLを解析し、すべてをクリーンで構造化されたデータとして保存します。APIはそのデータをJSONとしてエージェントに提供します。スクレイピング不要、パース不要、壊れやすいページセレクター不要です。
クリーンなJSON、生のフィードではなく。 エージェントはRSSやXMLに触れることはありません。SereneReaderがすでにフィードを取り込み、HTMLエンティティをデコードし、二重エンコードされたコンテンツを修正し、生のフィードデータを乱雑にするエンコードの癖をすべて正規化しています。エージェントはAPIをクエリするだけで、クリーンで構造化されたJSONを受け取れます。
人の手で選んだソース。 フィードを選ぶのはあなたです。エージェントが何にアクセスできるかを決めるのもあなたです。一般的なウェブクロールではなく、あなたがコントロールする、目的を絞った情報ストリームです。
スクレイピングなし、ブロックなし。 エージェントはソースのウェブサイトではなく、SereneReader APIと通信します。robots.txtの問題なし、ボット対策なし、法的なグレーゾーンなしです。
時系列で重複なし。 記事は順番に、一度だけ届きます。公開日でフィルタリングすれば、エージェントはすでに確認済みのものを追跡する必要がありません。
OpenClawとの連携方法
OpenClawは、エージェントが外部APIをツールとして呼び出せるAIエージェントプラットフォームです。SereneReaderと接続するには:
- SereneReaderの設定でAPIキーを生成します。
- OpenClawエージェントの設定でSereneReader APIをツールとして定義します。設定ページのエンドポイントドキュメントに、エージェントが呼び出すべき内容が正確に記載されています。
- エージェントにタスクを与えます。 たとえば「毎朝RSSフィードを確認し、インフラセキュリティに関連するものをまとめ、要約をObsidianのVaultに保存する」といった内容です。
スケジューリング、フィルタリング、要約はエージェントが担当します。フィードの取得と記事の保存はSereneReaderが担当します。
エージェントプロンプトの例
エージェントへの指示はおおよそ次のようになります:
SereneReader APIにアクセスできます。毎日午前8時に、過去24時間に公開された記事を取得してください。各記事について、サイバーセキュリティ、インフラ、またはDevOpsに関連するかどうかを判断してください。該当する場合は、日次サマリーに追加してください。サマリーをDaily DigestsフォルダのObsidian Vaultに新しいノートとして保存してください。
エージェントは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から前日の記事を取得し、OpenRouter経由で任意のLLMを使って要約し、結果をローカルファイルに書き出すNode.jsスクリプトです。node digest.mjsで実行するか、cronでスケジュール設定してください。
// 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: "anthropic/claude-sonnet-4",
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)`);依存関係なし、ビルドステップなし。2つのAPIキーと1つのファイルで、日次リサーチダイジェストが完成します。モデルを変更したり、プロンプトを調整したり、出力をObsidian、Notion、またはSlackに送ることもできます。
はじめる
APIアクセスはProプラン(月額5ドル)に含まれています。多くの競合リーダーのように、エンタープライズティアや最上位プランの後ろに隠されていません。
- まだの場合はSereneReaderにサインアップしてください。
- エージェントにアクセスさせたいフィードを購読します。
- 設定でAPIキーを生成します。
- SereneReader APIを呼び出すようにエージェントを設定します。
エンドポイントの完全なドキュメントはアカウント設定内にあります。API自体の詳細については、SereneReader APIを使った自動化の構築をお読みください。