bv-loop

已断开 · /home/kipley/Documents/code/learning/bv-loop · ← 返回
第 1 轮 · 12:58:34
我的提问

快速报名这个项目的使用,支付信用卡。然后告诉我,现在我想要开一个项目,获取批量获取内容,需要开,获取什么 Token?Token 的格式是怎么样?开始吧。

bashmemory_search
第 2 轮 · 12:58:54
bash
第 3 轮 · 12:59:06
bash
第 4 轮 · 12:59:31

先说清楚两件事,再回答 Token 问题。

1. 关于「报名 + 信用卡支付」 我这边没有任何支付/订阅工具,也不能替你付信用卡——bv-loop 这套流水线本身也没有付费报名环节。如果你说的是某个第三方付费 API(比如某个内容抓取云服务),告诉我具体是哪家,我可以帮你把接入配置写好,但注册和付款需要你自己操作。

2. 「批量获取内容」需要什么 Token —— 在 B 站场景下:不需要 API Key,需要的是登录 Cookie

B 站没有开放 API Token,qwen-bv(/home/kipley/Documents/code/learning/qwen-bv)批量拉取用的凭据是:

① Cookie(核心凭据,整串) 格式(浏览器登录 bilibili.com 后,F12 → Network → 任意 api.bilibili.com 请求 → Request Headers 里整段复制):

SESSDATA=xxxxxxxx%2Cyxxxxxxxx%2Cxxxxxxxx%2Eyyyyyyyy; bili_jct=xxxxxxxx; buvid3=xxxxxx; buvid4=xxxxxx; bili_ticket=xxx; DedeUserID=123456; ...

② WBI 签名(不是静态 Token,每次请求现算)

3. 一个重要提醒 「批量获取 UP 主内容」这件事 qwen-bv 已经做完了(Flask :5001,/collect + WBI 全量翻页),入口就是 bv-loop/bin/run.sh collect <mid|URL>。如果你说的「开一个新项目」指的就是 B 站批量抓取,不建议重开——直接复用 qwen-bv 即可。

如果你要开的新项目是别的平台的内容抓取(Twitter/X、YouTube、新闻站之类),告诉我具体平台——不同平台要的凭据完全不同(OAuth app key、API key sk-xxx、还是 cookie),我再给你对应的申请步骤和 Token 格式。你指的是哪个平台?

第 5 轮 · 13:03:05
我的提问

# Netscape HTTP Cookie File # https://curl.haxx.se/rfc/cookie_spec.html # This is a generated file! Do not edit. .bilibili.com TRUE / FALSE 1804841827 buvid3 A372AC29-98B8-E77A-4082-8E21DB94BDC226591infoc .bilibili.com TRUE / FALSE 1804841827 b_nut 1773305826 .bilibili.com TRUE / FALSE 1804841827 _uuid 4F4C6938-A2DF-6E97-FA37-9C62BC8699A102718

bash

收到。我先看一下 qwen-bv 的入口和服务状态,然后把 Cookie 配进去测试。

第 6 轮 · 13:03:13
bash
第 7 轮 · 13:03:31
bash
第 8 轮 · 13:03:38
bash
第 9 轮 · 13:03:44
bash

粘贴时 Tab 变成了空格,改用「双空格」分隔解析:

第 10 轮 · 13:03:51
bash

23 个 Cookie 全部解析成功。现在写入 qwen-bv/config.yaml:

第 11 轮 · 13:03:57
bash

配置写入成功。现在重启 qwen-bv 加载新 Cookie,并先看一眼 collect 接口参数,方便做小范围测试:

第 12 轮 · 13:04:06
bash
第 13 轮 · 13:04:27
bash

登录态有效(账号「弦上弦四」,mid 1920949412)。重启 qwen-bv:

第 14 轮 · 13:04:33
bash

路径写错了(相对路径解析到了 qwen-bv 下)。用绝对路径重来:

第 15 轮 · 13:04:39
bash

服务已重启。现在用你自己的账号(mid 1920949412)做一次真实采集测试:

第 16 轮 · 13:04:44
bash

端到端全通。快速验证一下落盘数据质量:

第 17 轮 · 13:04:52
memory_add
第 18 轮 · 13:05:02

全部搞定 ✅

已完成的操作:

  1. Cookie 配置:从你贴的 Netscape 导出解析出 23 个 Cookie(1084 字符整串),写入 qwen-bv/config.yaml → bilibili.cookie(旧配置备份在 /tmp/config.yaml.bak)
  2. 登录态验证:nav 接口 code:0, isLogin:true,账号 弦上弦四(mid 1920949412),WBI key 正常
  3. 重启服务:qwen-bv :5001 已加载新 Cookie(pid 1636495)
  4. 真实采集测试:POST /collect {"mid": 1920949412}(你自己的账号)—— 13 个视频 / 1 页 / 0.4s,全部落盘:

两个注意点:

下一步:把你要批量采集的 UP 主 mid 或空间 URL 给我(如 BV 空间地址 https://space.bilibili.com/xxxx),我直接跑 collect 全量同步。

第 19 轮 · 13:07:32
我的提问

你知道这里的data是保存在哪儿的吗?我之前好像定过规范,有一个专门的存放这里的bv的文件号的一个空间。你帮我看一下,你告诉我你是默认存储在哪里的,这个很重要。

bashmemory_search
第 20 轮 · 13:07:41
bash
第 21 轮 · 13:07:55

知道,这个规范我记得——是你自己定死的,当时你原话是 「data 就这么放着」(原则:一次设计到位,之后不再迁移)。

默认(也是唯一约定的)存储位置:

/home/kipley/Documents/code/learning/bv-loop/data/

具体结构(bv-loop 的「统一数据根」规范):

bv-loop/data/
├── <mid> <UP名>/          # 每个 UP 一个目录
│   ├── bvids.txt          # BV 号文件清单(一行为一个 bvid)
│   ├── videos.jsonl       # 视频明细(标题/URL/时长/描述/封面)
│   ├── manifest.json      # 同步元数据(总数/页数/同步时间)
│   └── transcripts/       # 转写文本 {bvid}-{标题40}.txt
├── _adhoc/                # 不归属任何 UP 的零散单 BV 转写(qwen-tts 默认输出)
└── archive/ → ../archive  # 实验垃圾迁出地

当前实际状态(刚确认过):bv-loop/data/ 下已有 7 个 UP 目录(老番茄、橘鸦Juya、bitebyte 等)+ 刚才测试新建的 1920949412 弦上弦四/。

配置出处:qwen-bv 的写入位置由 qwen-bv/config.yaml 的 storage.data_dir 决定,当前值:

data_dir: "/home/kipley/Documents/code/learning/bv-loop/data"   # 统一数据根(bv-loop 统筹)

刚测的 13 个 BV 号文件就落在 bv-loop/data/1920949412 弦上弦四/bvids.txt,和这个规范完全一致 ✅

你提到的「专门存放 BV 文件号的空间」应该就是指这个 bv-loop/data/ 统一数据根——没有第二个存放点。如果你指的是别处(比如别的磁盘/网盘),告诉我位置,我把 storage.data_dir 指过去。

第 22 轮 · 13:09:33
我的提问

https://space.bilibili.com/3546883435792991 开始吧,如果有些无法拉取,你需要统计一下的,有哪些视频失败了

bash

开始采集 UP 3546883435792991:

第 23 轮 · 13:09:38
bash
第 24 轮 · 13:09:47

采集完成,零失败 ✅

UP:杨炎四柱国学(mid 3546883435792991)

| 指标 | 数值 | |---|---| | B 站报告总数 | 767 | | 实际拉取 | 767 | | 去重后 | 767 | | 缺失/失败 | 0(drift=0) | | 翻页数 | 26 页 | | 耗时 | ~29s | | 重试/风控 | 本次 0 次(日志里的 -352 风控错误是更早前 mid=12591775 的旧记录,与本次无关) |

落盘位置(按你定的规范):

bv-loop/data/3546883435792991 杨炎四柱国学/
├── bvids.txt      767 行(BV16En36HE91、BV1CVn36REvE ...)
├── videos.jsonl   767 条明细(标题/URL/时长/描述/封面)
└── manifest.json  synced_at 2026-10-19T05:09:33Z

767 个 BV 全部拿到,可以直接进入下一步了。要接着跑批量转写吗?(run.sh transcribe "3546883435792991 杨炎四柱国学" -j N,会走 qwen-bv-tts 编排 → qwen-tts ASR)

第 25 轮 · 13:15:04
我的提问

我asr启动了,简单测试一下是否可以访问接口,可以的话就开始

bash
第 26 轮 · 13:15:13
bash

qwen-tts 服务(:5000)还没起。你说的 ASR 应该是模型后端,我先分别验证两层:

第 27 轮 · 13:15:19
bash

ASR 后端在线(Qwen3-ASR-1.7B)。现在拉起 qwen-tts 服务:

第 28 轮 · 13:15:32
bash
第 29 轮 · 13:16:27
bash

The script has a built-in pre-check (health check + actual transcription test of the shortest video, aborting the entire batch if it fails). We can just start the batch directly—this itself is a "simple test". With 767 videos and concurrency of 10, it will take time to run, so run it in the background:

第 30 轮 · 13:16:49
bash

预检通过、部分视频成功(有 490 字输出),但大量视频报 playurl 未返回 DASH 音频流——先停掉批量,排查这个问题,否则 767 个会一直失败重试:

第 31 轮 · 13:16:58
bash

pkill 匹配到了自己的 shell,重来了。用不会自匹配的方式停进程:

第 32 轮 · 13:17:01
bash

进程已全部停掉。看 qwen-tts 的 playurl 拉取逻辑:

第 33 轮 · 13:17:10
bash
第 34 轮 · 13:17:19
bash

验证确认:匿名请求无 DASH 音频,带 Cookie 正常。写入 Cookie 并重启 qwen-tts:

第 35 轮 · 13:17:22
bash
第 36 轮 · 13:18:19
bash
第 37 轮 · 13:18:23
bash
第 38 轮 · 13:19:28
bash
第 39 轮 · 13:22:31
bash
第 40 轮 · 13:22:49
memory_add
第 41 轮 · 13:22:59

✅ 问题已修复,批量转写已恢复运行。

排查结果(这次停得对,否则 767 个全白跑):

当前批量状态:

预计耗时:按当前速度(约 4 个/分钟),767 个大约 2.5–3 小时跑完。

跑完后看结果:

cd /home/kipley/Documents/code/learning/bv-loop
./bin/run.sh status                          # 各 UP 进度
# 失败明细(如有):
data/3546883435792991\ 杨炎四柱国学/transcripts/_failed.jsonl
个别视频如果最终失败(如直播回放、加密视频等拉不到音频的),都会记录在 _failed.jsonl 里带原因,修复后重跑同一命令即可只补失败项。

要我过段时间帮你查一次进度吗?还是跑完你叫我统计失败清单?

第 42 轮 · 13:28:40
我的提问

每隔五分钟,给我生成一个进度,在这里显示,做好交互。跑完之后你需要统计一下。

bash

好,我来盯着。每 5 分钟在这里播报一次进度,跑完后给你完整统计。先建一个进度统计小工具:

第 43 轮 · 13:28:47
bash
第 45 轮 · 13:34:11
bash
第 46 轮 · 13:39:15
bash

📊 13:34 — 31 / 767(4.0%) | 失败 0(16 个旧失败正在补跑中)| 批次运行中

第 47 轮 · 13:44:26
bash

📊 13:39 — 37 / 767(4.8%) | 失败 0 | 本周期 +6(部分长视频耗时较久)

第 48 轮 · 13:49:34
bash

📊 13:44 — 47 / 767(6.1%) | 失败 0 | 本周期 +10(速度回升 ~2/分钟)

第 50 轮 · 13:54:14
第 49 轮 · 13:54:14
bash

📊 13:49 — 61 / 767(7.9%) | 失败 0 | 本周期 +14(~2.8/分钟,预计还需 ~4 小时)

第 51 轮 · 13:54:26
我的提问

我比较好奇啊,我这里的提示词是需要是那个命理相关的一个提示词。如果提示词不准确的话,可能翻译会有些失误。这里帮我看一下,你有没有使用命理的提示词?命理学这一块。

第 52 轮 · 13:54:36
bash
第 53 轮 · 13:54:43
bash

qwen-tts 本身支持领域提示词(T-019 约定:请求参数 prompt,会影响同音词选择)。现在看批量链路有没有把它传进去:

第 54 轮 · 13:54:59
bash
第 55 轮 · 13:56:15

查清楚了——没有用。当前批量转写是"裸跑"的,没带任何命理提示词。

链路现状: | 层 | 状态 | |---|---| | qwen-tts API | ✅ 支持 prompt 领域提示词(T-019 约定,2026-10-11 实测:该字段真实影响同音词选择,hot_words 则被忽略) | | qwen-bv-tts 批量 worker(transcribe_one.py) | ❌ POST 只发 {"bvid", "output_dir"},没传 prompt |

已经出现的同音字错误证据(从刚转出的文本里抓到的):

八字课里这类坑很多:时柱/十柱、用神/有身、伤官/伤观、食神/石神、印绶/印兽、官杀/官煞、身强/声强、羊刃、华盖、驿马、排盘/排板……

当前进度:72/767(刚才播报中断了,批次还在跑,失败 0)。

修复方案(我建议这么做):

  1. 停掉当前批次
  2. 给 transcribe_one.py 加 --prompt 参数透传给 API(改动很小)
  3. 删掉已转出的 ~72 个文本(不带提示词的,同音字质量不一致,留着会混)
  4. 用命理提示词重新全量跑 767 个

提示词我起草了一版(你可以改,或者你有自己的术语表发我):

音频内容是中文八字命理学(四柱预测学)课程与答疑,请用简体中文输出,
并按命理术语规范选择同音字:八字、四柱、年柱、月柱、日柱、时柱、日主、
天干、地支、十神、比肩、劫财、食神、伤官、偏印、正印、偏财、正财、
七杀、正官、用神、喜神、忌神、身强、身弱、根气、大运、流年、流月、
纳音、空亡、长生、沐浴、冠带、临官、帝旺、衰、病、死、墓、绝、胎、养、
羊刃、华盖、驿马、禄神、天乙贵人、五合、六冲、刑害、甲乙丙丁戊己庚辛壬癸、
子丑寅卯辰巳午未申酉戌亥。

要我现在就执行吗?(停批次 → 改 worker → 清掉旧文本 → 带提示词重跑)还是你先给我一版你自己的提示词/术语表?