品牌监控代理会监视 Reddit 上的关键字,并在出现新内容时告诉您。本教程展示了如何用大约 40 行 Python 代码构建一个:按计划搜索 Reddit,保留您看到的帖子 ID,并对新帖子发出警报。您可以将警报通道替换为 Slack、电子邮件或任何 Webhook。
前置条件
- Python 3.8 或更高版本
- 请求已安装库
- Scavio API 密钥
- 要监控的关键字(品牌名称、产品、竞争对手)
操作指南
步骤 1: 定义关键字和状态文件
保留一个包含您已经看到的帖子 ID 的小型 JSON 文件,这样重复运行就不会重新发出警报。
KEYWORD = "your brand name"
STATE_FILE = "reddit_seen.json"步骤 2: 获取新帖子
按新内容排序,偏向于最近的帖子。您还可以传递 subreddit 范围的查询,例如“r/startups yourbrand”。
import os, requests
resp = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}"},
json={"query": KEYWORD, "sort": "new"},
timeout=30,
)
posts = resp.json()["data"]["posts"]步骤 3: 与状态文件的差异
加载之前看到的帖子 ID,计算增量,并将新 ID 视为警报。
import json, pathlib
state = pathlib.Path(STATE_FILE)
seen = set(json.loads(state.read_text())) if state.exists() else set()
new_posts = [p for p in posts if p["id"] not in seen]
seen.update(p["id"] for p in posts)
state.write_text(json.dumps(list(seen)))步骤 4: 发出警报
这里我们只是打印,但您可以在这里发布到 Slack webhook 或排队到您的作业系统中。
for p in new_posts:
print(f"NEW mention: r/{p['subreddit']} -- {p['title']}")
print(f" {p['url']}")Python 示例
import os, json, pathlib, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
KEYWORD = os.environ.get("MONITOR_KEYWORD", "scavio")
STATE = pathlib.Path("reddit_seen.json")
def fetch(query: str):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"query": query, "sort": "new"},
timeout=30,
)
r.raise_for_status()
return r.json()["data"]["posts"]
def load_state():
if STATE.exists():
return set(json.loads(STATE.read_text()))
return set()
def save_state(ids):
STATE.write_text(json.dumps(list(ids)))
def main():
seen = load_state()
posts = fetch(KEYWORD)
new = [p for p in posts if p["id"] not in seen]
for p in new:
print(f"NEW r/{p['subreddit']}: {p['title']} ({p['url']})")
save_state(seen | {p["id"] for p in posts})
if __name__ == "__main__":
main()JavaScript 示例
import fs from "node:fs";
const API_KEY = process.env.SCAVIO_API_KEY;
const KEYWORD = process.env.MONITOR_KEYWORD ?? "scavio";
const STATE = "reddit_seen.json";
async function fetchPosts(query) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/search", {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query, sort: "new" }),
});
return (await r.json()).data.posts;
}
const seen = new Set(
fs.existsSync(STATE) ? JSON.parse(fs.readFileSync(STATE, "utf8")) : []
);
const posts = await fetchPosts(KEYWORD);
const fresh = posts.filter((p) => !seen.has(p.id));
for (const p of fresh) {
console.log(`NEW r/${p.subreddit}: ${p.title}`);
}
fs.writeFileSync(
STATE,
JSON.stringify([...seen, ...posts.map((p) => p.id)])
);预期输出
NEW r/SaaS: Has anyone used scavio for Reddit search?
https://www.reddit.com/r/SaaS/comments/1smxyz1/
NEW r/devtools: scavio vs serpapi for agent builders
https://www.reddit.com/r/devtools/comments/1smxyz2/