得到课程同步到 Get 笔记
把浏览器登录态只用于发现用户有权访问的课程文章网址,把全文提取交给 Get笔记。不要复制课程正文、Cookie、令牌或请求签名到本地文件或对话中。
前提与输出
- 使用 Codex 浏览器插件连接用户已经登录的
dedao.cn页面;不要导出 Cookie。 - 确认
getnote auth status显示已授权。 - 输出一份课程清单 JSON、一份同步状态 JSON,以及最终数量汇总。
- 默认同步当前已发布内容;课程规划中尚未发布的讲次只报告,不伪造网址。
工作流
1. 建立课程清单
- 从用户给出的任一课程文章进入课程页或目录。
- 读取 浏览器提取说明,再使用当前安装的浏览器控制技能。
- 从课程目录数据或浏览器网络响应中只提取安全字段:
order_num、title、enid、发布状态和发布时间。 - 生成规范网址:
https://www.dedao.cn/course/article?id=<enid>。 - 按
enid和规范网址去重;排除未发布、非正文、推荐内容、评论和其他课程文章。 - 把清单保存为 JSON 文件。默认放在当前任务输出目录;不要放进技能目录。
清单格式:
[
{
"order": 1,
"title": "发刊词:现代精英的思维武器库",
"enid": "qzk8vQM4oYjrXm1Ao9Xw6bEOLl5GPx",
"url": "https://www.dedao.cn/course/article?id=qzk8vQM4oYjrXm1Ao9Xw6bEOLl5GPx"
}
]
先抽查首篇、中段和末篇网址,确认三者都能在当前登录态下打开正确正文。记录课程规划总数与当前已发布数;两者不一致通常表示课程仍在更新。
2. 先预检,不直接写入
运行:
python3 scripts/sync_getnote.py /absolute/path/course-articles.json --dry-run
预检会:
- 校验网址确属得到课程正文;
- 合并清单中的重复文章;
- 用 Get笔记标题搜索,并进一步核对候选笔记的来源网址;
- 把同网址或标准化后同标题的内容判为已存在。
如果课程在创建本技能前已经同步过、没有同步状态文件,首次迁移使用完整网址扫描:
python3 scripts/sync_getnote.py /absolute/path/course-articles.json --dry-run --url-scan-pages 0
0 会检查全部 Get笔记链接笔记,可能较慢;平时默认只扫描最近 10 页,并用语义候选网址和本地状态共同查重。
向用户报告“已发布、已存在、待新增”三个数字。如果用户只要求计划或数量盘点,到此停止。
3. 批量同步
确认用户要求执行后运行:
python3 scripts/sync_getnote.py /absolute/path/course-articles.json
脚本默认最多三条并发,每个失败项重试一次,并在清单旁写入 <清单名>.sync-state.json。使用同一清单重跑时,会跳过状态文件中已成功或已判重的网址,实现断点续传。
不要把并发调得高于 3。Get笔记的网页提取队列可能较慢;命令仍运行时继续轮询,但每 60 秒内给用户一次简短进度。
4. 核验与收尾
不得把“命令退出码为 0”直接当作全文生成成功。以脚本最终状态为准:它会核对任务状态、笔记 ID、来源网址和已生成内容,并在必要时按标题反查实际落库结果。
完成后对照课程清单汇总:
- 课程规划总数;
- 当前已发布数;
- 已有重复数;
- 本次新增数;
- 最终失败数及对应标题;
- 尚未发布数。
若登录失效,停止并请用户在浏览器中重新登录;不要索要或读取 Cookie 内容。若得到页面结构变化,保留清单与同步状态,从浏览器提取阶段恢复,不要重复写入已成功笔记。
安全边界
- 只处理用户已购买或本来有权访问的内容。
- 不绕过付费墙、登录、设备验证或访问控制。
- 不持久化
Cookie、Authorization、dd_article_token、签名参数或完整网络响应。 - 不把课程全文写入本地中间文件;Get笔记只接收准确网址并自行提取。
- 不删除或覆盖已有 Get笔记;疑似重复时宁可跳过并报告。