Reddit 是您的用户在没有营销过滤的情况下谈论您的地方。本教程构建一个品牌提及跟踪器,记录包含您的品牌名称的每个帖子,并将其写入可加载到 BI 工具中的 CSV。它是企业社交聆听套件的轻量级替代品,每次运行需要 2 个学分。
前置条件
- Python 3.8+
- 请求库
- Scavio API 密钥
- 品牌关键词列表(产品名称、拼写错误、句柄)
操作指南
步骤 1: 定义要跟踪的关键字
包括常见的拼写错误和产品名称。每个关键字都是一个搜索请求。
Python
KEYWORDS = ["scavio", "scavio api", "scavio.dev"]步骤 2: 获取每个关键字的帖子
循环关键字,按新内容排序,并将帖子收集到一个列表中。
Python
import os, requests
KEY = os.environ["SCAVIO_API_KEY"]
def search(q):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {KEY}"},
json={"query": q, "sort": "new"},
timeout=30,
)
return r.json()["data"]["posts"]
posts = []
for k in KEYWORDS:
posts.extend(search(k))步骤 3: 写入 CSV
每个帖子一行包含您想要随时间变化趋势的字段。
Python
import csv
with open("brand_mentions.csv", "w", newline="") as f:
w = csv.writer(f)
w.writerow(["id", "subreddit", "author", "title", "timestamp", "url"])
for p in posts:
w.writerow([p["id"], p["subreddit"], p["author"], p["title"], p["timestamp"], p["url"]])步骤 4: 安排它
在 cron 或 GitHub Actions 上运行脚本。随着时间的推移附加到相同的 CSV 以构建趋势数据集。
Bash
# crontab -e
# 0 * * * * /usr/bin/python3 /path/to/track_reddit.py >> /var/log/track_reddit.log 2>&1Python 示例
Python
import os, csv, requests, pathlib
KEY = os.environ["SCAVIO_API_KEY"]
KEYWORDS = ["scavio", "scavio api"]
OUT = pathlib.Path("brand_mentions.csv")
def search(q):
r = requests.post(
"https://api.scavio.dev/api/v1/reddit/search",
headers={"Authorization": f"Bearer {KEY}"},
json={"query": q, "sort": "new"},
timeout=30,
)
r.raise_for_status()
return r.json()["data"]["posts"]
def main():
rows = []
for k in KEYWORDS:
for p in search(k):
rows.append([p["id"], p["subreddit"], p["author"], p["title"], p["timestamp"], p["url"], k])
new_file = not OUT.exists()
with OUT.open("a", newline="") as f:
w = csv.writer(f)
if new_file:
w.writerow(["id", "subreddit", "author", "title", "timestamp", "url", "matched_keyword"])
w.writerows(rows)
print(f"wrote {len(rows)} rows")
if __name__ == "__main__":
main()JavaScript 示例
JavaScript
import fs from "node:fs";
const KEY = process.env.SCAVIO_API_KEY;
const KEYWORDS = ["scavio", "scavio api"];
const OUT = "brand_mentions.csv";
async function search(q) {
const r = await fetch("https://api.scavio.dev/api/v1/reddit/search", {
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query: q, sort: "new" }),
});
return (await r.json()).data.posts;
}
const rows = [];
for (const k of KEYWORDS) {
for (const p of await search(k)) {
rows.push([p.id, p.subreddit, p.author, p.title, p.timestamp, p.url, k]);
}
}
if (!fs.existsSync(OUT)) {
fs.writeFileSync(OUT, "id,subreddit,author,title,timestamp,url,matched_keyword\n");
}
fs.appendFileSync(OUT, rows.map((r) => r.map((v) => JSON.stringify(v)).join(",")).join("\n") + "\n");预期输出
JSON
wrote 12 rows
brand_mentions.csv:
id,subreddit,author,title,timestamp,url,matched_keyword
t3_1smxyz1,SaaS,marketer42,"Has anyone used scavio?",2026-04-16T09:12:00+0000,https://...,scavio
t3_1smxyz2,devtools,engineer7,"scavio vs serpapi review",2026-04-16T10:40:00+0000,https://...,scavio