问答
品牌词上了微博热搜,怎么第一时间收到提醒?
简短回答
每 10 分钟拉一次微博热搜,把每个话题和你的品牌词表比对;一天 144 次,共 $0.288。命中后再对这个话题跑一次微博搜索(每页 $0.002),提醒里就不只有一个标题,还有正在推动话题的那几条微博。
公关最怕的剧本大概是这样:某饮品品牌的一条投诉晚上 11 点冲上微博热搜,团队第二天早上 9 点才从记者的电话里知道。一个每 10 分钟查一次榜单的小脚本,能把这段空白压缩到十分钟以内。品牌名、产品名或者老板的名字一上榜,值班的人就会收到一条消息,里面有排名、热度,以及这个话题下转发最多的五条微博。
用到两个接口
费用
| 方案 | 调用次数 | 费用 |
|---|---|---|
| 每 10 分钟查一次榜,一天 | 144 | $0.288 |
| 每 10 分钟查一次榜,30 天 | 4,320 | $8.64 |
| 30 天,其间命中 10 次、每次搜 2 页 | 4,320 + 20 | {{cost:weibo.trends.list4320+weibo.posts.search20}} |
提醒脚本
import json, os, requests
API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
WATCH = ["山野咖啡", "椰云拿铁", "shanye"] # 品牌、产品、昵称
SEEN = "alerted.json"
def call(path, **params):
r = requests.get(API + path, headers=H, params=params, timeout=30).json()
if r["code"] != "ok":
raise RuntimeError(f"{r['code']}: {r['message']}")
return r["data"]["items"]
seen = set(json.load(open(SEEN))) if os.path.exists(SEEN) else set()
for row in call("/v1/weibo/trends/list"):
hit = any(w.lower() in row["name"].lower() for w in WATCH)
if not hit or row["name"] in seen:
continue
posts = call("/v1/weibo/posts/search", query=row["name"], sort="hot",
fields="text,author.name,metrics.reposts")
print(f"#{row['rank']} {row['name']} heat={row['heat']}")
for p in posts[:5]:
print(" ", p["author"]["name"], p["metrics"]["reposts"], p["text"][:80])
seen.add(row["name"])
json.dump(sorted(seen), open(SEEN, "w"), ensure_ascii=False)
把 print 换成发往飞书、企业微信或 Slack 机器人的请求,再设成每 10 分钟跑一次就行。已经提醒过的话题记在文件里,不会反复轰炸。
它做不到的
- 跟你有关的话题,标题里不一定有你的名字,比如用地点加产品描述的门店事件。词表要放宽,同时对微博正文做关键词监控;热搜只是声量最大的那一层。
- 10 分钟一查,最坏会晚 10 分钟。改成 5 分钟费用翻倍,结果通常差别不大。
- 微博下面的评论不在接口目录里。提醒能告诉你什么上了榜、是谁起的头,评论区还得去微博上看。
- 榜单没有历史。脚本停了一段时间,就没法回头查那段时间漏了什么。
其他选择
商业舆情平台也有同样的预警,还带情感分析图表和客服,适合想要现成看板、完全不写代码的公司。新品发布当天,安排一个人一直盯着热搜页面,依然是反应最快的办法。完整的口碑监测思路见口碑监测方案。
更新于