← Back to blog

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と接続するには:

  1. SereneReaderの設定 > APIでAPIキーを作成します(ProプランおよびTeamプランで利用可能)。
  2. SereneReader API用のスキルを追加します。設定のAPIタブには、スキルに必要なエンドポイント・パラメーター・リクエスト例が記載されています。
  3. アシスタントにタスクを与えます。例:「毎朝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プランに含まれています。

  1. まだの場合はSereneReaderに登録してください。
  2. エージェントに読み取らせたいフィードを購読します。
  3. 設定 > APIでAPIキーを作成します。
  4. SereneReader APIを呼び出すようにエージェントを設定します。

設定のAPIタブには完全なエンドポイントリファレンスが記載されています。APIそのものについて詳しくは、SereneReader APIを使った自動化の構築をご覧ください。

SereneReaderでフィードを読む

同じアカウントでブラウザーとiPhone・iPad・Mac・Apple Watchで利用できます。無料プランはフィード150件まで対応、クレジットカード不要です。

読み始めるアプリを入手
← Back to blog