#!/usr/bin/env python3 # -*- coding: utf-8 -*- """批量去掉重复标题并重新上传到小程序。content_upload 已内置 strip 首行 # 标题。""" import subprocess import sys from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parent.parent BASE_2026 = Path("/Users/karuo/Documents/个人/2、我写的书/《一场soul的创业实验》/2026每日派对干货") BASE_9 = Path("/Users/karuo/Documents/个人/2、我写的书/《一场soul的创业实验》/第四篇|真实的赚钱/第9章|我在Soul上亲访的赚钱案例") # (id, title, md_file_path relative to BASE_2026 or "9" for BASE_9) CHAPTERS_2026 = [ ("10.01", "第102场|今年第一个红包你发给谁", BASE_2026 / "第102场|今年第一个红包你发给谁.md"), ("10.02", "第103场|号商、某客与炸房", BASE_2026 / "第103场|号商、某客与炸房.md"), ("10.03", "第105场|创业社群、直播带货与程序员", BASE_2026 / "第105场|创业社群、直播带货与程序员.md"), ("10.04", "第104场|婚恋、AI客服与一个微信", BASE_2026 / "第104场|婚恋、AI客服与一个微信.md"), ("10.05", "第107场|性格、陪伴经济与本地AI", BASE_2026 / "第107场|性格、陪伴经济与本地AI.md"), ("10.06", "第108场|Soul场观400等于抖音1万", BASE_2026 / "第108场|Soul场观400等于抖音1万.md"), ("10.07", "第111场|平台规则变了怎么办", BASE_2026 / "第111场|平台规则变了怎么办.md"), ("10.08", "第110场|Soul变现逻辑全程公开", BASE_2026 / "第110场|Soul变现逻辑全程公开.md"), ("10.09", "第112场|一个人起头,维权挣了大半套房", BASE_2026 / "第112场|一个人起头,维权挣了大半套房.md"), ("10.10", "第113场|不会选择怎么办?", BASE_2026 / "第113场|不会选择怎么办?.md"), ("10.11", "第114场|人跟人差别,以前没 AI 差 100 倍,有 AI 差 1 万倍。", BASE_2026 / "第114场-人跟人差别,以前没 AI 差 100 倍,有 AI 差 1 万倍。.md"), ("10.12", "第115场|一天改变,可控的事先做", BASE_2026 / "第115场|一天改变,可控的事先做.md"), ("10.13", "第116场|钱是大风刮来的,怎么抓住?", BASE_2026 / "第116场|钱是大风刮来的,怎么抓住?.md"), ("10.14", "第117场|流水百万挣八千,你还干不干?", BASE_2026 / "第117场|流水百万挣八千,你还干不干?.md"), ("10.15", "第118场|运气是选出来的,不是等出来的", BASE_2026 / "第118场|运气是选出来的,不是等出来的.md"), ("10.16", "第119场|开派对的初心是早上不影响老婆睡觉", BASE_2026 / "第119场|开派对的初心是早上不影响老婆睡觉.md"), ("10.17", "第120场|发视频就有钱,这才是最低门槛的AI副业", BASE_2026 / "第120场|发视频就有钱,这才是最低门槛的AI副业.md"), ] CHAPTERS_9 = [ ("9.15", "派对副业|做切片分发和副业分发的具体步骤与收益", BASE_9 / "9.15 派对副业.md"), ("9.16", "如何开Soul派对|房主避坑、流量、变现与封号", BASE_9 / "9.16 如何开Soul派对|房主避坑、流量、变现与封号.md"), ] def run_upload(section_id: str, title: str, content_file: Path, part: str, chapter: str) -> bool: if not content_file.exists(): print(f" 跳过 {section_id}: 文件不存在 {content_file}") return False cmd = [ sys.executable, str(PROJECT_ROOT / "content_upload.py"), "--id", section_id, "--title", title, "--content-file", str(content_file), "--part", part, "--chapter", chapter, "--price", "1.0", ] r = subprocess.run(cmd, cwd=str(PROJECT_ROOT)) return r.returncode == 0 def main(): ok, fail = 0, 0 for sid, title, fpath in CHAPTERS_2026: print(f"上传 {sid} {title[:30]}...") if run_upload(sid, title, fpath, "part-2026-daily", "chapter-2026-daily"): ok += 1 else: fail += 1 for sid, title, fpath in CHAPTERS_9: print(f"上传 {sid} {title[:30]}...") if run_upload(sid, title, fpath, "part-4", "chapter-9"): ok += 1 else: fail += 1 print(f"\n完成: 成功 {ok}, 失败 {fail}") if __name__ == "__main__": main()