feat(发布计划): 改按名字发(文件名 名字_日期_编号)+ 账号管理整页下线 + 自动切号一轮发完
发布计划不再绑设备、不再依赖账号台账:上传文件名 `名字_日期_编号`(标题行 `标题 || 正文_名字_日期_编号`),运行时读本机当前抖音昵称取计划;靠循环块 「一轮把本机待发的号跑完」自动切号,一直发到发完。 · 解析/配对换键:右锚定认名字(不许含下划线、不许纯数字 —— 不合法直接拒收并说清原因), 删掉三处"手机号必须命中台账"的校验,加索引 ix_video_plan_name_date(启动时补建) · 新步骤三个:读本机账号名字 / 切换账号(**按名字点控件**、切完回读校验、遇登录页停本设备)/ 循环本机待发的号(试过不回头、跑一轮没进展就换号、停止·超时·上限三个干净出口) · 发布骨架改 18 步:读名字 → 校验账号(cmp_source=account_target)→ 推送(**推送前重读昵称核对**) → 抖音流程 → 标记结果;push_release 的 account 默认 name · 账号管理整页下线:删 core/ledger.py(serial_of 迁到 core/device_pool.py)、6 个 /api/ledger*、 「账号」页与 ledger.js、设备池「账号」列、设备端账号块;发布计划升为一级页签; device_account 表与 42 行历史数据保留、仍在备份清单内(**停用不等于删数据**) · 人工入口「按名字找设备」:新增 core/account_probe.py(只读探测、跳过在跑任务的设备) + POST /api/video_plan/push_by_account,没设备登着的号逐条报出来; 推送时把"实际是谁发的"写进 posted_serial / posted_device_name · 通知:新增 task.account.switch_failed / task.account.need_login · schema v12(posted_*)/ v13(device.cur_account_name / cur_name_at) · 文档同步:TASK_DEV / API / DATA_MODEL / ARCHITECTURE / NOTIFY / DEVICE_AGENT / DEPLOY / DEVELOPMENT / README / .env.example(两个抖音控件选择器抓一次填 .env) · 新增 scripts/tests/:6 套用例 + run_all.py(临时库 + 假设备,不碰真实数据、不连真机)
This commit is contained in:
@@ -91,6 +91,20 @@ APK_DIR = os.path.join(DATA_DIR, "apks")
|
||||
# 自动化测试必须把素材目录指到临时位置,否则测试上传的视频会落进用户真实数据目录。
|
||||
VIDEO_DIR = _env("DATA_VIDEO_DIR", "") or os.path.join(DATA_DIR, "videos")
|
||||
|
||||
# ================== 抖音「我」页面的昵称控件(发布计划按名字发) ==================
|
||||
# **抓一次填这里**(用「抓取元素」抓抖音「我」页面上的昵称那个 TextView)。
|
||||
# 一处配置、三处一致:发布任务骨架的「读取本机账号名字」步骤默认值、
|
||||
# 「切换账号」的切后校验、以及「发布计划 → 一键推送(按名字找设备)」的实时探测。
|
||||
# 任务步骤里仍可单独改(存进那一步的参数),这里只是**默认值**。
|
||||
# 留空 = 还没抓:相关步骤会明确报"请抓取元素",绝不会猜一个名字去发。
|
||||
DOUYIN_NAME_SELECTOR_TYPE = _env("DOUYIN_NAME_SELECTOR_TYPE", "xpath")
|
||||
DOUYIN_NAME_SELECTOR_VALUE = _env("DOUYIN_NAME_SELECTOR_VALUE", "")
|
||||
|
||||
# 「我」页面 →「切换账号」列表那个入口(同样是**抓一次填这里**):自动切号要用。
|
||||
# 留空 = 「切换账号」步骤会明确报"请抓取元素"并跳过(不会瞎点)。
|
||||
DOUYIN_SWITCH_SELECTOR_TYPE = _env("DOUYIN_SWITCH_SELECTOR_TYPE", "xpath")
|
||||
DOUYIN_SWITCH_SELECTOR_VALUE = _env("DOUYIN_SWITCH_SELECTOR_VALUE", "")
|
||||
|
||||
# 单次请求体上限(字节)。**必须大于现有 APK 上传的最大包**(实测 336MB),
|
||||
# 否则「应用管理」的 APK 上传会被一起卡死。默认 2GiB:一个视频 + 余量。
|
||||
MAX_CONTENT_LENGTH = int(_env("MAX_UPLOAD_MB", "2048")) * 1024 * 1024
|
||||
|
||||
Reference in New Issue
Block a user