问答

没有企业版套餐,怎么监控推特上提到品牌的帖子?

简短回答

每 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 上保存一个搜索,手动刷新也不花钱。把同样的思路扩展到其他平台评论的做法,见口碑监测方案。

更新于