视频生成 API 如何轮询任务、下载结果并避免重复提交
视频生成是异步任务:提交一次后保存本站任务 ID,用 GET /v1/videos/{id} 查询;状态为 completed 时下载,failed 时检查错误和任务日志。查询失败或本地等待超时,都不代表应重新提交生成请求。
统一 V1 的任务流程
- 使用
POST /v1/videos提交一次任务,记录返回的id,成功提交可能产生费用。 - 使用同一本站密钥和 ID 查询
GET /v1/videos/{id},建议至少间隔 30 秒。 - 成功后下载
GET /v1/videos/{id}/content,将结果保存到自己的存储。
四种视频状态分别怎么处理?
| status | 含义 | 客户端处理 |
|---|---|---|
| queued | 排队中 | 继续查询原任务 |
| in_progress | 生成中 | 继续查询,降低并发 |
| completed | 生成成功 | 下载并保存视频 |
| failed | 生成失败 | 检查 error、任务日志及退款明细 |
这些状态适用于统一 V1 视频接口。旧接口可能使用不同的状态字段;图片接口通常直接返回 data[].url,不能套用这段视频轮询流程。
Python:只轮询已有任务
把密钥和已创建的任务 ID 放入服务端环境变量 WXKS_API_KEY、WXKS_TASK_ID。下面的 20 分钟是示例的本地等待上限,不是服务承诺的完成时间。
import json, os, time
from urllib.request import Request, urlopen
from urllib.error import HTTPError, URLError
# 此示例只查询一个已经创建的任务,不提交生成任务。
task_id = os.environ["WXKS_TASK_ID"]
api_key = os.environ["WXKS_API_KEY"]
url = "https://api.wxksai.com/v1/videos/" + task_id
deadline = time.monotonic() + 20 * 60
while time.monotonic() < deadline:
request = Request(url, headers={"Authorization": "Bearer " + api_key})
try:
with urlopen(request, timeout=30) as response:
task = json.load(response)
except HTTPError as error:
if error.code not in (429, 500, 502, 503, 504):
raise
time.sleep(30) # 查询暂时失败,继续查询原任务
continue
except (URLError, TimeoutError):
time.sleep(30)
continue
state = task.get("status")
if state == "completed":
print("任务完成:", task_id)
break
if state == "failed":
raise RuntimeError(task.get("error") or "任务失败,请查看任务日志")
if state not in ("queued", "in_progress"):
raise RuntimeError("未知状态,请保存任务 ID 并检查响应")
time.sleep(30)
else:
raise TimeoutError("本地等待结束,请保留任务 ID 后续查询,不要重新提交")
生成成功后如何下载?
下载使用原任务 ID 和同一个本站密钥;不要把下载失败处理成重新生成。结果地址可能有时效,应尽快存入自己的存储。
curl -L -o result.mp4 'https://api.wxksai.com/v1/videos/你的任务ID/content' \
-H "Authorization: Bearer $WXKS_API_KEY"
提交超时、查询报错和生成失败有何区别?
- 提交超时:服务器可能已经创建任务,先查控制台任务日志。没有拿到 ID 也不能据此自动重试 POST。
- 查询 429 或临时 5xx:保留 ID、降低查询频率,稍后继续查询原任务。
- 401、403:检查本站密钥、额度、模型权限及所属账号,重复轮询不会修复权限问题。
- 任务 failed:按实际任务状态查看错误和费用明细,一次查询失败不能作为退款依据。
不要假定传入 Idempotency-Key 就一定会去重。将任务 ID 与自己的业务单号持久保存,有助于避免因客户端重启造成重复付费。
资料来源与核对范围
本文依据本站当前公开 API 文档、公开模型计费配置及模型广场整理,核对日期为 2026-11-02。示例说明接入方法;规格、价格、密钥权限和实时可用性以调用时配置及账户记录为准。