From 0cd6d779da0ba387f045f3a95afadd2878218e70 Mon Sep 17 00:00:00 2001 From: karuo Date: Tue, 10 Mar 2026 15:02:49 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=84=20=E5=8D=A1=E8=8B=A5AI=20=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=202026-03-10=2015:02=20|=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=EF=BC=9A=E5=8D=A1=E6=9C=A8=E3=80=81=E8=BF=90=E8=90=A5=E4=B8=AD?= =?UTF-8?q?=E6=9E=A2=E5=B7=A5=E4=BD=9C=E5=8F=B0=20|=20=E6=8E=92=E9=99=A4?= =?UTF-8?q?=20>20MB:=2011=20=E4=B8=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../木叶_视频内容/B站发布/脚本/bilibili_publish.py | 9 +++++-- .../木叶_视频内容/多平台分发/脚本/publish_log.json | 14 +++++++++++ .../多平台分发/脚本/publish_result.py | 6 +++++ .../小红书发布/脚本/xiaohongshu_publish.py | 24 +++++++++++++------ .../小红书发布/脚本/xiaohongshu_storage_state.json | 2 +- .../快手发布/脚本/kuaishou_publish.py | 24 +++++++++++++------ .../快手发布/脚本/kuaishou_storage_state.json | 2 +- .../视频号发布/脚本/channels_publish.py | 24 +++++++++++++------ 运营中枢/工作台/gitea_push_log.md | 1 + 运营中枢/工作台/代码管理.md | 1 + 10 files changed, 82 insertions(+), 25 deletions(-) diff --git a/03_卡木(木)/木叶_视频内容/B站发布/脚本/bilibili_publish.py b/03_卡木(木)/木叶_视频内容/B站发布/脚本/bilibili_publish.py index 6f12c87f..ef14f10c 100644 --- a/03_卡木(木)/木叶_视频内容/B站发布/脚本/bilibili_publish.py +++ b/03_卡木(木)/木叶_视频内容/B站发布/脚本/bilibili_publish.py @@ -15,7 +15,7 @@ COOKIE_FILE = SCRIPT_DIR / "bilibili_storage_state.json" VIDEO_DIR = Path("/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片") sys.path.insert(0, str(SCRIPT_DIR.parent.parent / "多平台分发" / "脚本")) -from publish_result import PublishResult +from publish_result import PublishResult, is_published UA = ( "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) " @@ -264,13 +264,18 @@ async def _playwright_publish(video_path: str, title: str) -> PublishResult: ) -async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) -> PublishResult: +async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1, skip_dedup: bool = False) -> PublishResult: """API 优先 → Playwright 兜底""" fname = Path(video_path).name fsize = Path(video_path).stat().st_size print(f"\n[{idx}/{total}] {fname} ({fsize/1024/1024:.1f}MB)", flush=True) print(f" 标题: {title[:60]}", flush=True) + if not skip_dedup and is_published("B站", video_path): + print(f" [跳过] 该视频已发布到B站", flush=True) + return PublishResult(platform="B站", video_path=video_path, title=title, + success=True, status="skipped", message="去重跳过(已发布)") + if not COOKIE_FILE.exists(): return PublishResult( platform="B站", video_path=video_path, title=title, diff --git a/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_log.json b/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_log.json index 76c4aaad..3d672592 100644 --- a/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_log.json +++ b/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_log.json @@ -5,3 +5,17 @@ {"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 33.28828287124634, "timestamp": "2026-03-10 14:17:35"} {"platform": "快手", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "published", "message": "发布成功", "screenshot": "/tmp/kuaishou_result.png", "elapsed_sec": 41.6892192363739, "timestamp": "2026-03-10 14:17:43"} {"platform": "视频号", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/早起不是为了开派对,是不吵老婆睡觉.mp4", "title": "每天6点起床不是因为自律,是因为老婆还在睡 #Soul派对 #创业日记", "success": true, "status": "reviewing", "message": "已跳转到内容管理(发表成功)", "screenshot": "/tmp/channels_result.png", "elapsed_sec": 25.486361026763916, "timestamp": "2026-03-10 14:17:27"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/ICU出来一年多 活着要在互联网上留下东西.mp4", "title": "ICU出来一年多,活着就要在互联网上留下东西 #人生感悟 #创业觉醒", "success": true, "status": "published", "message": "页面已重置(发布成功)", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 23.01875376701355, "timestamp": "2026-03-10 15:00:58"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/MBTI疗愈SOUL 年轻人测MBTI,40到60岁走五行八卦.mp4", "title": "20岁测MBTI,40岁该学五行八卦了 #MBTI #认知觉醒", "success": true, "status": "reviewing", "message": "已提交,请确认截图", "screenshot": "/tmp/xhs_result.png", "elapsed_sec": 22.772515773773193, "timestamp": "2026-03-10 15:01:24"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul业务模型 派对+切片+小程序全链路.mp4", "title": "派对获客→AI切片→小程序变现,全链路拆解 #商业模式 #一人公司", "success": false, "status": "error", "message": "异常: [Errno 32] Broken pipe", "elapsed_sec": 13.620775938034058, "timestamp": "2026-03-10 15:01:41"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/Soul切片30秒到8分钟 AI半小时能剪10到30个.mp4", "title": "AI剪辑半小时出10到30条切片,内容工厂效率密码 #AI剪辑 #内容效率", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:44"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/初期团队先找两个IS,比钱好使 ENFJ链接人,ENTJ指挥.mp4", "title": "创业初期先找两个IS型人格,比融资好使十倍 #MBTI创业 #团队搭建", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:47"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/刷牙听业务逻辑 Soul切片变现怎么跑.mp4", "title": "刷牙3分钟听完一套变现逻辑 #碎片创业 #副业逻辑", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:50"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/国学易经怎么学 两小时七七八八,召唤作者对话.mp4", "title": "易经两小时学个七七八八,关键是跟古人对话 #国学 #易经入门", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:53"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/广点通能投Soul了,1000曝光6到10块.mp4", "title": "广点通能投Soul了!1000曝光只要6到10块 #广点通 #低成本获客", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:56"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/建立信任不是求来的 卖外挂发邮件三个月拿下德国总代.mp4", "title": "信任不是求来的,发三个月邮件拿下德国总代理 #销售思维 #信任建立", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:01:59"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/懒人的活法 动作简单有利可图正反馈.mp4", "title": "懒人也能赚钱?动作简单、有利可图、正反馈 #Soul派对 #副业思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:02"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/核心就两个字 筛选。能开派对坚持7天的人再谈.mp4", "title": "核心就两个字:筛选。能坚持7天的人才值得深聊 #筛选思维 #创业认知", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:05"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/睡眠不好?每天放下一件事,做减法.mp4", "title": "睡不好不是太累,是脑子装太多,每天做减法 #做减法 #心理健康", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:08"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/这套体系花了170万,但前端几十块就能参与.mp4", "title": "后端花170万搭体系,前端几十块就能参与 #商业认知 #体系思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:11"} +{"platform": "小红书", "video_path": "/Users/karuo/Movies/soul视频/soul 派对 119场 20260309_output/成片/金融AI获客体系 后端30人沉淀12年,前端丢手机.mp4", "title": "后端30人沉淀12年,前端就丢个手机号 #AI获客 #系统思维", "success": false, "status": "error", "message": "[Errno 32] Broken pipe", "elapsed_sec": 0.0, "timestamp": "2026-03-10 15:02:14"} diff --git a/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_result.py b/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_result.py index defedd96..d17fbe53 100644 --- a/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_result.py +++ b/03_卡木(木)/木叶_视频内容/多平台分发/脚本/publish_result.py @@ -62,6 +62,12 @@ def load_published_set() -> set[tuple[str, str]]: return published +def is_published(platform: str, video_path: str) -> bool: + """检查某条视频是否已成功发布到某平台(供各平台脚本直接调用)""" + fname = Path(video_path).name + return (platform, fname) in load_published_set() + + def load_failed_tasks() -> list[dict]: """加载失败任务列表(用于重试)""" failed = [] diff --git a/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_publish.py b/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_publish.py index 2a46b2bc..039d477e 100644 --- a/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_publish.py +++ b/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_publish.py @@ -54,8 +54,9 @@ TITLES = { } -async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) -> PublishResult: +async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1, skip_dedup: bool = False) -> PublishResult: from playwright.async_api import async_playwright + from publish_result import is_published fname = Path(video_path).name fsize = Path(video_path).stat().st_size @@ -63,6 +64,11 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) print(f"\n[{idx}/{total}] {fname} ({fsize/1024/1024:.1f}MB)", flush=True) print(f" 标题: {title[:60]}", flush=True) + if not skip_dedup and is_published("小红书", video_path): + print(f" [跳过] 该视频已发布到小红书", flush=True) + return PublishResult(platform="小红书", video_path=video_path, title=title, + success=True, status="skipped", message="去重跳过(已发布)") + if not COOKIE_FILE.exists(): return PublishResult(platform="小红书", video_path=video_path, title=title, success=False, status="error", message="Cookie 不存在") @@ -217,6 +223,8 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) async def main(): + from publish_result import print_summary, save_results + if not COOKIE_FILE.exists(): print("[✗] Cookie 不存在") return 1 @@ -227,17 +235,19 @@ async def main(): return 1 print(f"共 {len(videos)} 条视频\n") - ok_count = 0 + results = [] for i, vp in enumerate(videos): t = TITLES.get(vp.name, f"{vp.stem} #Soul派对 #创业日记") - ok = await publish_one(str(vp), t, i + 1, len(videos)) - if ok: - ok_count += 1 + r = await publish_one(str(vp), t, i + 1, len(videos)) + results.append(r) if i < len(videos) - 1: await asyncio.sleep(5) - print(f"\n成功: {ok_count}/{len(videos)}") - return 0 if ok_count == len(videos) else 1 + actual = [r for r in results if r.status != "skipped"] + print_summary(actual) + save_results(actual) + ok = sum(1 for r in actual if r.success) + return 0 if ok == len(actual) else 1 if __name__ == "__main__": diff --git a/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_storage_state.json b/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_storage_state.json index 0bdd3e7e..4400e0d5 100644 --- a/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_storage_state.json +++ b/03_卡木(木)/木叶_视频内容/小红书发布/脚本/xiaohongshu_storage_state.json @@ -1 +1 @@ -{"cookies": [{"name": "xsecappid", "value": "ugc", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804659431, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "a1", "value": "19cd60a9fc67sq38y42r4sqx5kmpc1i6ahui3k5mm30000687072", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804653546, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "webId", "value": "5a9ea25c0c3028732e8d594ed19a4a4e", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804653546, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gid", "value": "yjSfK800DW0KyjSfK80jixT2SKWMAqYv4JF4766MAC2T63q8USy3Kq888KYW8WJ8WqjSSYDi", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807683435.411286, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "customer-sso-sid", "value": "68c5176154819623929937970htobts05deiiuxh", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773722366.852965, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "x-user-id-creator.xiaohongshu.com", "value": "63b3cb6f000000002502c21d", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807677567.852995, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "customerClientId", "value": "586477551116322", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807677567.853006, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "access-token-creator.xiaohongshu.com", "value": "customer.creator.AT-68c517615481962393042947iutloo5r1fnkfqt3", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709566.853013, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "galaxy_creator_session_id", "value": "ksy02Mkehi3ye5IR60P01klUicMIL9V5Qscz", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709567.853097, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "galaxy.creator.beaker.session.id", "value": "1773117567623092062639", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709567.853107, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "loadts", "value": "1773123431895", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804659431, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "0a0d096b17731234320692490e656e87fbcc16ba177a0f83ebd4c72ba8ac5a", "domain": "creator.xiaohongshu.com", "path": "/", "expires": 1773125232.174955, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "0a50874c17731234323314976e70f7cd11a1a2a04f1cf69033e923e0a8b1c9", "domain": "edith.xiaohongshu.com", "path": "/", "expires": 1773125232.273574, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "websectiga", "value": "9730ffafd99f2d09dc024760e253af6ab1feb0002827740b95a255ddf6847fc8", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773382632, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "sec_poison_id", "value": "981ca2cf-8c65-455a-8fc8-88fa33894047", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773124037, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://creator.xiaohongshu.com", "localStorage": [{"name": "USER_INFO_FOR_BIZ", "value": "{\"userId\":\"63b3cb6f000000002502c21d\",\"userName\":\"#\u5361\u82e5\ud83d\udd25(4:00\u8d77\u5e8a\u7684\u7537\u4eba)\",\"userAvatar\":\"https://sns-avatar-qc.xhscdn.com/avatar/65a68110d4b53385b6a72ed1.jpg?imageView2/2/w/80/format/jpg\",\"redId\":\"6244231151\",\"role\":\"creator\",\"permissions\":[\"creatorCollege\",\"creatorWiki\",\"noteInspiration\",\"creatorHome\",\"creatorData\",\"USER_GROUP\",\"creatorActivityCenter\",\"ORIGINAL_STATEMENT\"],\"zone\":\"86\",\"phone\":\"15880802661\",\"relatedUserId\":null,\"relatedUserName\":null,\"kolCoOrder\":false}"}, {"name": "uploader-permit-video-spectrum", "value": "{\"\u5e7f\u70b9\u901a\u80fd\u6295Soul\u4e86\uff0c1000\u66dd\u51496\u523010\u5757.mp4-3033345\":null,\"\u7761\u7720\u4e0d\u597d\uff1f\u6bcf\u5929\u653e\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u505a\u51cf\u6cd5.mp4-7022452\":null,\"\u6838\u5fc3\u5c31\u4e24\u4e2a\u5b57 \u7b5b\u9009\u3002\u80fd\u5f00\u6d3e\u5bf9\u575a\u63017\u5929\u7684\u4eba\u518d\u8c08.mp4-8324133\":null,\"\u8fd9\u5957\u4f53\u7cfb\u82b1\u4e86170\u4e07\uff0c\u4f46\u524d\u7aef\u51e0\u5341\u5757\u5c31\u80fd\u53c2\u4e0e.mp4-9668726\":null,\"\u65e9\u8d77\u4e0d\u662f\u4e3a\u4e86\u5f00\u6d3e\u5bf9\uff0c\u662f\u4e0d\u5435\u8001\u5a46\u7761\u89c9.mp4-5788932\":null}"}, {"name": "publish-uploader-history-upload-speed", "value": "[{\"speed\":[0],\"domain\":\"ros-upload.xiaohongshu.com\",\"timestamp\":1773123438442},{\"speed\":[3.5286009648518264],\"domain\":\"ros-upload-d4.xhscdn.com\",\"timestamp\":1773123439893}]"}, {"name": "snsWebPublishCurrentUser", "value": "63b3cb6f000000002502c21d"}, {"name": "USER_INFO", "value": "{\"user\":{\"type\":\"User\",\"value\":{\"userId\":\"63b3cb6f000000002502c21d\",\"loginUserType\":\"creator\"}}}"}, {"name": "NEW_XHS_ABTEST_REPORT_KEY", "value": "{\"5a9ea25c0c3028732e8d594ed19a4a4e63b3cb6f000000002502c21d\":\"2026-03-10\"}"}, {"name": "b1b1", "value": "1"}, {"name": "score_display", "value": "1"}, {"name": "p1", "value": "8"}, {"name": "nps-userId", "value": "63b3cb6f000000002502c21d"}, {"name": "_speedList", "value": "[{\"ts\":1773119920874,\"speed\":210755388.66666666},{\"ts\":1773119920894,\"speed\":33181579},{\"ts\":1773120703041,\"speed\":201955666.66666666},{\"ts\":1773120703058,\"speed\":49044342.333333336},{\"ts\":1773120809464,\"speed\":90950888.66666667},{\"ts\":1773120809466,\"speed\":50470266.333333336},{\"ts\":1773121636664,\"speed\":123234916.66666667},{\"ts\":1773121636683,\"speed\":59541241},{\"ts\":1773123445647,\"speed\":128041694.33333333},{\"ts\":1773123445681,\"speed\":42702664}]"}, {"name": "score_timestamp", "value": "1773119928816"}, {"name": "last_tiga_update_time", "value": "1773123432342"}, {"name": "uploader-permit-image-spectrum", "value": "{\"cover.jpeg-291551\":null,\"cover.jpeg-298713\":null,\"cover.jpeg-233484\":null,\"cover.jpeg-287062\":null}"}, {"name": "sdt_source_storage_key", "value": "{\"extraInfo\":{},\"reportUrl\":\"/api/sec/v1/shield/webprofile\",\"validate\":false,\"signUrl\":\"https://fe-static.xhscdn.com/as/v1/f218/a15/public/04b29480233f4def5c875875b6bdc3b1.js\",\"signVersion\":\"1\",\"url\":\"https://fe-static.xhscdn.com/as/v2/fp/962356ead351e7f2422eb57edff6982d.js\",\"desVersion\":\"2\",\"commonPatch\":[\"/fe_api/burdock/v2/note/post\",\"/api/sns/web/v1/comment/post\",\"/api/sns/web/v1/note/like\",\"/api/sns/web/v1/note/collect\",\"/api/sns/web/v1/user/follow\",\"/api/sns/web/v1/feed\",\"/api/sns/web/v1/login/activate\",\"/api/sns/web/v1/note/metrics_report\",\"/api/redcaptcha\",\"/api/store/jpd/main\",\"/phoenix/api/strategy/getAppStrategy\",\"/web_api/sns/v2/note\"],\"xhsTokenUrl\":\"https://fe-static.xhscdn.com/as/v1/3e44/public/bf7d4e32677698655a5cadc581fd09b3.js\"}"}, {"name": "b1", "value": "I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSnMDKutRI3KsYorWHPtGrbi0P9WfIi/eWc6eYqtyQApPI37ekmR6QLQ5Ii6sdneeSfqYHqwl2qt5B0DBIx+PGDV/sutkIx0sxuwr4qtiIhuaIE3e3LV0I3VTIC7e0Vtl2ADmsLveDSKsSPw5IEvsiVtJOqw8BuwfPpdeTFWOIx4TIiu6ZPwrPut5IvlaLbgs3qtxIxes1VwHIkumIkIyejgsY/WTge7eSqte/D7sDcpipedeYrDtIC6eDVw2IENsSqtlnlSuNjVtIvoekqt3cZ7sVo4gIESyIhEg+9DUIvzy4I8OIic7ZPwAIviv4o/sDLds6PwVIC7eSd7e0ez4IEvsxcZMtVwUIids3s/sxZNeiVtbcUeeYVwEIvlzc/3efuwXpBJsDPwbIxltIxZSouwOgVwpsr4heU/e6LveDPwFIvgs1ros1DZiIi7sjbos3grFIE0e3PtvIibROqwOOqthIxes1VwDIEgekVw5Ih3sjuw5NqwnoVwuICckI3HrN9iiJcAe1uwvIk4mIhdsDqwK2gTrb9OeWdpDIhDLJqtKaqwuIv6e6VtxQL/e3lAsiMmLIiAsx7esTutycPwOIvJeSPwvIigex0IrICdeS9Je0Pt9Ix3sxuwU4eQNIEH+Iv7sxM6ex7vsYDosSPtzIkL1IhVGGuwlIkD+IxNe0AkyabdekPwuIxWvKPwsmoKexUNsTut9qVtRIkqNIvRV+VtTZPwJIiNsVe5eWqwxJutdICm6QVtqIkDCPYGhIxgsip0siFve6VwFBqtvI3WfIk3sSqteIC7e6oz/IhQUPUR9IERSIh7eYPwLquteoVt8IkPcICNsSl0eSVwN4oVnIEIMnut1QVtfIiqZIkTvI3S2Iv0edb5sj9kKsVwSIEI/yVwjQuwpIvNeDrWZIxqg2S/exutPNPtVeUEgbsbFIklvguwlIhAsTpQcIEp8sqwGIk+qQqtRoPt/IhIwIv4YICSgOuwuIihQIEesiuwjmmbWIEZeICosYMJsiqw5IvE7IhGHalchIC4Y//FdIv6sYFde0PwJIhOsDutJIEq/IxgsWc=="}, {"name": "_renderInfo", "value": "angle (google, vulkan 1.3.0 (swiftshader device (llvm 10.0.0) (0x0000c0de)), swiftshader driver)"}, {"name": "xhs_context_networkQuality", "value": "WEAK"}]}]} \ No newline at end of file +{"cookies": [{"name": "xsecappid", "value": "ugc", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804662063, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "a1", "value": "19cd60a9fc67sq38y42r4sqx5kmpc1i6ahui3k5mm30000687072", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804653546, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "webId", "value": "5a9ea25c0c3028732e8d594ed19a4a4e", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804653546, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gid", "value": "yjSfK800DW0KyjSfK80jixT2SKWMAqYv4JF4766MAC2T63q8USy3Kq888KYW8WJ8WqjSSYDi", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807686065.84723, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "customer-sso-sid", "value": "68c5176154819623929937970htobts05deiiuxh", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773722366.852965, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "x-user-id-creator.xiaohongshu.com", "value": "63b3cb6f000000002502c21d", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807677567.852995, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "customerClientId", "value": "586477551116322", "domain": ".xiaohongshu.com", "path": "/", "expires": 1807677567.853006, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "access-token-creator.xiaohongshu.com", "value": "customer.creator.AT-68c517615481962393042947iutloo5r1fnkfqt3", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709566.853013, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "galaxy_creator_session_id", "value": "ksy02Mkehi3ye5IR60P01klUicMIL9V5Qscz", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709567.853097, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "galaxy.creator.beaker.session.id", "value": "1773117567623092062639", "domain": ".xiaohongshu.com", "path": "/", "expires": 1775709567.853107, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "0a0d0eb817731260369211379e71156a6d4f2a4944a12ab612246bdf85da66", "domain": "creator.xiaohongshu.com", "path": "/", "expires": 1773127836.850927, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "websectiga", "value": "82e85efc5500b609af1166aaf086ff8aa4261153a448ef0be5b17417e4512f28", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773385237, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "sec_poison_id", "value": "3e7d16ee-ebf9-4fb7-b184-16f1bc4c04aa", "domain": ".xiaohongshu.com", "path": "/", "expires": 1773126642, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "0ad583f417731260377445867e00a839bfc45fec40b3e01c3ed7ef58dadbfd", "domain": "edith.xiaohongshu.com", "path": "/", "expires": 1773127837.689612, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "0a00dc2417731260540056198e18eb1db71fef1fe42675cbb7bfa569dbaae4", "domain": "www.xiaohongshu.com", "path": "/", "expires": 1773127853.936156, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "loadts", "value": "1773126063233", "domain": ".xiaohongshu.com", "path": "/", "expires": 1804662063, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://creator.xiaohongshu.com", "localStorage": [{"name": "USER_INFO_FOR_BIZ", "value": "{\"userId\":\"63b3cb6f000000002502c21d\",\"userName\":\"#\u5361\u82e5\ud83d\udd25(4:00\u8d77\u5e8a\u7684\u7537\u4eba)\",\"userAvatar\":\"https://sns-avatar-qc.xhscdn.com/avatar/65a68110d4b53385b6a72ed1.jpg?imageView2/2/w/80/format/jpg\",\"redId\":\"6244231151\",\"role\":\"creator\",\"permissions\":[\"creatorCollege\",\"creatorWiki\",\"noteInspiration\",\"creatorHome\",\"creatorData\",\"USER_GROUP\",\"creatorActivityCenter\",\"ORIGINAL_STATEMENT\"],\"zone\":\"86\",\"phone\":\"15880802661\",\"relatedUserId\":null,\"relatedUserName\":null,\"kolCoOrder\":false}"}, {"name": "uploader-permit-video-spectrum", "value": "{\"\u5e7f\u70b9\u901a\u80fd\u6295Soul\u4e86\uff0c1000\u66dd\u51496\u523010\u5757.mp4-3033345\":null,\"\u7761\u7720\u4e0d\u597d\uff1f\u6bcf\u5929\u653e\u4e0b\u4e00\u4ef6\u4e8b\uff0c\u505a\u51cf\u6cd5.mp4-7022452\":null,\"\u6838\u5fc3\u5c31\u4e24\u4e2a\u5b57 \u7b5b\u9009\u3002\u80fd\u5f00\u6d3e\u5bf9\u575a\u63017\u5929\u7684\u4eba\u518d\u8c08.mp4-8324133\":null,\"\u8fd9\u5957\u4f53\u7cfb\u82b1\u4e86170\u4e07\uff0c\u4f46\u524d\u7aef\u51e0\u5341\u5757\u5c31\u80fd\u53c2\u4e0e.mp4-9668726\":null,\"\u65e9\u8d77\u4e0d\u662f\u4e3a\u4e86\u5f00\u6d3e\u5bf9\uff0c\u662f\u4e0d\u5435\u8001\u5a46\u7761\u89c9.mp4-5788932\":null,\"ICU\u51fa\u6765\u4e00\u5e74\u591a \u6d3b\u7740\u8981\u5728\u4e92\u8054\u7f51\u4e0a\u7559\u4e0b\u4e1c\u897f.mp4-9669632\":null,\"MBTI\u7597\u6108SOUL \u5e74\u8f7b\u4eba\u6d4bMBTI\uff0c40\u523060\u5c81\u8d70\u4e94\u884c\u516b\u5366.mp4-10459668\":null}"}, {"name": "publish-uploader-history-upload-speed", "value": "[{\"speed\":[0],\"domain\":\"ros-upload.xiaohongshu.com\",\"timestamp\":1773126068900},{\"speed\":[0],\"domain\":\"ros-upload-d4.xhscdn.com\",\"timestamp\":1773126073901}]"}, {"name": "snsWebPublishCurrentUser", "value": "63b3cb6f000000002502c21d"}, {"name": "USER_INFO", "value": "{\"user\":{\"type\":\"User\",\"value\":{\"userId\":\"63b3cb6f000000002502c21d\",\"loginUserType\":\"creator\"}}}"}, {"name": "NEW_XHS_ABTEST_REPORT_KEY", "value": "{\"5a9ea25c0c3028732e8d594ed19a4a4e63b3cb6f000000002502c21d\":\"2026-03-10\"}"}, {"name": "b1b1", "value": "1"}, {"name": "score_display", "value": "1"}, {"name": "p1", "value": "10"}, {"name": "nps-userId", "value": "63b3cb6f000000002502c21d"}, {"name": "_speedList", "value": "[{\"ts\":1773120809464,\"speed\":90950888.66666667},{\"ts\":1773120809466,\"speed\":50470266.333333336},{\"ts\":1773121636664,\"speed\":123234916.66666667},{\"ts\":1773121636683,\"speed\":59541241},{\"ts\":1773123445647,\"speed\":128041694.33333333},{\"ts\":1773123445681,\"speed\":42702664},{\"ts\":1773126043391,\"speed\":133890527.66666667},{\"ts\":1773126043409,\"speed\":80095987},{\"ts\":1773126068675,\"speed\":221171523.66666666},{\"ts\":1773126068698,\"speed\":40096813.333333336}]"}, {"name": "score_timestamp", "value": "1773119928816"}, {"name": "last_tiga_update_time", "value": "1773126037681"}, {"name": "uploader-permit-image-spectrum", "value": "{\"cover.jpeg-291551\":null,\"cover.jpeg-298713\":null,\"cover.jpeg-233484\":null,\"cover.jpeg-287062\":null,\"cover.jpeg-297342\":null}"}, {"name": "sdt_source_storage_key", "value": "{\"url\":\"https://fe-static.xhscdn.com/as/v2/fp/962356ead351e7f2422eb57edff6982d.js\",\"desVersion\":\"2\",\"signUrl\":\"https://fe-static.xhscdn.com/as/v1/f218/a15/public/04b29480233f4def5c875875b6bdc3b1.js\",\"xhsTokenUrl\":\"https://fe-static.xhscdn.com/as/v1/3e44/public/bf7d4e32677698655a5cadc581fd09b3.js\",\"reportUrl\":\"/api/sec/v1/shield/webprofile\",\"validate\":false,\"commonPatch\":[\"/fe_api/burdock/v2/note/post\",\"/api/sns/web/v1/comment/post\",\"/api/sns/web/v1/note/like\",\"/api/sns/web/v1/note/collect\",\"/api/sns/web/v1/user/follow\",\"/api/sns/web/v1/feed\",\"/api/sns/web/v1/login/activate\",\"/api/sns/web/v1/note/metrics_report\",\"/api/redcaptcha\",\"/api/store/jpd/main\",\"/phoenix/api/strategy/getAppStrategy\",\"/web_api/sns/v2/note\"],\"signVersion\":\"1\",\"extraInfo\":{}}"}, {"name": "b1", "value": "I38rHdgsjopgIvesdVwgIC+oIELmBZ5e3VwXLgFTIxS3bqwErFeexd0ekncAzMFYnqthIhJeSnMDKutRI3KsYorWHPtGrbi0P9WfIi/eWc6eYqtyQApPI37ekmR6QLQ5Ii6sdneeSfqYHqwl2qt5B0DBIx+PGDV/sutkIx0sxuwr4qtiIhuaIE3e3LV0I3VTIC7e0Vtl2ADmsLveDSKsSPw5IEvsiVtJOqw8BuwfPpdeTFWOIx4TIiu6ZPwrPut5IvlaLbgs3qtxIxes1VwHIkumIkIyejgsY/WTge7eSqte/D7sDcpipedeYrDtIC6eDVw2IENsSqtlnlSuNjVtIvoekqt3cZ7sVo4gIESyIhE2QnquIxhnqz8gIkIfoqwkICZWG73sdlOeVPw3IvAe0fged0MnIi5s3I4S2utAIiKsidvekZNeTPt4nAOeWPwEIvY/c06efqwvLBosDVw+I3TrIxE5Luwwaqw+rekhZANe1MNe0Pw9ICNsVLoeSbIFIkosSr7sVnFiIkgsVVtMIiudqqw+tqtWI30e3PwjIENeTVthIh/sYqtSGqwymPwDIvIkI3It4aGS4Y/eiutjIimrIEOsSVtzBoFM/9vej9ZvIiENGutzrutlIvve3PtUOpKeVWNsVpEyIEJekd/skPtsnPwqIvgejuwfIiJeTaroIvKejfKeDqt3Ixvs6qwu2fWBIEL4ICgsVM6ekgeedZosdVtmIiF9Ixiw8qw9IiHOIx3efe4nargeTPw6IxVAqVwbbn5eisos1VtMKut1IiFeIvTl+VtubuwMIxosVegeYuwu4qtvIv8kHqtoIkViwcVuIxoskSos1FvedqwgBqtdIxhWIk7s0VtmIv5ekgRwIhMiwj8XIE41IEKeWuwGqutWOqt8IiuqICosSloeDPwq8gi+IhLXzVtYOPt6IihHIk+IIx+8Iv/edoAsxBkeoPw0IEVHyPwINPwpIC5eYSHQIxhKqS5eVqtNHPtVNZFhgBMlIhR5zqwaIxOe6zuZIiWebuwkI34n+PtWrVtsIhIAIEpvIvQ+sPwcIiu/IhgsxuwSeI81IEuZIvesj95sdPwvIv8WIhW3GZDYIC+FgmH4Iv3sjS/eSuwBIh7s1ut1IhLNICAedVwQ"}, {"name": "_renderInfo", "value": "angle (google, vulkan 1.3.0 (swiftshader device (llvm 10.0.0) (0x0000c0de)), swiftshader driver)"}, {"name": "xhs_context_networkQuality", "value": "MODERATE"}]}]} \ No newline at end of file diff --git a/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_publish.py b/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_publish.py index f2515e32..a2dd042c 100644 --- a/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_publish.py +++ b/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_publish.py @@ -54,8 +54,9 @@ TITLES = { } -async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) -> PublishResult: +async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1, skip_dedup: bool = False) -> PublishResult: from playwright.async_api import async_playwright + from publish_result import is_published fname = Path(video_path).name fsize = Path(video_path).stat().st_size @@ -63,6 +64,11 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) print(f"\n[{idx}/{total}] {fname} ({fsize/1024/1024:.1f}MB)", flush=True) print(f" 标题: {title[:60]}", flush=True) + if not skip_dedup and is_published("快手", video_path): + print(f" [跳过] 该视频已发布到快手", flush=True) + return PublishResult(platform="快手", video_path=video_path, title=title, + success=True, status="skipped", message="去重跳过(已发布)") + if not COOKIE_FILE.exists(): return PublishResult(platform="快手", video_path=video_path, title=title, success=False, status="error", message="Cookie 不存在") @@ -207,6 +213,8 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) async def main(): + from publish_result import print_summary, save_results + if not COOKIE_FILE.exists(): print("[✗] Cookie 不存在") return 1 @@ -217,17 +225,19 @@ async def main(): return 1 print(f"共 {len(videos)} 条视频\n") - ok_count = 0 + results = [] for i, vp in enumerate(videos): t = TITLES.get(vp.name, f"{vp.stem} #Soul派对 #创业日记") - ok = await publish_one(str(vp), t, i + 1, len(videos)) - if ok: - ok_count += 1 + r = await publish_one(str(vp), t, i + 1, len(videos)) + results.append(r) if i < len(videos) - 1: await asyncio.sleep(5) - print(f"\n成功: {ok_count}/{len(videos)}") - return 0 if ok_count == len(videos) else 1 + actual = [r for r in results if r.status != "skipped"] + print_summary(actual) + save_results(actual) + ok = sum(1 for r in actual if r.success) + return 0 if ok == len(actual) else 1 if __name__ == "__main__": diff --git a/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_storage_state.json b/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_storage_state.json index ca7f5602..a1d4ba97 100644 --- a/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_storage_state.json +++ b/03_卡木(木)/木叶_视频内容/快手发布/脚本/kuaishou_storage_state.json @@ -1 +1 @@ -{"cookies": [{"name": "did", "value": "web_59afd87857628fadfacadff0c466f14cb3c9", "domain": ".kuaishou.com", "path": "/", "expires": 1807680283.271951, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwpsecproductname", "value": "account-zt-pc", "domain": "passport.kuaishou.com", "path": "/", "expires": 1775712260, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwpsecproductname", "value": "verification-captcha", "domain": "captcha.zt.kuaishou.com", "path": "/", "expires": 1775712266, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rhweGh+0pf+AY0+BH9P0rA+9zDG/L9+/mjP/YY8/WAwnP98nrM+0L9+/cA+eSS+/Gl+/PM+f8j8/mS8/cl+0ZA+APFG/LA+0GEG98f80cE8f+D+eQfGAbj+fQD8eqE+c==", "domain": ".kuaishou.com", "path": "/", "expires": 1775712266, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "didv", "value": "1773120283000", "domain": ".kuaishou.com", "path": "/", "expires": 1807680283.272001, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "bUserId", "value": "1000581252357", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625656, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "bUserId", "value": "1000581252357", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.419152, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "passToken", "value": "ChNwYXNzcG9ydC5wYXNzLXRva2VuEsABtfDxZXtPnjk15hJoTcYx1uyrt2hSh9FB2vixPMW8QbIw5tUZNIHAVEdpLCqdLrUQz21JzEsXkXkxcsydiVgBjqNRL_BX6WXjTbvGiVy9EgfMYI7dUwMzqXNxqpYs-6o1EqXYBw0oi42Zt9VJOjJep24Kfjemizr167KWJ89SJVrN7mt-M8d7m3MpG81IY9LTPLEF3Yaxo5talgc6DjHv7KsWzqAFIU9fwZ2TbHV7sKFWpdkOocwLhvVNSmtH1RjuGhI2r9gHVaFHkIbWYumijbjK4BsiIJTz8edocbgB9zeGNoP-jhNYGF5Y6ry53LhxjBIth1YKKAUwAQ", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.41918, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "userId", "value": "463733910", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625615, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "userId", "value": "463733910", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.419174, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "kuaishou.web.cp.api_st", "value": "ChZrdWFpc2hvdS53ZWIuY3AuYXBpLnN0ErABXsXP7DjhNAzC26oKr6CLwjNPwvTIgdy4TmxM-wbBIBFjGlDHlqSORXEHhjV73QzvdVuxCaFJ9_OZxTYj4_dvj2giUG6D-8LYqWSyMEipzPPGZEcCrwcx_RKAReJGY_Mlva_zuKKCcXjgqT0tkc7pU5qipNlyAti8ZViYb5iWFCIe2yzWLmIL__8WPB-2noA9FpZWR7fD4iwNI4eWAB6HSgkurwjRgcjYxuMl7pwb_s0aEjXDFoga_Fxpw8r2Z4xly4zAfyIgKVPmoCN5ZeImWYJ24gBwV6mLBDX9XrynVXg0KxvL6LIoBTAB", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625689, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "kuaishou.web.cp.api_ph", "value": "7f384b62e8e3f6e8e1afd657bd771846d551", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.62571, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ks_onvideo_token", "value": "ZZOmMAIASPoaCz1VZqnGYg==", "domain": "onvideoapi.kuaishou.com", "path": "/", "expires": 1773206712.395114, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://cp.kuaishou.com", "localStorage": [{"name": "OTHER_DEVICE_INCREASE_ID", "value": "1785"}, {"name": "refresh_last_time_0x0810", "value": "1773120256100"}, {"name": "ACTIVITY_SHOW_CLAIM_TOOLTIP", "value": "true"}, {"name": "PUBLISH_V2_TOUR", "value": "true"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "24"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "125"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "361"}]}, {"origin": "https://passport.kuaishou.com", "localStorage": [{"name": "WEBLOGGER_CHANNEL_SEQ_ID_NORMAL", "value": "13"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "17"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rIP/pfPeGlwemSPnp0G04fGAGU+eLE+fPlP0Gh+/DU80r78/ZA8ez08BQfPArI8nLMwncUwecl+0mS+eL9wnc="}, {"name": "WEBLOGGER_V2_SEQ_ID_showEvent", "value": "8"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "3"}, {"name": "kwfcv1", "value": "1"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "19"}, {"name": "WEBLOGGER_V2_SEQ_ID_clickEvent", "value": "3"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "13"}, {"name": "WEBLOGGER_V2_SEQ_ID_taskEvent", "value": "2"}]}, {"origin": "https://captcha.zt.kuaishou.com", "localStorage": [{"name": "WEBLOGGER_CHANNEL_SEQ_ID_NORMAL", "value": "6"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "7"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rhweGh+0pf+AY0+BH9P0rA+9zDG/L9+/mjP/YY8/WAwnP98nrM+0L9+/cA+eSS+/Gl+/PM+f8j8/mS8/cl+0ZA+APFG/LA+0GEG98f80cE8f+D+eQfGAbj+fQD8eqE+c=="}, {"name": "WEBLOGGER_V2_SEQ_ID_showEvent", "value": "2"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "4"}, {"name": "kwfcv1", "value": "1"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "7"}, {"name": "WEBLOGGER_V2_SEQ_ID_clickEvent", "value": "1"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "6"}, {"name": "WEBLOGGER_V2_SEQ_ID_taskEvent", "value": "3"}]}, {"origin": "https://app.m.kuaishou.com", "localStorage": [{"name": "CROSS_VERIFY_SESSION_d89a771b-87d8-4922-ba7b-ba9f09bb306f", "value": "{\"stateStack\":[],\"updateTime\":1773120283392}"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "2"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "7"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "6"}]}]} \ No newline at end of file +{"cookies": [{"name": "did", "value": "web_59afd87857628fadfacadff0c466f14cb3c9", "domain": ".kuaishou.com", "path": "/", "expires": 1807680283.271951, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwpsecproductname", "value": "account-zt-pc", "domain": "passport.kuaishou.com", "path": "/", "expires": 1775712260, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwpsecproductname", "value": "verification-captcha", "domain": "captcha.zt.kuaishou.com", "path": "/", "expires": 1775712266, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rhweGh+0pf+AY0+BH9P0rA+9zDG/L9+/mjP/YY8/WAwnP98nrM+0L9+/cA+eSS+/Gl+/PM+f8j8/mS8/cl+0ZA+APFG/LA+0GEG98f80cE8f+D+eQfGAbj+fQD8eqE+c==", "domain": ".kuaishou.com", "path": "/", "expires": 1775712266, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "didv", "value": "1773120283000", "domain": ".kuaishou.com", "path": "/", "expires": 1807680283.272001, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "bUserId", "value": "1000581252357", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625656, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "bUserId", "value": "1000581252357", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.419152, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "passToken", "value": "ChNwYXNzcG9ydC5wYXNzLXRva2VuEsABtfDxZXtPnjk15hJoTcYx1uyrt2hSh9FB2vixPMW8QbIw5tUZNIHAVEdpLCqdLrUQz21JzEsXkXkxcsydiVgBjqNRL_BX6WXjTbvGiVy9EgfMYI7dUwMzqXNxqpYs-6o1EqXYBw0oi42Zt9VJOjJep24Kfjemizr167KWJ89SJVrN7mt-M8d7m3MpG81IY9LTPLEF3Yaxo5talgc6DjHv7KsWzqAFIU9fwZ2TbHV7sKFWpdkOocwLhvVNSmtH1RjuGhI2r9gHVaFHkIbWYumijbjK4BsiIJTz8edocbgB9zeGNoP-jhNYGF5Y6ry53LhxjBIth1YKKAUwAQ", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.41918, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "userId", "value": "463733910", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625615, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "userId", "value": "463733910", "domain": "id.kuaishou.com", "path": "/", "expires": 1774934710.419174, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "kuaishou.web.cp.api_st", "value": "ChZrdWFpc2hvdS53ZWIuY3AuYXBpLnN0ErABXsXP7DjhNAzC26oKr6CLwjNPwvTIgdy4TmxM-wbBIBFjGlDHlqSORXEHhjV73QzvdVuxCaFJ9_OZxTYj4_dvj2giUG6D-8LYqWSyMEipzPPGZEcCrwcx_RKAReJGY_Mlva_zuKKCcXjgqT0tkc7pU5qipNlyAti8ZViYb5iWFCIe2yzWLmIL__8WPB-2noA9FpZWR7fD4iwNI4eWAB6HSgkurwjRgcjYxuMl7pwb_s0aEjXDFoga_Fxpw8r2Z4xly4zAfyIgKVPmoCN5ZeImWYJ24gBwV6mLBDX9XrynVXg0KxvL6LIoBTAB", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.625689, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "kuaishou.web.cp.api_ph", "value": "7f384b62e8e3f6e8e1afd657bd771846d551", "domain": ".kuaishou.com", "path": "/", "expires": 1774416310.62571, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ks_onvideo_token", "value": "ZZOmMAIASPoaCz1VZqnGYg==", "domain": "onvideoapi.kuaishou.com", "path": "/", "expires": 1773206712.395114, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://cp.kuaishou.com", "localStorage": [{"name": "OTHER_DEVICE_INCREASE_ID", "value": "1971"}, {"name": "refresh_last_time_0x0810", "value": "1773120256100"}, {"name": "ACTIVITY_SHOW_CLAIM_TOOLTIP", "value": "true"}, {"name": "PUBLISH_V2_TOUR", "value": "true"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "27"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "139"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "407"}]}, {"origin": "https://passport.kuaishou.com", "localStorage": [{"name": "WEBLOGGER_CHANNEL_SEQ_ID_NORMAL", "value": "13"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "17"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rIP/pfPeGlwemSPnp0G04fGAGU+eLE+fPlP0Gh+/DU80r78/ZA8ez08BQfPArI8nLMwncUwecl+0mS+eL9wnc="}, {"name": "WEBLOGGER_V2_SEQ_ID_showEvent", "value": "8"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "3"}, {"name": "kwfcv1", "value": "1"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "19"}, {"name": "WEBLOGGER_V2_SEQ_ID_clickEvent", "value": "3"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "13"}, {"name": "WEBLOGGER_V2_SEQ_ID_taskEvent", "value": "2"}]}, {"origin": "https://captcha.zt.kuaishou.com", "localStorage": [{"name": "WEBLOGGER_CHANNEL_SEQ_ID_NORMAL", "value": "6"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "7"}, {"name": "kwfv1", "value": "PnGU+9+Y8008S+nH0U+0mjPf8fP08f+98f+nLlwnrIP9P78/DM+/cI8eWhPnHM+/GI8emj+BHF+nPEwnrMGfL980rhweGh+0pf+AY0+BH9P0rA+9zDG/L9+/mjP/YY8/WAwnP98nrM+0L9+/cA+eSS+/Gl+/PM+f8j8/mS8/cl+0ZA+APFG/LA+0GEG98f80cE8f+D+eQfGAbj+fQD8eqE+c=="}, {"name": "WEBLOGGER_V2_SEQ_ID_showEvent", "value": "2"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "4"}, {"name": "kwfcv1", "value": "1"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "7"}, {"name": "WEBLOGGER_V2_SEQ_ID_clickEvent", "value": "1"}, {"name": "WEBLOGGER_INCREAMENT_ID_KEY", "value": "6"}, {"name": "WEBLOGGER_V2_SEQ_ID_taskEvent", "value": "3"}]}, {"origin": "https://app.m.kuaishou.com", "localStorage": [{"name": "CROSS_VERIFY_SESSION_d89a771b-87d8-4922-ba7b-ba9f09bb306f", "value": "{\"stateStack\":[],\"updateTime\":1773120283392}"}, {"name": "LOAD_DEVICE_INCREASE_ID", "value": "2"}, {"name": "OTHER_DEVICE_INCREASE_ID", "value": "7"}, {"name": "WEBLOGGER_CUSTOM_INCREAMENT_ID_KEY", "value": "6"}]}]} \ No newline at end of file diff --git a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_publish.py b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_publish.py index 9b02403f..a3823fb7 100644 --- a/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_publish.py +++ b/03_卡木(木)/木叶_视频内容/视频号发布/脚本/channels_publish.py @@ -54,8 +54,9 @@ TITLES = { } -async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) -> PublishResult: +async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1, skip_dedup: bool = False) -> PublishResult: from playwright.async_api import async_playwright + from publish_result import is_published fname = Path(video_path).name fsize = Path(video_path).stat().st_size @@ -63,6 +64,11 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) print(f"\n[{idx}/{total}] {fname} ({fsize/1024/1024:.1f}MB)", flush=True) print(f" 标题: {title[:60]}", flush=True) + if not skip_dedup and is_published("视频号", video_path): + print(f" [跳过] 该视频已发布到视频号", flush=True) + return PublishResult(platform="视频号", video_path=video_path, title=title, + success=True, status="skipped", message="去重跳过(已发布)") + if not COOKIE_FILE.exists(): return PublishResult(platform="视频号", video_path=video_path, title=title, success=False, status="error", message="Cookie 不存在") @@ -199,6 +205,8 @@ async def publish_one(video_path: str, title: str, idx: int = 1, total: int = 1) async def main(): + from publish_result import print_summary, save_results + if not COOKIE_FILE.exists(): print("[✗] Cookie 不存在") return 1 @@ -209,17 +217,19 @@ async def main(): return 1 print(f"共 {len(videos)} 条视频\n") - ok_count = 0 + results = [] for i, vp in enumerate(videos): t = TITLES.get(vp.name, f"{vp.stem} #Soul派对 #创业日记") - ok = await publish_one(str(vp), t, i + 1, len(videos)) - if ok: - ok_count += 1 + r = await publish_one(str(vp), t, i + 1, len(videos)) + results.append(r) if i < len(videos) - 1: await asyncio.sleep(5) - print(f"\n成功: {ok_count}/{len(videos)}") - return 0 if ok_count == len(videos) else 1 + actual = [r for r in results if r.status != "skipped"] + print_summary(actual) + save_results(actual) + ok = sum(1 for r in actual if r.success) + return 0 if ok == len(actual) else 1 if __name__ == "__main__": diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index 08151734..f6b9d96b 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -261,3 +261,4 @@ | 2026-03-10 12:54:57 | 🔄 卡若AI 同步 2026-03-10 12:54 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | | 2026-03-10 13:34:41 | 🔄 卡若AI 同步 2026-03-10 13:34 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | | 2026-03-10 13:48:50 | 🔄 卡若AI 同步 2026-03-10 13:48 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | +| 2026-03-10 14:18:01 | 🔄 卡若AI 同步 2026-03-10 14:17 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index 45e3a6a6..91a433f8 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -264,3 +264,4 @@ | 2026-03-10 12:54:57 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 12:54 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-10 13:34:41 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 13:34 | 更新:水桥平台对接、卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-03-10 13:48:50 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 13:48 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-03-10 14:18:01 | 成功 | 成功 | 🔄 卡若AI 同步 2026-03-10 14:17 | 更新:卡木、运营中枢工作台 | 排除 >20MB: 11 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |