公司动态

weibo-cli 实战:用命令行搭建微博自动化运营 Pipeline

📅 2026/7/30 15:44:11
weibo-cli 实战:用命令行搭建微博自动化运营 Pipeline
weibo-cli 实战用命令行搭建微博自动化运营 Pipeline环境Node.js 18 · weibo-ai/weibo-cli · macOS / Linux / Windows前一篇文章介绍了 weibo-cli 的具体用法。本篇就进入实战阶段如何把 weibo-cli 的各项能力组合起来搭建一条可定时运行、稳定输出结果的自动化 Pipeline。weibo-cli 目前支持的能力包括内容发布、评论与转发等互动操作、内容检索、热点趋势查询。本篇的所有示例均基于这些已开放能力。文中所有命令均为实际执行验证后的结果。涉及发布、回复等写操作的示例统一标注 [写操作]此类操作不可撤销执行前请确认数据无误。一、Pipeline 的基本结构一条典型的微博数据 Pipeline 由三个环节组成采集调用 weibo-cli 命令获取数据输出 JSON处理用 Python / Shell 对 JSON 做过滤、聚合、格式转换输出写入文件、发送通知、或触发下一步动作三个环节通过 Shell 管道|或临时文件串联。weibo-cli 的 --output json 参数保证输出格式固定适合作为管道数据源。输出格式说明参数值 适合场景table默认 终端直接查看人类可读json 脚本解析、管道传递、文件存储在脚本中始终显式指定 --output json保证后续处理逻辑的稳定性。二、场景一热点趋势监控注意search hot_word/biz 需要 Pro 或 Ultra 套餐。2.1 获取热搜列表weibo-cli 提供热点趋势查询能力可获取当前热搜数据weibo-cli search hot_word/biz --output json输出的 data 数组包含热搜词条字段包括 id排名、word热搜词、num热度值。weibo-cli search hot_word/biz --output json | python3 -c import sys, jsondata json.load(sys.stdin)[‘data’]for item in data:print(f{item[‘id’]}. {item[‘word’]} 热度:{item[‘num’]})2.2 关键词过滤weibo-cli search hot_word/biz --output json | python3 -c import sys, jsondata json.load(sys.stdin)[‘data’]keyword ‘AI’matches [x for x in data if keyword in x[‘word’]]for m in matches:print(m[‘word’], m[‘num’])2.3 定时执行将上述脚本保存为 monitor.sh加入 crontab 定时运行每小时执行一次0 * * * * /path/to/monitor.sh /var/log/monitor.log 21三、场景二内容检索与数据采集3.1 关键词搜索weibo-cli 支持按关键词检索微博内容weibo-cli search statuses/limited–q “目标关键词”–type 1–sort hot–count 20–output json result.json主要参数说明经 commands show 核验参数 必填 说明–q 是 检索关键词不能含 {、}、 等特殊字符–type 是 1微博 2评论 3私信–count 否 返回条数默认 10最大 20–sort 否 time时间倒序 hot热门度仅返回精选微博–page 否 页码默认为 1可用套餐Basic、Plus、Pro、Ultra3.2 多页采集单次最多返回 20 条需要更多数据时使用 --page 参数翻页#!/bin/bashcollect.sh 分页采集关键词搜索结果KEYWORD“目标关键词”for page in 1 2 3 4 5; doweibo-cli search statuses/limited–q “$KEYWORD”–type 1–sort hot–count 20–pageKaTeX parse error: Expected group after _ at position 33: …ut json page_̲{page}.jsonCOUNTKaTeX parse error: Expected group after _ at position 51: …load(open(page_̲{page}.json’))print(len(d.get(‘statuses’, []))))echo “第page页page 页page页COUNT 条”if [ “$COUNT” -eq “0” ]; thenecho “无更多数据停止”breakfisleep 1.5done注意相邻两次请求之间建议间隔 1 秒以上避免请求频率过高。3.3 结果合并与规范化import json, globall_statuses []for f in sorted(glob.glob(“page_*.json”)):data json.load(open(f))all_statuses.extend(data.get(“statuses”, []))normalized []for s in all_statuses:normalized.append({“id”: str(s.get(“id”, “”)),“text”: s.get(“text”, “”),“attitudes_count”: s.get(“attitudes_count”, 0),“comments_count”: s.get(“comments_count”, 0),“reposts_count”: s.get(“reposts_count”, 0),“user_name”: s.get(“user”, {}).get(“screen_name”, “”),“user_followers”: s.get(“user”, {}).get(“followers_count”, 0),})with open(“merged.jsonl”, “w”, encoding“utf-8”) as f:for item in normalized:f.write(json.dumps(item, ensure_asciiFalse) “\n”)print(f合并完成共 {len(normalized)} 条)四、场景三互动数据处理4.1 获取评论获取当前账号收到的评论可用套餐Basic、Plus、Pro、Ultraweibo-cli comments to_me/biz–count 20–output json comments.json参数说明–count 最大 20–page 可翻页–max_id / --since_id 可做游标翻页。4.2 过滤特定评论import json, recomments json.load(open(“comments.json”))[“comments”]pattern re.compile(r’多少钱|在哪买|怎么买|链接’)inquiry [c for c in comments if pattern.search(c.get(“text”, “”))]print(f筛选出 {len(inquiry)} 条咨询类评论)with open(“inquiry.json”, “w”, encoding“utf-8”) as f:json.dump(inquiry, f, ensure_asciiFalse, indent2)4.3 批量回复 [写操作]注意回复操作不可撤销。执行前请先检查 inquiry.json 的内容是否符合预期。import json, subprocessinquiry json.load(open(“inquiry.json”))for c in inquiry:mid c[“rootidstr”] # 被评论的微博 ID对应 --idcid c[“idstr”] # 评论 ID对应 --cidsubprocess.run([“weibo-cli”, “comments”, “reply”,“–id”, mid,“–cid”, cid,“–comment”, “感谢咨询详情可私信了解”])comments reply 必填参数–id微博 ID、–cid评论 ID、–comment回复内容不超过 140 汉字。可用套餐Basic、Plus、Pro、Ultra。五、完整 Pipeline 示例将采集、处理、输出三个环节串联为一个可定时执行的脚本#!/bin/bashpipeline.sh用法bash pipeline.sh “目标关键词”set -euo pipefailKEYWORD“1:−AI工具TIMESTAMP{1:-AI工具} TIMESTAMP1:−AI工具TIMESTAMP(date %Y%m%d_%H%M)OUTPUT_DIR”./data/TIMESTAMPmkdir−p{TIMESTAMP} mkdir -p TIMESTAMPmkdir−pOUTPUT_DIRecho “ [1/3] 检查账号状态 ”weibo-cli doctorecho “”echo “ [2/3] 采集关键词微博 ”weibo-cli search statuses/limited–q “KEYWORD −−type1 −−sorthot −−count20 −−outputjsonKEYWORD \ --type 1 \ --sort hot \ --count 20 \ --output json KEYWORD−−type1−−sorthot−−count20−−outputjsonOUTPUT_DIR/raw.json”echo “”echo “ [3/3] 生成简报 ”python3 - EOFimport jsondata json.load(open(“OUTPUTDIR/raw.json))itemsdata.get(statuses,[])totallen(items)iftotal0:print(无数据)else:avgattsum(s[attitudescount]forsinitems)/totalavgcmtsum(s[commentscount]forsinitems)/totaltop3sorted(items,keylambdax:x[attitudescount],reverseTrue)[:3]print(f关键词OUTPUT_DIR/raw.json)) items data.get(statuses, []) total len(items) if total 0: print(无数据) else: avg_att sum(s[attitudes_count] for s in items) / total avg_cmt sum(s[comments_count] for s in items) / total top3 sorted(items, keylambda x: x[attitudes_count], reverseTrue)[:3] print(f关键词OUTPUTD​IR/raw.json))itemsdata.get(statuses,[])totallen(items)iftotal0:print(无数据)else:avga​ttsum(s[attitudesc​ount]forsinitems)/totalavgc​mtsum(s[commentsc​ount]forsinitems)/totaltop3sorted(items,keylambdax:x[attitudesc​ount],reverseTrue)[:3]print(f关键词KEYWORD”)print(f采集量{total} 条)print(f平均点赞{avg_att:.0f} 平均评论{avg_cmt:.0f}“)print(”\nTop 3 互动微博“)for i, s in enumerate(top3, 1):print(f” {i}. [{s[‘attitudes_count’]} 赞] {s[‘user’][‘screen_name’]}: {s[‘text’][:50]}…)EOFecho “”echo “完成数据保存至 $OUTPUT_DIR”加入 crontab 每日定时执行0 9 * * * /path/to/pipeline.sh “AI工具” /var/log/pipeline.log 21六、常见问题问题现象 排查方式命令执行报错原因不明 先运行 weibo-cli doctor逐项确认账号与套餐状态–count 指定数量但实际返回更少 sorthot 仅返回精选微博实际条数可能少于上限COUNT_EXCEEDS_MAX 报错 search statuses/limited 和 comments to_me/biz 的 --count 最大均为 20hot_word/biz 提示无权限 该命令需要 Pro 或 Ultra 套餐Windows 下管道符传输 JSON 乱码 改用 PowerShell 或 WSL2 执行脚本写操作执行了不想要的内容 写操作前务必先检查数据操作不可撤销七、小结weibo-cli 将微博开放能力封装为可在终端直接调用的命令核心价值在于降低接口调用的门槛开发调试阶段可以快速验证效果在已有项目中也可以将其作为流程的一个环节嵌入。本篇涉及的三个场景——热点趋势监控、内容检索采集、互动数据处理——均基于 weibo-cli 当前已开放的能力所有命令参数均经 CLI 实际调用核验。具体的业务逻辑、内容策略和应用设计需要开发者结合自身需求完成。更多命令和参数说明参见官方文档。参考资源官方文档open.weibo.com/cli/index使用手册open.weibo.com/cli/quickstart