Files
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

8.3 KiB
Raw Permalink Blame History

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 次调用、"账号周榜每行有查看/关注"→ 四榜每行都有并补充 ⭐ 在账号列表页维护。