Files
mcn-short-video/.workbuddy/memory/2026-09-18.md
T
maogeigei d07049ecf1 chore(repo): 归集 09-14~09-29 工作产出(技能/知识库/工作台/报告)并收敛临时产物
- skill: 素材库分块定义(00~11)、05_极致事件知识库 4 篇、08_对话风格总纲、mcn-video-prompt 提示词质量门禁与外部语料检索流程

- workbench: mcn-work-shop 新增 cli-backend.js(本地 CLI 接入)、工作台视觉交互规范;移除旧 UI 规范

- docs: 根目录极致事件/素材卡/审计方案报告与热门短视频清单入库

- memory: 补 09-14~09-29 日志与自动化任务记忆

- chore: .gitignore 排除 tools/、.tmp-chrome-*/、_k_test.cjs
2026-09-29 18:56:24 +08:00

68 lines
8.3 KiB
Markdown
Raw 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.
# 2026-09-18 工作日志
### 获取最新热点数据(四榜全量,8 次红狐调用)
**诉求**:「获取最新热点数据」→ 即刷新工作台榜单缓存。
**先做的 0 成本盘点**(幂等铁律:先 ls 命中免 API):
| 榜 | 本地最新期 | 应有最新期 | 缺口 |
|---|---|---|---|
| 账号周榜 | 08-31(5 赛道齐) | **09-07** | 5 赛道 × 1 期 |
| 账号日榜 | 09-08 | **09-16** | 1 期 |
| 视频热榜 | 08-31 | **09-07** | 1 期 |
| 点赞榜 | 08-31 | **09-07** | 1 期 |
最后落盘时间 = **08-31**(7.8 天前 / 11185 min),共 82 个文件;`/api/dsh/ranking-update` 的 `cooldownMin=30`,不在冷却窗口、无运行中任务。
**★付费调用前置门禁(技能硬规矩,勿跳过)**:`mcn-data-insight/scripts/fetch_week_ranks.py` 头部明写「**必须先向用户确认调用次数与范围,禁止未经确认直接执行付费调用(教训固化)**」→ 用 AskUserQuestion 把四榜缺口 + 三种范围 + 调用次数摊开确认,用户选「四榜全量 · 8 次」。
**执行(8 次调用,全部成功)**:
| 步骤 | 命令 | 调用 | 结果 |
|---|---|---|---|
| ① 视频热榜+点赞榜 | `mcn-data-insight/scripts/fetch_week_ranks.py --board both` | 2 | 各 50 条 → `视频热榜/`、`点赞榜/抖音周榜_{视频热榜,点赞榜}_2026-09-07.json` |
| ② 账号日榜 | `douyin-top-account/scripts/fetch_rank.py --period day` | 1 | 50 条 → `账号日榜/抖音账号日榜_2026-09-16.json` |
| ③ 账号周榜 5 赛道 | 同脚本 `--period week --category {生活vlog,小剧场,亲子,美食,旅行}` | 5 | 各 50 条 → `账号周榜/抖音周榜_{赛道}_2026-09-07.json` |
**★关键实现细节(踩过的坑)**:`fetch_rank.py` **只写 `--output` 指定的路径,不会自动按规范命名**;而文件名里的日期必须取 **API 返回的 `dateStart`**(不能猜 20:00 规则算出来的期号)。→ 写了 runner:**每榜只调 1 次 API**,结果先写临时文件 → 读 `dateStart` → `shutil.move` 到规范文件名。**若先调一次取日期再调一次写文件,调用次数会翻倍浪费额度**。runner 用完即删(`tools/_rank_fetch_runner.py`)。
**验证(工作台接口)**:`files 82→90`、`ageMin=0`;`week`→2026-09-07(09-07~09-13, 250 条/5 赛道)、`day`→2026-09-16(11 条)、`hot`→2026-09-07(15 条)、`likes`→2026-09-07(22 条)。⚠️ 接口 total 小于文件 50 条是**正常**:`dsh-data.js` 的 `RANK_KEEP` 白名单(生活记录/生活vlog/小剧场/亲子/美食/旅行)会过滤掉其余赛道。
**数据结论(白名单视角)**:**小剧场全面霸榜**——视频热榜 TOP10 里 4 条、点赞榜 TOP10 里 6 条都是小剧场;`周小闹` 是账号周榜小剧场第 1(95.4)且日榜第 1(93.7),视频热榜 3 条进 TOP14("饭店的暑假工"系列)。旅行赛道 `张舒克和黄贝塔` 双榜靠前。日榜白名单内仅 11 条(且 rank 分散到 32 位,说明全品类排名里其他赛道占位多)。
**字段差异备忘**:点赞榜/热榜条目用 `user_nickname` + `aweme_desc` + `add_digg_count`(新增点赞);账号榜用 `accountName` + `comprehensiveScore`。工作台表格渲染时取值字段不同。
---
### 视频热榜 / 点赞榜 增加「关注」(与账号榜一致)
**诉求**:「视频热榜 和 点赞榜 也增加关注功能,可关注视频对应账号,功能和账号榜一致」。
**先摸清语义(关键)**:账号榜「功能」列 = `inDb ? 查看(#/account/{dbId}) : 关注`,其中**「关注」不是 ⭐ 收藏开关**,而是 `confirmSaveAccount()` → 提交「分析账号」任务把该账号**加进账号列表**。⭐ 收藏只在账号列表页维护。视频热榜/点赞榜原本**没有功能列**,且 `dsh-data.js` 里写着「作品榜条目不查账号表」→ `inDb` 恒 false。
**改动(4 文件)**:
| 文件 | 改动 |
|---|---|
| `dsh-data.js` | `getRanking()` 删掉作品榜不查账号表的硬短路 → 四榜统一:有 `profileUrl` 时按 `sec_uid`、否则按**账号名**(`accountName \|\| user_nickname`)关联 `hot_accounts`,限 `del_flag=0`、同名单取已关注优先 → 输出 `inDb/dbId` |
| `data-pages.js` | 新增共用 `videoActTd()`;hot/likes 两榜 `span` 9→10 并补 `<th class="th-act">功能</th>`;`[data-import]` 绑定按 `data-import-video` 分流传 `ctx.fromVideo` |
| `app.js` | `confirmSaveAccount(name,url,btn,ctx)` 增第 4 参:作品榜来源时 desc 改「确认分析**该作品作者**并添加…」、prompt 显式要求**先打开作品页再从作者入口进主页**(作品链接 ≠ 账号主页地址) |
| `docs/工作台视觉交互规范.md` | §3.2 重写(四 tab + 四榜列结构 + 功能列判据)、新增坑 15、§7 变更记录 |
**★实测抓到的真 bug**:**视频热榜与点赞榜字段体系完全不同** —— 热榜 `accountName`/`title`/`workUrl`(**无** user_nickname/share_url),点赞榜 `user_nickname`/`aweme_desc`/`share_url`。我第一版前端只读 `user_nickname` → **热榜整列退化成「—」**。修法:一律双向回退 `user_nickname||accountName`、`share_url||workUrl`、`aweme_desc||title`。(已固化为规范坑 15)
**验证**:临时插一条 `周小闹` 到 `hot_accounts`(榜单里真实存在的名字)做**正向**验证 → 四榜均正确命中 `dbId`,且「周小闹(胡闹)」**未**被误匹配(精确匹配)。UI 实测:两榜 10 列、功能列分流正确(周小闹=查看 `#/account/1632` / 大圆哥=关注)、行高恒 42px、两榜列宽一致、账号榜无回归;关注确认弹窗 —— 作品榜「确认分析该作品作者并添加…」+ 作品链接,账号榜「确认分析该账号并添加…」+ 账号主页链接。**测完已删临时账号**(7→8→7)。
**踩坑**:①专用 Chrome 9333 有 2 个标签(含一个 liblib.tv 页,未动),跨标签后 `Page.reload` 报 `Not attached to an active page` → 改用 `location.replace('/?_r='+Date.now()+'#/...')` 强制整页重载(URL 变了必重新取文档)。②测试脚本的弹窗选择器必须排除 `#settingsModal`(它是 hidden 的静态节点,`querySelector('.modal-mask h3')` 会先命中它,读到「默认读取桌面 MCNSkill项目」)。
---
### 顶栏最右增加「刷新」纯图标按钮
**诉求**:「顶 header 区域最右侧增加刷新按钮(只要图标)」。
**改动(3 文件)**:`index.html` 加 `#btnReload`(`refresh` 图标 + `data-color="currentColor"`,无文字);`app.js` 绑定 `location.reload()`;`style.css` 加 `.top-actions .ghost.icon-only { padding: 6px 9px }`。
**★高度硬约束(本次重点验证)**:`main#view` 高 = `100vh − 55px`,顶栏一旦超过 55px 就复现"底部溢出 1px + 第二层滚动条"(规范坑 1)。纯图标态 35×31 比文字按钮 81×35 矮 → 实测 `topbar` **仍 55px**、`html/body` `906/906` 无滚动条、`view` 851 = 906−55 ✓。**顶栏新增控件必须比文字按钮矮。**
**★顺手修掉的根因(`svgIcon` 取色)**:`svgIcon(name,size,color)` 原先对 `color='currentColor'` 也注入 `style="color:currentColor"` —— 空操作(`stroke` 本就是 currentColor),但**内联样式优先级最高**,把 `.top-actions .ghost .ic{color:var(--dim)}` 与 hover 变主色整条规则废掉 → 表现是"同组图标里被传色那个偏深、hover 不变色"。修法:传 `'currentColor'` 时**不注入**内联色。另给 `initIcons()` 加 `data-color` 支持,让静态 HTML 能绕开 `ICON_COLORS` 功能色(顶栏 `refresh` 原本会被染成青色 `#0f7f8f`)。实测四图标计算色统一 `rgb(107,114,128)`(`--dim`)、hover 统一 `rgb(47,111,237)`(`--primary`)。(已固化为规范坑 16)
**验证**:按钮存在 / `textContent===''`(纯图标)/ 16×16 SVG / 位于最右(x 最大)/ 点击后 JS marker 消失(确为整页重载)/ 重载后按钮仍在。版本号:`style.css?v=20260918a`、`app.js?v=20260918e`、`help-guide.js?v=20260918c`、`data-pages.js?v=20260918c`。
**顺带修正 `help-guide.js` 三处过时文案**:榜单"三个 tab/三张榜"→ 四个(漏了账号日榜)、"重新抓取三榜"→ 四榜 + 约 8 次调用、"账号周榜每行有查看/关注"→ 四榜每行都有并补充 ⭐ 在账号列表页维护。