تخطي إلى المحتوى
GetAPI
العربية
القائمة

GetAPI.ONE

توليد فيديو بواجهة مهام ONE

أرسل مهمة فيديو بصيغة OpenAI، واحفظ معرفها العام، واستطلع مسار حالة ONE الدقيق حتى النهاية، واجلب المحتوى بعد الإكمال فقط.

تأكيد البروتوكول قبل الإنفاق

  • اختر نموذجًا حاليًا يعلن نقطة فيديو OpenAI صراحة.
  • راجع الأسعار وحقول الإدخال المدعومة؛ قد يكون الفيديو غير متزامن ومدفوعًا.
  • استخدم مطالبة قصيرة منخفضة المخاطر لأول اختبار مقبول.
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

الإرسال والاستطلاع والجلب

  1. أرسل POST https://www.getapi.one/v1/videos واحفظ معرف المهمة المعاد بدقة.
  2. استطلع GET https://www.getapi.one/v1/videos/{task_id} بفاصل ثابت وعدد فحوص محدود؛ لا تنشئ مهمة جديدة أثناء الانتظار.
  3. واصل عند queued أو in_progress، وتوقف بنجاح فقط عند completed.
  4. توقف وأظهر الخطأ عند failed. عامل الحالات المجهولة كغير ناجحة واحفظ الاستجابة للتشخيص.
  5. بعد completed اجلب GET https://www.getapi.one/v1/videos/{task_id}/content.
  6. ابث المحتوى بأجزاء ثابتة ضمن حد تراكمي. يستخدم المثال سقفًا محليًا 512 MiB ويحذف الملف الجزئي عند أي فشل قراءة أو تحقق أو كتابة أو إلغاء.
إرسال المهمة
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
استطلاع حتى 30 مرة ثم الجلب بعد 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

تنفيذ آلة الحالات

الحالةإجراء العميل
queuedانتظر الفاصل الثابت ثم استعلم عن معرف المهمة نفسه ضمن العدد المحدود للفحوص.
in_progressاعرض التقدم إن وُفر وواصل الاستطلاع.
completedأوقف الاستطلاع واطلب مسار المحتوى.
failedأوقف الاستطلاع وسجل تفاصيل الخطأ الآمنة واطلب إعادة محاولة مقصودة.

التحقق من النتيجة المتوقعة

  • توفر استجابة الإرسال معرف مهمة ويحفظه العميل بمتانة تكفي للإجراء.
  • يستخدم كل استعلام حالة المعرف نفسه ولا ينشئ عملًا مكررًا.
  • للمحتوى المنزل نوع فيديو ولا يُفتح إلا بعد completed.

التعافي دون مضاعفة المهام

  • عند انتهاء مهلة الإرسال لا تكرر عشوائيًا؛ افحص هل أُنشئ معرف مهمة أو سجل بالوحدة.
  • عند 404 أثناء الاستطلاع تحقق من معرف المهمة العام والمسار بالمفرد أو الجمع ومن مفتاح الحساب نفسه.
  • عند failed احفظ النموذج وملخص الطلب الآمن ومعرف المهمة وتفاصيل الخطأ قبل تغيير المدخلات.

حماية مهام الوسائط ونتائجها

  • أبقِ المفتاح والاستعلام عن المهمة في خلفيتك المصادق عليها.
  • تحقق من المطالبات والملفات والمدة والأبعاد والأعداد وفق عقد النموذج قبل التمرير.
  • احفظ النتائج المعتمدة في تخزين مضبوط؛ لا تفترض أن رابط المحتوى دائم أو آمن للنشر.
  • ضع حد تنزيل تراكميًا دون ميزانية الذاكرة والتخزين، وابث أجزاء ثابتة الحجم ونظف الملفات الجزئية إذا لم يكتمل التنزيل.

الخطوات التالية