问答
没有企业版套餐,怎么监控推特上提到品牌的帖子?
简短回答
每 30 分钟用 X 帖子搜索按最新排序搜一次品牌名和账号名,一旦翻到之前见过的帖子就停止翻页。每页约 20 条,$0.006;每半小时查一次,一个月 1,440 次调用,平时一页就够的话共 $8.64。
一个护肤品牌希望有人在 X 上提到自己时,半小时内就能在飞书群里看到,好评、吐槽、可能合作的博主都不想错过。企业级舆情合同是给大团队准备的,小团队用定时搜索就够了:每 30 分钟让 X 帖子搜索返回提到品牌的最新帖子,挑出没见过的,推到群里。
先把查询写好
("glowlab" OR @glowlab OR #glowlab) -from:glowlab lang:en
品牌名、账号名和话题标签基本能覆盖大部分提及。-from: 去掉品牌自己发的帖子。常见的错拼可以用 OR 继续加。X 搜索框支持的语法这里都能用,先在 x.com 上试一下效果。
定时任务
import json, os, requests
API = "https://api.okdata.online/v1"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
QUERY = '("glowlab" OR @glowlab OR #glowlab) -from:glowlab lang:en'
SEEN = "seen.json"
seen = set(json.load(open(SEEN))) if os.path.exists(SEEN) else set()
new, cursor = [], None
for _ in range(5): # 每次最多翻 5 页
params = {"query": QUERY, "sort": "latest", **({"cursor": cursor} if cursor else {})}
body = requests.get(f"{API}/x/posts/search", headers=H, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']}")
fresh = [p for p in body["data"]["items"] if p["id"] not in seen]
new += fresh
if len(fresh) < len(body["data"]["items"]) or not body["page"]["has_more"]:
break # 已经翻到上一轮见过的帖子
cursor = body["page"]["next_cursor"]
for p in new:
print(p["url"], p["author"]["username"], p["author"]["followers"], p["text"][:100])
json.dump(sorted(seen | {p["id"] for p in new}), open(SEEN, "w"))
把 print 换成飞书或 Slack 的 Webhook 就能推送。新帖子按 author.followers 排一下序,粉丝多的人说的话排在最前面。
每月花多少
| 品牌声量 | 每次翻几页 | 每月次数 | 费用 |
|---|---|---|---|
| 小品牌,一页就够 | 1 | 1,440 | $8.64 |
| 讨论较多,约三页 | 3 | 1,440 | $25.92 |
| 小品牌,改成每小时一次 | 1 | 720 | $4.32 |
失败的那次不扣钱,循环里每次最多 5 页,最坏情况也有上限。
局限
- 按最新排序的搜索是高频扫描,不等于全量数据流,X 也会把一部分帖子从搜索结果里过滤掉。
- 受保护账号的帖子看不到。
- 只在图片或视频里出现、正文没写品牌名的提及会漏掉。
- 帖子是陌生人写的。交给模型做摘要时,要求它只把内容当数据,不要当指令。
什么时候换别的方案
X 官方的过滤流能实时推送匹配的帖子,按量付费下每条 0.005 美元,几分钟的延迟都不能接受时选它。舆情监测软件自带看板、情感分析和历史存档,适合不想写代码的团队。只盯几个关键词的话,在 x.com 上保存一个搜索,手动刷新也不花钱。把同样的思路扩展到其他平台评论的做法,见口碑监测方案。
更新于