Chuyển đến nội dung
GetAPI
Tiếng Việt
Giao diện
Thông báo
Thông báo
Đang tải…
Menu

Tạo video bằng API tác vụ ONE

Gửi tác vụ video theo cấu trúc OpenAI, giữ mã tác vụ công khai, thăm dò đúng đường dẫn trạng thái ONE đến trạng thái kết thúc và chỉ tải nội dung sau khi hoàn thành.

Xác nhận giao thức trước khi chi phí phát sinh

  • Chọn mô hình hiện tại trong danh mục công bố rõ điểm cuối video OpenAI.
  • Xem giá hiện tại và các trường đầu vào được mô hình hỗ trợ; công việc video có thể bất đồng bộ và bị tính phí.
  • Dùng câu lệnh ngắn, ít rủi ro cho lần thử đầu tiên được chấp nhận.
text
POST https://www.getapi.one/v1/videos
GET https://www.getapi.one/v1/videos/{task_id}
GET https://www.getapi.one/v1/videos/{task_id}/content

Gửi, thăm dò và tải

  1. Gửi POST https://www.getapi.one/v1/videos và lưu chính xác mã tác vụ trả về.
  2. Thăm dò GET https://www.getapi.one/v1/videos/{task_id} theo khoảng thời gian cố định với số lần kiểm tra có giới hạn; không tạo tác vụ mới trong khi chờ.
  3. Tiếp tục khi queued hoặc in_progress; chỉ kết thúc thành công khi completed.
  4. Dừng và hiển thị lỗi khi failed. Xem trạng thái không rõ là chưa thành công và giữ phản hồi để chẩn đoán.
  5. Sau completed, tải GET https://www.getapi.one/v1/videos/{task_id}/content.
  6. Truyền nội dung theo khối kích thước cố định dưới giới hạn tích lũy. Ví dụ dùng trần cục bộ 512 MiB và xóa tệp dở dang khi xảy ra lỗi đọc, xác minh, ghi hoặc hủy.
Gửi tác vụ
curl --fail-with-body https://www.getapi.one/v1/videos \
  -H "Authorization: Bearer $GETAPI_ONE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<OPENAI_VIDEO_MODEL_ID_FROM_CURRENT_CATALOG>",
    "prompt": "A five-second locked-camera product turntable on a neutral background"
  }' > video-submit.json
Thăm dò tối đa 30 lần, rồi chỉ tải sau completed
import json
import os
import time
from pathlib import Path
from urllib.parse import quote
from urllib.request import Request, urlopen

base_url = "https://www.getapi.one"
api_key = os.environ["GETAPI_ONE_API_KEY"]
submitted = json.loads(Path("video-submit.json").read_text(encoding="utf-8"))
task_id = submitted.get("id") or submitted.get("task_id")
if not task_id:
    raise ValueError("Submit response did not contain id or task_id")

safe_id = quote(task_id, safe="")
headers = {"Authorization": f"Bearer {api_key}"}
for attempt in range(30):
    request = Request(f"{base_url}/v1/videos/{safe_id}", headers=headers)
    with urlopen(request, timeout=30) as response:
        task = json.load(response)
    status = task.get("status")
    if status == "completed":
        break
    if status == "failed":
        raise RuntimeError(f"video task failed: {task.get('error')}")
    if status not in {"queued", "in_progress"}:
        raise RuntimeError(f"unknown non-success status: {status}")
    if attempt == 29:
        raise TimeoutError("video was not complete after 30 status checks")
    time.sleep(10)

content_request = Request(
    f"{base_url}/v1/videos/{safe_id}/content",
    headers=headers,
)
MAX_VIDEO_BYTES = 512 * 1024 * 1024
CHUNK_BYTES = 1024 * 1024
output_path = Path("result.mp4")
created_output = False
with urlopen(content_request, timeout=60) as response:
    content_type = response.headers.get_content_type()
    if not content_type.startswith("video/"):
        raise ValueError(f"unexpected content type: {content_type}")
    try:
        output = output_path.open("xb")
        created_output = True
        with output:
            total_bytes = 0
            while chunk := response.read(CHUNK_BYTES):
                total_bytes += len(chunk)
                if total_bytes > MAX_VIDEO_BYTES:
                    raise ValueError("video exceeds the local 512 MiB limit")
                output.write(chunk)
    except BaseException:
        if created_output:
            output_path.unlink(missing_ok=True)
        raise

Triển khai máy trạng thái

Trạng tháiHành động của ứng dụng khách
queuedChờ khoảng thời gian cố định rồi truy vấn cùng mã tác vụ trong số lần kiểm tra có giới hạn.
in_progressHiển thị tiến độ nếu có và tiếp tục thăm dò.
completedDừng thăm dò và gọi đường dẫn nội dung.
failedDừng thăm dò, ghi chi tiết lỗi an toàn và chỉ thử lại khi có quyết định chủ động.

Xác minh kết quả mong đợi

  • Phản hồi gửi tác vụ cung cấp mã tác vụ và ứng dụng khách lưu mã đủ bền vững cho quy trình.
  • Mọi yêu cầu trạng thái dùng cùng mã đó và không tạo công việc trùng lặp.
  • Nội dung tải xuống có kiểu nội dung video và chỉ được mở sau completed.

Khôi phục mà không tạo trùng tác vụ

  • Khi gửi bị hết thời gian chờ, đừng gửi lại tùy tiện: kiểm tra xem mã tác vụ hoặc bản ghi bảng điều khiển đã được tạo hay chưa.
  • Khi nhận 404 trong lúc thăm dò, xác minh mã tác vụ công khai, đúng đường dẫn số ít/số nhiều và cùng khóa tài khoản.
  • Khi nhận failed, giữ mô hình, tóm tắt yêu cầu an toàn, mã tác vụ và chi tiết lỗi trước khi thay đầu vào.

Bảo vệ tác vụ và kết quả đa phương tiện

  • Giữ khóa và việc tra cứu tác vụ trên backend có xác thực của bạn.
  • Kiểm tra câu lệnh, tệp tải lên, thời lượng, kích thước và số lượng theo đặc tả mô hình đã chọn trước khi chuyển tiếp.
  • Lưu kết quả đã phê duyệt trong bộ lưu trữ có kiểm soát; không giả định URL nội dung tồn tại vĩnh viễn hoặc an toàn để công khai.
  • Đặt giới hạn tải xuống tích lũy thấp hơn ngân sách bộ nhớ và lưu trữ, truyền dữ liệu theo khối kích thước cố định và dọn sản phẩm dở dang khi tải không hoàn tất.

Các bước tiếp theo