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는 본인 컴퓨터에서 실행되며 WhatsApp, Telegram, Discord 같은 채팅 앱을 통해 대화할 수 있는 오픈 소스 AI 어시스턴트입니다. 외부 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은 전체 articles 엔드포인트(설정의 API 탭에 있는 기본 URL 뒤에 /api/v1/articles를 붙인 것)로 설정하고, OPENROUTER_MODEL은 원하는 모델의 OpenRouter ID(예: OpenRouter 모델 목록에 있는 Claude 모델)로 설정하세요. node digest.mjs로 실행하거나 cron으로 스케줄을 설정할 수 있습니다.
이 스크립트는 결과 한 페이지를 읽으며, API는 기본적으로 페이지당 50개의 글을 반환합니다. 하루에 그보다 많은 글이 게시된다면 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로 자동화 구축하기를 참고하세요.