问答

B站有新视频提到我们产品时,怎么及时知道?

简短回答

每隔一两个小时用 B站视频搜索按 sort=latest 搜一次,记下已经见过的 BV 号,只把新出现的推给自己。每次检查是一次调用,$0.002,覆盖最新的约 20 个视频。一个关键词每两小时查一次,一个月 $0.72。

你们做笔记软件,一位中腰部 UP 主刚发了测评,说同步功能有问题。你希望当天下午就知道,趁评论区风向还没定,官方回复一句可能就把口碑扳回来。做法很简单:一个小任务每两小时按最新排序搜一次产品名,有新视频就通知你。

思路

B站视频搜索加上 sort=latest,返回匹配关键词的最新视频,每页约 20 个。本地存一份见过的 BV 号,每次跑的时候,不在名单里的就是新视频,推到群里或邮箱,然后加进名单。第一页全是新的,就再翻一页;有见过的就停。

提醒一来,用 B站视频评论看看观众在说什么,每页 $0.002。

一个月花多少

配置 每月调用 费用
1 个关键词,每 2 小时一次 360 $0.72
3 个关键词,每小时一次 2,160 $4.32
3 个关键词每小时一次,再看 30 个新视频的第一页评论 2,160 + 30 {{cost:bilibili.videos.search2160+bilibili.videos.comments.list30}}

监控脚本

import json, os, pathlib, requests

URL = "https://api.okdata.online/v1/bilibili/videos/search"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
KEYWORDS = ["你的产品名", "产品名 测评"]
SEEN = pathlib.Path("seen.json")

seen = set(json.loads(SEEN.read_text())) if SEEN.exists() else set()
new = []
for kw in KEYWORDS:
    cursor = None
    for _ in range(3):  # 每个关键词每次最多翻 3 页
        params = {"query": kw, "sort": "latest", **({"cursor": cursor} if cursor else {})}
        body = requests.get(URL, headers=H, params=params, timeout=60).json()
        if body["code"] != "ok":
            print(kw, body["code"])
            break
        fresh = [v for v in body["data"]["items"] if v["id"] not in seen]
        new += fresh
        seen.update(v["id"] for v in fresh)
        if len(fresh) < len(body["data"]["items"]) or not body["page"]["has_more"]:
            break
        cursor = body["page"]["next_cursor"]

for v in new:
    print(f"{v['author']['name']}:{v['title']}(播放 {v['metrics']['views']}){v['url']}")
SEEN.write_text(json.dumps(sorted(seen)))

把 print 换成飞书机器人或企业微信的 webhook 就能推到群里。第一次运行时所有结果都算新的,建议先不发提醒跑一遍,把 seen.json 填满。

要注意的地方

  • 新视频进 B 站搜索有延迟,所以提醒会比上传晚几分钟到几小时,做不到秒级。
  • 搜索匹配的是标题、标签和简介。UP 主只在视频里口播了你的名字,搜不到。
  • 产品名太短或太常见,噪音会很多。加一个限定词,或者推送前先过滤一遍标题。
  • 只能搜到公开视频。

别的办法

只盯一个关键词的话,在 B 站存一个按最新排序的搜索,每天早上点开看看,完全免费。开源的 RSSHub 有 B 站搜索的路由,自己部署后接进任何 RSS 阅读器也行。想把 B 站、微博、抖音上的提及放在一处看,参考口碑监测方案。

更新于