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 由三个环节组成:

  1. 采集:调用 weibo-cli 命令获取数据,输出 JSON
  2. 处理:用 Python / Shell 对 JSON 做过滤、聚合、格式转换
  3. 输出:写入文件、发送通知、或触发下一步动作

三个环节通过 Shell 管道(|)或临时文件串联。weibo-cli 的 --output json 参数保证输出格式固定,适合作为管道数据源。

输出格式说明

参数值 适合场景
table(默认) 终端直接查看,人类可读
json 脚本解析、管道传递、文件存储

在脚本中始终显式指定 --output json,保证后续处理逻辑的稳定性。


二、场景一:热点趋势监控

注意: search hot_word/biz 需要 Pro 或 Ultra 套餐。

2.1 获取热搜列表

weibo-cli 提供热点趋势查询能力,可获取当前热搜数据:

bash 复制代码
weibo-cli search hot_word/biz --output json

输出的 data 数组包含热搜词条,字段包括 id(排名)、word(热搜词)、num(热度值)。

bash 复制代码
weibo-cli search hot_word/biz --output json | python3 -c "
import sys, json
data = json.load(sys.stdin)['data']
for item in data:
    print(f\"{item['id']}. {item['word']}  热度:{item['num']}\")
"

2.2 关键词过滤

bash 复制代码
weibo-cli search hot_word/biz --output json | python3 -c "
import sys, json
data = 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 定时运行:

bash 复制代码
# 每小时执行一次
0 * * * * /path/to/monitor.sh >> /var/log/monitor.log 2>&1

三、场景二:内容检索与数据采集

3.1 关键词搜索

weibo-cli 支持按关键词检索微博内容:

bash 复制代码
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、Ultra

3.2 多页采集

单次最多返回 20 条,需要更多数据时使用 --page 参数翻页:

bash 复制代码
#!/bin/bash
# collect.sh  分页采集关键词搜索结果
KEYWORD="目标关键词"

for page in 1 2 3 4 5; do
  weibo-cli search statuses/limited \
    --q "$KEYWORD" \
    --type 1 \
    --sort hot \
    --count 20 \
    --page $page \
    --output json > "page_${page}.json"

  COUNT=$(python3 -c "
import json
d = json.load(open('page_${page}.json'))
print(len(d.get('statuses', [])))
  ")

  echo "第 $page 页:$COUNT 条"
  if [ "$COUNT" -eq "0" ]; then
    echo "无更多数据,停止"
    break
  fi

  sleep 1.5
done

注意: 相邻两次请求之间建议间隔 1 秒以上,避免请求频率过高。

3.3 结果合并与规范化

python 复制代码
import json, glob

all_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_ascii=False) + "\n")

print(f"合并完成,共 {len(normalized)} 条")

四、场景三:互动数据处理

4.1 获取评论

获取当前账号收到的评论(可用套餐:Basic、Plus、Pro、Ultra):

bash 复制代码
weibo-cli comments to_me/biz \
  --count 20 \
  --output json > comments.json

参数说明:--count 最大 20,--page 可翻页,--max_id / --since_id 可做游标翻页。

4.2 过滤特定评论

python 复制代码
import json, re

comments = 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_ascii=False, indent=2)

4.3 批量回复 [写操作]

注意: 回复操作不可撤销。执行前请先检查 inquiry.json 的内容是否符合预期。

python 复制代码
import json, subprocess

inquiry = json.load(open("inquiry.json"))
for c in inquiry:
    mid = c["rootidstr"]   # 被评论的微博 ID(对应 --id)
    cid = c["idstr"]       # 评论 ID(对应 --cid)
    subprocess.run([
        "weibo-cli", "comments", "reply",
        "--id",      mid,
        "--cid",     cid,
        "--comment", "感谢咨询,详情可私信了解~"
    ])

comments reply 必填参数:--id(微博 ID)、--cid(评论 ID)、--comment(回复内容,不超过 140 汉字)。可用套餐:Basic、Plus、Pro、Ultra。


五、完整 Pipeline 示例

将采集、处理、输出三个环节串联为一个可定时执行的脚本:

bash 复制代码
#!/bin/bash
# pipeline.sh
# 用法:bash pipeline.sh "目标关键词"
set -euo pipefail

KEYWORD="${1:-AI工具}"
TIMESTAMP=$(date +%Y%m%d_%H%M)
OUTPUT_DIR="./data/${TIMESTAMP}"
mkdir -p "$OUTPUT_DIR"

echo "=== [1/3] 检查账号状态 ==="
weibo-cli doctor

echo ""
echo "=== [2/3] 采集关键词微博 ==="
weibo-cli search statuses/limited \
  --q "$KEYWORD" \
  --type 1 \
  --sort hot \
  --count 20 \
  --output json > "$OUTPUT_DIR/raw.json"

echo ""
echo "=== [3/3] 生成简报 ==="
python3 - <<EOF
import json

data  = json.load(open("$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, key=lambda x: x["attitudes_count"], reverse=True)[: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]}...")
EOF

echo ""
echo "完成,数据保存至 $OUTPUT_DIR"

加入 crontab 每日定时执行:

bash 复制代码
0 9 * * * /path/to/pipeline.sh "AI工具" >> /var/log/pipeline.log 2>&1

六、常见问题

问题现象 排查方式
命令执行报错,原因不明 先运行 weibo-cli doctor,逐项确认账号与套餐状态
--count 指定数量但实际返回更少 sort=hot 仅返回精选微博,实际条数可能少于上限
COUNT_EXCEEDS_MAX 报错 search statuses/limitedcomments to_me/biz--count 最大均为 20
hot_word/biz 提示无权限 该命令需要 Pro 或 Ultra 套餐
Windows 下管道符传输 JSON 乱码 改用 PowerShell 或 WSL2 执行脚本
写操作执行了不想要的内容 写操作前务必先检查数据,操作不可撤销

七、小结

weibo-cli 将微博开放能力封装为可在终端直接调用的命令,核心价值在于降低接口调用的门槛:开发调试阶段可以快速验证效果,在已有项目中也可以将其作为流程的一个环节嵌入。

本篇涉及的三个场景------热点趋势监控、内容检索采集、互动数据处理------均基于 weibo-cli 当前已开放的能力,所有命令参数均经 CLI 实际调用核验。具体的业务逻辑、内容策略和应用设计,需要开发者结合自身需求完成。

更多命令和参数说明,参见官方文档。


参考资源

相关推荐
Oneslide1 小时前
kibana APM监控面板指标解析-I-JVM相关指标
后端
我不是AI1 小时前
Codex 装好了却用不了?API Key 与 KKFlow 配置精简教程
后端
用户208046804561 小时前
Flask 请求与响应新手实战指南
后端
程序员cxuan2 小时前
A 社官方:我们删掉了 80% 的 skills
人工智能·后端·程序员
苍何2 小时前
AI 短剧出海,门槛已经低到离谱了
后端
程序员黑豆2 小时前
鸿蒙应用开发:@Link 装饰器实现父子组件双向同步
前端·后端·harmonyos
huahailing10242 小时前
Spring Boot 集成 XXL-Job 完整实现方案(支持动态CRUD)
java·spring boot·后端
顶级自由人3 小时前
【前端菜鸟的补课01】Zod 与 PostgreSQL 全栈数据工程教学
前端·后端·程序员
swipe3 小时前
11|(前端转全栈)购物车不能只存在前端:用户维度数据如何在后端落库
前端·后端·全栈