# Blogger Tracker

> 开源博主追踪系统：默认用 browser-act 真实浏览器免费抓 B站/抖音博主最新视频；TikHub 付费 API 为备用引擎（大批量/全历史回填时才启用）。本地 JSON+Markdown 存储，增量发现新视频，生成追踪报告；可选回写飞书多维表。当用户说「加博主」「追踪这个博主」「更新追踪」「谁更新了」「博主追踪报告」「盯一下这个 UP主」「博主最近发了什么」「开源博主追踪」「回填博主历史视频」时触发。依赖 browser-act skill。区别于 douyin-downloader（下载视频本体）与 xiaohongshu-creator-analytics（自己账号后台数据）。

- **Type:** Skill
- **Install:** `agentstack add skill-miaqu766520-a11y-ai-line-skills-blogger-tracker`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [miaqu766520-a11y](https://agentstack.voostack.com/s/miaqu766520-a11y)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [miaqu766520-a11y](https://github.com/miaqu766520-a11y)
- **Source:** https://github.com/miaqu766520-a11y/ai-line-skills/tree/main/skills/blogger-tracker

## Install

```sh
agentstack add skill-miaqu766520-a11y-ai-line-skills-blogger-tracker
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# blogger-tracker · 开源博主追踪系统（免费版）

盯一批 B站/抖音博主，发现新视频、沉淀热度数据、出 Markdown 报告。**全程 0 费用**：抓取走 browser-act 本地真实浏览器（不用任何付费 API），存储全本地。

- B站：公开页免登录，抓 `arc/search` 接口（标题/bvid/播放/评论/发布时间）
- 抖音：需带登录态的浏览器，嗅探 `aweme/post` 接口（标题/aweme_id/赞/评/享/藏/发布时间）
- 单人约 10~15 秒，20 人 ≈ 5 分钟；量大的博主只抓第一页（最新 18~42 条），对「发现新视频」足够

## 前置：先读 browser-act skill

本 skill 全部抓取经 browser-act CLI 完成。**第一批命令前必须先执行**（browser-act skill 的强制要求）：

```bash
browser-act get-skills core --skill-version 2.0.2
```

browser-act 规则全部适用：会话命名、归属判断、用完即关（`browser-act session close `）。

## 数据布局

默认根目录 = **当前工作目录/博主追踪**（环境变量 `BT_DIR` 可改）。所有 bt_store.py 命令在该目录下执行（或先 `export BT_DIR=`）。

```
博主追踪/
├── bloggers.json      博主清单 + 配置（浏览器 id、飞书开关）
├── data/.json    每人视频快照（含 first_seen/hist 数据小历史）
├── 报告/YYYY-MM-DD.md  追踪报告
└── tmp/               抓取临时文件（merge 后即可删）
```

脚本：`scripts/bt_store.py`（存储/对比/报告，纯本地无网络）、`scripts/sniffer_douyin.js`（抖音嗅探注入）、`scripts/sniffer_bilibili.js`（B站兜底嗅探注入）。下文 `$BT` = `scripts/bt_store.py` 绝对路径，`$SKILL` = 本 skill 目录。

## 命令一：初始化 / 配置浏览器

仅在 `bloggers.json` 不存在或浏览器未配置时做：

```bash
python $BT init
```

然后 `browser-act browser list`，向用户确认两个浏览器 id（**必须让用户确认，不得自创浏览器**）：

- **B站浏览器**：任意 chrome 类型即可（公开页免登录），选用户已有的通用浏览器
- **抖音浏览器**：desc 中含「抖音登录态」的浏览器；没有 → 引导用户按 browser-act 创建流程（`get-skills advanced` → 说明用途 → 用户确认 → create 导入自己 Chrome），README 有粉丝向说明

确认后写入配置：

```bash
python $BT set-browser --platform bilibili --browser-id 
python $BT set-browser --platform douyin    --browser-id 
```

## 命令二：加博主

用户给主页链接（`space.bilibili.com/` 或 `douyin.com/user/`）。若用户只给名字：B站用 `bilibili/web` 搜索页、抖音用搜索页人工确认主页链接，**不得猜 uid**。

1. `python $BT add --name "" --platform  --home ""`（返回 uid）
2. 紧接着按「命令三」单人抓取流程抓一次入库（验证能抓到 + 建立首批快照）
3. 抓不到 → 从清单 `remove` 并如实告诉用户原因（链接错/需登录/页面风控）

## 命令三：更新追踪（核心）

`python $BT list` 取 active 博主，按平台分批。**同平台复用同一会话逐人 navigate**；每完成一人 `sleep 2`；每人最多重试 2 次；失败的记入小结不中断整批。会话命名 `bt--`，全批跑完统一 close。

### B站分支（每人）

```bash
# 首次或换人时
browser-act --session  navigate "https://space.bilibili.com//video"
browser-act --session  wait stable --timeout 45000
# 1. 从网络日志提取签名 URL（CSV 最后一列，含 w_rid/wts，必须新鲜）
browser-act --session  network requests --filter "arc/search" --type xhr,fetch
# 2. 页内凭签名 URL 重取（同域 CORS 放行，wbi 签名短时有效，立即用）
browser-act --session  eval "window.__bt=null;fetch('',{credentials:'include'}).then(function(r){return r.json()}).then(function(d){var l=(d.data&&d.data.list&&d.data.list.vlist)||[];window.__bt=l.map(function(v){return{id:v.bvid,t:(v.title||'').slice(0,80),ct:v.created,play:v.play,comm:v.comment}})}).catch(function(e){window.__bt={err:String(e)}});'fetching'"
sleep 3
# 3. 分块读回（每块 ≤8 条防输出截断；block=ceil(n/8)，n 先看 length）
browser-act --session  eval "JSON.stringify(window.__bt&&window.__bt.length)"
browser-act --session  eval "JSON.stringify(window.__bt.slice(0,8))"
# ...slice(8,16) 直到读完
# 4. 每块输出用 grep '^\[{' 提取（必须带 { —— 裸 '^\[' 会误抓 "[Update Available]" 提示行），
#    空块（grep 无输出）写 '[]' 兜底；各块拼成完整数组写 博主追踪/tmp/bili_.json，然后
python $BT merge --blogger "" --json 博主追踪/tmp/bili_.json
```

B站兜底（签名 URL 重取返回 HTML/err）：注入 `scripts/sniffer_bilibili.js` → 点空间页别的 Tab（如「动态」）→ 点回「投稿」→ 读 `window.__caps`。

### 抖音分支（每人，浏览器必须带抖音登录态）

```bash
browser-act --session  navigate "https://www.douyin.com/user/"
browser-act --session  wait stable --timeout 45000
# 1. 注入嗅探器（挂钩 fetch+XHR 捕获 aweme/post 响应）
browser-act --session  eval "$(cat $SKILL/scripts/sniffer_douyin.js)"   # 须返回 sniffer-ok
# 2. SPA 跳走再跳回 → 页面重发带签名的作品接口，嗅探器截获完整 JSON
browser-act --session  eval "var a=document.querySelector('a[href*=\"recommend\"]');a&&a.click();'nav'"
sleep 4
browser-act --session  eval "history.back();'back'"
sleep 6
# 3. 确认截获（n≥1 且最后一页 n>0），分块读 data（每块 ≤8 条，grep '^\[{' 提取、空块写 '[]'）
browser-act --session  eval "JSON.stringify({n:window.__caps.length,last:window.__caps.length?window.__caps[window.__caps.length-1].d.n:0})"
browser-act --session  eval "JSON.stringify(window.__caps[window.__caps.length-1].d.data.slice(0,8))"
# ...slice(8,16) 直到读完（取 __caps 最后一页，含全部 21 条以内）
# 4. 拼成数组写 博主追踪/tmp/dy_.json，然后
python $BT merge --blogger "" --json 博主追踪/tmp/dy_.json
```

抖音兜底：`__caps` 为空 → 等 5s 再读一次；仍空 → 重新 navigate 用户页重试（注入会随整页刷新失效，需重新注入）；两次失败 → 检查是否弹出验证码/登录墙（截图），需要人工时按 browser-act 升级阶梯（solve-captcha / headed / remote-assist）交给用户。

### merge 返回

`{"new":[{id,title,published}], "changed":m, "total":N}` —— `new` 即本次新发现视频。汇总所有博主的 new 作为「谁更新了」的答案；tmp 文件 merge 后删除。

## 命令三补充：TikHub 引擎（付费·仅大批量/深数据时启用）

**默认永远是 browser-act 免费路线。** 仅当满足以下任一条件才用 TikHub，且**启用前必须向用户说明并按预估请求数征得同意**（按量计费）：

- 全历史回填（用户说「把 xx 的历史视频都抓来」「回填」）——browser-act 只抓第一页，TikHub 可翻页到全量
- 大批量省时（一次刷几十人不想等浏览器）
- browser-act 路线被风控/登录态失效且用户有 key

```bash
# 单人单页（≈1 请求）
python $SKILL/scripts/tikhub_fetch.py --blogger "" --pages 1 --env 
# 全历史回填（翻页到完，至多 50 页；先估算页数≈作品数/20 再跑）
python $SKILL/scripts/tikhub_fetch.py --blogger "" --pages 0 --env 
# 产出 博主追踪/tmp/tikhub_.json 后照常 merge
python $BT merge --blogger "" --json 博主追踪/tmp/tikhub_.json
```

Key 读取：环境变量 `TIKHUB_API_KEY` → `--env` 文件。注意抖音必须走 app/v3（web 端点数据过期）；B站列表无收藏数（要收藏 TopN 得逐条 fetch_one_video，请求数=视频数，先报价再跑）。

## 命令四：出报告

```bash
python $BT report --days 7 --top 5
```

生成 `博主追踪/报告/YYYY-MM-DD.md`（🆕新发布 / 🔥热度TOP10 / 📇各博主最新N条）。控制台同步一句小结；报告路径交给用户（Obsidian 库内可直接看）。

## 命令五（可选）：回写飞书

仅当 `bloggers.json` 的 `_config.feishu.enabled=true` 时，在 merge 全部完成后执行：

```bash
python $SKILL/scripts/feishu_push.py
```

把本地快照增量写入飞书多维表（博主表/视频表，字段映射：B站=标题/链接/封面/发布时间/播放量/评论数，抖音=标题/链接/发布时间/赞/评/享/藏；内容ID 加平台前缀去重）。配置方式：

```bash
python $BT feishu-setup --base  --bloggers-table  --videos-table  [--creds-from ]
```

凭证优先读 `--creds-from` 指定的 Node 文件里的 `appId/appSecret`（复用现有工作台应用，不另存密钥）；粉丝无配置则整步跳过，**绝不向粉丝索取或分发任何 appSecret**。

## 纪律红线

1. **先 `get-skills core`** 再发任何 browser-act 命令；browser 创建/删除必须走用户确认门
2. 会话用完即关；不使用别的会话（ownership 规则）；两人之间 sleep 2，单批失败不中断
3. eval 读取一律分块 ≤8 条，防 CLI 输出截断（实测教训）；merge 输入只认 `{id,t,ct,play,comm,digg,share,coll}` 字段
4. 抖音签名 URL **不可**页内重取（返回 HTML），只能嗅探截获；B站反之（签名 URL 可重取，SPA 返回会整页刷新清空注入）——两条路线不得互换
5. 临时文件只进 `博主追踪/tmp/`，merge 后即删；报告只进 `博主追踪/报告/`
6. 遇验证码/登录墙不盲目重试，按升级阶梯交人工
7. TikHub 为付费备用引擎：默认绝不启用；启用前报预估请求数并征得用户同意；禁止用它跑命令三的日常更新（那是 browser-act 的活）

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [miaqu766520-a11y](https://github.com/miaqu766520-a11y)
- **Source:** [miaqu766520-a11y/ai-line-skills](https://github.com/miaqu766520-a11y/ai-line-skills)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-miaqu766520-a11y-ai-line-skills-blogger-tracker
- Seller: https://agentstack.voostack.com/s/miaqu766520-a11y
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
