Appearance
API Key 视频生成完整教程
先完成快速开始,并在模型广场确认所选模型的接口、参数和价格。这里重点说明如何稳妥处理异步任务,不固定某一个模型的名称或配置。
接口与任务 ID
| 用途 | 接口 |
|---|---|
| 查询当前密钥可用模型 | GET /v1/models |
| 创建视频 | POST /v1/videos |
| 查询状态 | GET /v1/videos/{task_id} |
| 下载视频 | GET /v1/videos/{task_id}/content |
创建响应中的 task_id 或 id 是之后查询与下载的依据。收到成功响应后立即保存它。任务长时间未完成时,可以停止本地等待,之后继续查询同一个任务;不要自动重新提交。
cURL 轮询
以下示例要求 ROUTERBEE_API_KEY 和 TASK_ID 已按快速开始设置,并安装 jq:
bash
while :; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"https://routerbee.com/v1/videos/$TASK_ID" \
--header "Authorization: Bearer $ROUTERBEE_API_KEY") || exit 1
STATUS=$(printf '%s' "$RESPONSE" | jq -r '.status // empty')
case "$STATUS" in
completed) break ;;
failed)
printf '%s\n' "$RESPONSE" >&2
exit 1
;;
queued|in_progress) sleep 5 ;;
*)
printf '未知任务状态:%s\n' "$STATUS" >&2
exit 1
;;
esac
done
curl --fail --show-error --location \
"https://routerbee.com/v1/videos/$TASK_ID/content" \
--header "Authorization: Bearer $ROUTERBEE_API_KEY" \
--output routerbee-video.mp4生产客户端应增加总等待上限、退避和请求日志。超过本地等待上限时保留 TASK_ID,稍后继续查询。
Python 查询与下载
以下示例使用 Python 标准库读取已保存的任务 ID。创建请求体应按照所选模型详情页构造:
python
import json
import os
import time
import urllib.request
base = "https://routerbee.com/v1"
task_id = os.environ["TASK_ID"]
api_key = os.environ["ROUTERBEE_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}"}
for _ in range(120):
request = urllib.request.Request(f"{base}/videos/{task_id}", headers=headers)
with urllib.request.urlopen(request, timeout=30) as response:
task = json.load(response)
status = task.get("status")
if status == "completed":
break
if status == "failed":
raise RuntimeError(task.get("error", "Video generation failed"))
if status not in ("queued", "in_progress"):
raise RuntimeError(f"Unexpected task status: {status}")
time.sleep(5)
else:
raise TimeoutError(f"Task {task_id} is still running; query it later")
request = urllib.request.Request(f"{base}/videos/{task_id}/content", headers=headers)
with urllib.request.urlopen(request, timeout=120) as response:
if not response.headers.get("Content-Type", "").startswith("video/"):
raise RuntimeError("Content endpoint did not return a video")
with open("routerbee-video.mp4", "wb") as output:
while chunk := response.read(1024 * 1024):
output.write(chunk)不要依赖状态响应中的 video_url。下载接口仍需携带 API Key,并应流式保存大文件。创建请求超时时,先查看任务日志和使用日志,避免重复创建及重复计费。