3.7 KiB
3.7 KiB
名单与套件制作指南
lookup_groups.py 的两个输入:群组名单(--names)和鉴权套件(--bundles / --save-bundles)。本指南说明怎么组织。
1. 群组名单(--names)
1.1 文件格式
- json:三种结构都支持。
- 纯数组:
["名字1", "名字2"] - 带表头的二维数组:
[["GROUP_NAME"], ["名字1"], ["名字2"]] - 对象:
{"names": ["名字1", "名字2"]}(也认group_names/groups/group_name)
- 纯数组:
- txt:每行一个名字,空行自动忽略。
- csv / xlsx:读首个工作表,自动识别名字列(去空白转小写比对)。
1.2 自动识别的列名(别名)
群组名称 / 群组 / group_name / groupname / 名称 / name / 实体名称 / group name。
- 有表头:首行表头命别名列,取该列后续所有行;首行不是表头且单列时整列当名字。
- 多列且首行无别名列:脚本报错「无法识别名字列」,改用别名列名或改成单列文件。
- 空值 /
nan/none自动跳过,名字按顺序去重。
1.3 示例
群组名称,备注
X 漫剧-1,
X 漫剧-2,重点
靓舟桃,
1.4 核对清单
- 明确要查的群组名,含必要的同名区分(如品牌名 + 序号)。
- 名字与页面上的 displayName 完全一致,否则只能进变体候选。
- csv/xlsx 用了别名列名或为单列文件。
2. 鉴权套件(--bundles / --save-bundles)
一个内容所有者对应一个套件,bundles.json 是套件数组。在线捕获(--url + --save-bundles)自动生成;也可手工维护。
2.1 结构
[
{
"ownerId": "bqSUnNpU67xJ51TxH4PKpQ",
"ownerDisplay": "FUTURE TV Co,Ltd",
"url": "https://studio.youtube.com/youtubei/v1/yta_web/search_groups?alt=json",
"headers": {
"Authorization": "SAPISIDHASH ...",
"Cookie": "...",
"X-YouTube-Delegation-Context": "...",
"...": "..."
},
"bodyTemplate": { "...": "...", "query": "" }
}
]
2.2 关键字段
ownerId:内容管理器的 id(约 18 字符 base62)。headers:约 12+ 个;必须原样回放,缺失任一(尤其Authorization、Cookie、X-YouTube-Delegation-Context)都会 401。不要重造。- 回放时脚本会剥离长度/传输类头(
content-length、host、connection、transfer-encoding、accept-encoding等),由 requests 自算。
- 回放时脚本会剥离长度/传输类头(
bodyTemplate:请求体模板,含context.user.delegationContext.externalOwnerId(锁定查询在哪个所有者名下)与serializedDelegationContext。回放只改query,其余一律不动。
2.3 多所有者
- 逐个所有者页面各捕获一份套件,合并进同一个
bundles.json。 - 同名 ownerId 以最新捕获为准(
--save-bundles会与--bundles读入的合并后写盘)。 - 查询时按
bundles.json中的顺序逐个所有者尝试,首个精确命中即停。
2.4 核对清单
headers含 Authorization / Cookie / X-YouTube-Delegation-Context。bodyTemplate的externalOwnerId与 URL ownerId 一致(不一致以请求体为准,脚本会打警告)。- 每个所有者都有独立套件,不混用。
- 套件有效期:鉴权头是页面逐请求计算的,过期需重新
--url捕获。
3. 产物核对
- 结果列:
group_name / ownerid / owner_display / groupid / 备注。 groupid非空 = 精确命中;其ownerid + owner_display即归属所有者。groupid为空时看「备注」:候选(名=ID)或各所有者线索(HTTP/网络错/无结果)。- 行数应与名单一致(含重复项已去重后的名字数)。