Files
Sidney Zhang b8bd749f43 feat(scripts): 支持动态指标和维度参数配置
为 build_studio_urls.py 添加指标和维度的可配置支持,包括:
- 新增 metrics.json 和 dimensions.json 映射文件加载
- 支持中文/英文别名映射及指标代码透传
- 列别名扩展以识别"指标"和"维度"列
- 空值时自动回退到 CONFIG 默认值
2026-08-24 15:28:48 +08:00

94 lines
6.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: "yt-studio-url-builder"
description: "根据需求清单CSV/Excel批量生成 YouTube Studio 内容管理器 explore URL。当用户要求拼接/生成 YouTube Studio URL、批量产出报告链接、制作或校验需求输入清单、排查 URL 生成失败问题时使用。"
---
# YouTube Studio URL 拼接器
基于需求清单CSV/Excel批量生成 YouTube Studio 内容管理器Content Manager高级模式 explore 报告 URL。底层执行脚本 `scripts/build_studio_urls.py`,需求行只提供差异化条件,固定参数由脚本顶部 `CONFIG` 统一维护。
## 何时使用
- **生成 URL**:用户给出所有者/群组/频道/节目清单,要求批量产出 explore URL。
- **制作输入清单**用户有零散需求所有者ID、实体、日期范围、国家需先整理成脚本可读的输入文件。
- **排查问题**:运行后出现失败行、空输出、解析错误,需要定位并修复。
## 领域词汇
- **所有者Content Owner**拥有内容管理器的账号实体URL 中由 `o` 参数 + `/owner/<id>/` 路径标识。
- **实体Entity**:报告统计的对象,由 `entity_type` + `entity_id` 标识CONTENT_OWNER / GROUP / CHANNEL / VIDEO
- **群组Group**:所有者名下用于组织一批频道/资产的实体,`entity_id` 为其 groupId`NCy9C2QPQ1E`)。
- **需求Requirement**:输入清单中的一行,描述一条待生成 URL 的完整条件(所有者、实体、数据周期、国家筛选)。
- **数据周期Period**`yyyy.mm.dd-yyyy.mm.dd``yyyy.m.d-yyyy.m.d` 的日期区间,起始日与结束日均包含。
- **日界线Day Boundary**:周期中日期对应的 Unix 毫秒,采用「锚点 2026-06-15 = 1781506800000 + 整日偏移」计算,不做时区换算。
- **国家筛选Country Filter**`ur_dimensions=COUNTRY` + `ur_values`;多国以 `'``%27`)包裹、`|``%7C`)连接;国家用 ISO 3166-1 alpha-2 代码。
- **指标Metric**报表主指标URL 中的 `metric` 参数;每行可选(`指标` 列),中文名/英文名写在同目录 `metrics.json` 里映射到内部代码,留空走 `CONFIG` 默认。选中后排序字段 `o_column` 一并跟随。
- **维度Dimension**报表细分维度URL 中的 `dimension` 参数;每行可选(`维度` 列),中文名写在同目录 `dimensions.json` 里映射到内部代码,留空走 `CONFIG` 默认。
## 工作流
### 1. 定位脚本与依赖
- 脚本默认位于 `scripts/build_studio_urls.py`;若缺失,用 SearchCodebase 按 `build_studio_urls.py` 定位。
- 运行环境由 `uv-env-setup` 技能统一管理依赖pandas、openpyxl在根 `pyproject.toml` 声明,`uv run` 自动同步。首次运行前先按该技能准备环境。
- 中文国家名 → ISO 代码的映射在 `scripts/countries.json`,可自行扩充。
完成标准:脚本路径已确定,且第 4 步的运行命令可直接执行。
### 2. 收集每条需求
对每条待生成 URL 的需求,明确以下要素(留空表示走默认):
| 要素 | 必填 | 说明 |
|---|---|---|
| 所有者ID | 是 | URL 中的 `o` 参数与 `/owner/<id>/` 路径 |
| 实体类型 | 可默认 | 群组/所有者/频道/节目;缺省按群组 |
| 实体ID | 视类型 | 群组/频道/节目必填所有者场景可留空回退用所有者ID |
| 数据周期 | 是 | 见领域词汇「数据周期」 |
| 国家 | 可空 | 一个或多个,中文名或两位 ISO 代码 |
| 指标 | 可默认 | 主指标(`metric` 参数);中文名/英文名或已知指标代码;留空走 CONFIG 默认 |
| 维度 | 可默认 | 细分维度(`dimension` 参数);中文名或已知维度代码;留空走 CONFIG 默认 |
完成标准:对每一条需求,上表要素已确定,或明确「留空走默认」。
### 3. 制作输入文件
按 [references/input-guide.md](references/input-guide.md) 生成 CSV/Excel 需求清单(文件格式、列名别名、日期/国家/实体类型写法、完整示例、核对清单)。
完成标准输入文件包含必要列所有者ID、数据周期且列名能被脚本识别无「缺必要列」错误
### 4. 运行脚本
```bash
# 项目根目录下
uv run python scripts\build_studio_urls.py -i <输入文件> [-o <输出csv>]
```
- 输入支持 `.csv`UTF-8 或 GBK自动尝试`.xlsx` / `.xls`
- 未指定 `-o` 时,输出到输入文件同目录的 `studio_urls_output.csv`
- 可用 `--countries <json>` 覆盖国家映射文件路径(默认脚本同目录 `countries.json`)。
完成标准:脚本退出码为 0且输出 CSV 行数与成功需求数一致。
### 5. 校验输出并处理失败行
- 检查输出列所有者名称、所有者ID、实体类型、实体名称、实体ID、数据周期、国家、国家代码、指标、指标代码、维度、维度代码、开始时间戳、结束时间戳、URL。
- 抽查 URL 是否包含正确的 `entity_type` / `entity_id` / `time_period` / `ur_values`(国家筛选)、`metric`(指标)、`dimension`(维度)。
- 有失败行时脚本以退出码 2 结束,并在 stderr 逐行打印「第N行 …:原因」;逐条按 [references/troubleshooting.md](references/troubleshooting.md) 修复后重跑。
完成标准:所有需求行均生成 URL或失败行已定位原因并修复。
## 固定参数CONFIG
granularity / dimension / t_metrics / o_direction / explore_type / comparison_type 等固定参数集中在脚本顶部 `CONFIG` 一处维护。**修改这些固定参数只需改 `CONFIG`(单点维护)**,不要逐行携带到需求清单中。
`metric`(主指标)**可按行选择**:在需求清单加一列 `指标`(别名 `主指标` / `数据指标` / `metric`),填中文名/英文名(`metrics.json` 映射)或已知指标代码均可;留空则回退 `CONFIG["metric"]`,选中时 `o_column`(排序字段)一并跟随。
`dimension`(细分维度)**同样可按行选择**:在需求清单加一列 `维度`(别名 `细分维度` / `dimension`),填中文名(`dimensions.json` 映射)或已知维度代码均可;留空则回退 `CONFIG["dimension"]`
## 参考
- [需求输入制作指南](references/input-guide.md):列名别名、日期/国家/实体类型写法、完整示例、制作核对清单。
- [常见问题排查](references/troubleshooting.md):按 现象 → 原因 → 解决 逐条排查。
- [映射文件维护指南](references/maintenance-guide.md)`countries.json` / `metrics.json` / `dimensions.json` 三个映射文件的来源、结构与新增/更新条目方法。