Zum Inhalt springen
GetAPI
Deutsch
Menü

GetAPI.ONE

Videos mit der ONE-Aufgaben-API erzeugen

Reichen Sie eine Videoaufgabe im OpenAI-Format ein, bewahren Sie ihre öffentliche Aufgaben-ID auf, fragen Sie die exakte ONE-Statusroute bis zu einem Endzustand ab und laden Sie Inhalte erst nach Abschluss.

Protokoll vor Kostenentstehung bestätigen

  • Wählen Sie ein aktuelles Katalogmodell, das den OpenAI-Video-Endpunkt ausdrücklich angibt.
  • Prüfen Sie aktuelle Preise und unterstützte Eingabefelder des Modells; Videoaufgaben können asynchron und kostenpflichtig sein.
  • Verwenden Sie für den ersten akzeptierten Test einen kurzen Prompt mit geringem Risiko.
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

Einreichen, abfragen und abrufen

  1. POST https://www.getapi.one/v1/videos senden und die zurückgegebene Aufgaben-ID unverändert speichern.
  2. GET https://www.getapi.one/v1/videos/{task_id} in festem Abstand und mit begrenzter Prüfanzahl abfragen; während des Wartens keine neue Aufgabe erstellen.
  3. Bei queued oder in_progress fortfahren; nur bei completed erfolgreich beenden.
  4. Bei failed stoppen und den Fehler anzeigen. Unbekannte Zustände als nicht erfolgreich behandeln und die Antwort zur Diagnose bewahren.
  5. Nach completed GET https://www.getapi.one/v1/videos/{task_id}/content abrufen.
  6. Übertragen Sie den Inhalt in Blöcken fester Größe unter einem kumulativen Limit. Das Beispiel setzt eine lokale Obergrenze von 512 MiB und entfernt die Teildatei bei jedem Lese-, Validierungs-, Schreib- oder Abbruchfehler.
Aufgabe einreichen
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
Höchstens 30-mal abfragen und erst nach completed abrufen
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

Zustandsautomat implementieren

StatusClient-Aktion
queuedFestes Intervall abwarten und dieselbe Aufgaben-ID innerhalb der begrenzten Prüfanzahl erneut abfragen.
in_progressFortschritt anzeigen, sofern vorhanden, und Status weiter abfragen.
completedStatusabfrage beenden und Inhaltsroute abrufen.
failedStatusabfrage beenden, sichere Fehlerdetails protokollieren und einen bewussten Wiederholungsversuch verlangen.

Erwartetes Ergebnis prüfen

  • Die Einreichungsantwort liefert eine Aufgaben-ID, die der Client für den Ablauf ausreichend dauerhaft speichert.
  • Jede Statusanfrage verwendet dieselbe ID und erzeugt keine doppelte Arbeit.
  • Der heruntergeladene Inhalt besitzt einen Video-Content-Type und wird erst nach completed geöffnet.

Fehler beheben, ohne Aufgaben zu duplizieren

  • Senden Sie bei einer Zeitüberschreitung der Einreichung nicht ungeprüft erneut: Prüfen Sie, ob eine Aufgaben-ID oder ein Konsoleneintrag erstellt wurde.
  • Prüfen Sie bei 404 während der Statusabfrage die öffentliche Aufgaben-ID, die exakte Singular-/Pluralroute und die Verwendung desselben Kontoschlüssels.
  • Bewahren Sie bei failed Modell, sichere Anfragezusammenfassung, Aufgaben-ID und Fehlerdetails auf, bevor Sie Eingaben ändern.

Medienaufgaben und Ergebnisse schützen

  • Bewahren Sie Schlüssel und Aufgabenabfrage in Ihrem authentifizierten Backend auf.
  • Prüfen Sie Prompts, Uploads, Dauer, Abmessungen und Anzahl vor der Weiterleitung anhand des gewählten Modellvertrags.
  • Speichern Sie freigegebene Ergebnisse in kontrolliertem Speicher; nehmen Sie nicht an, dass eine Inhalts-URL dauerhaft oder für öffentliche Nutzung geeignet ist.
  • Legen Sie ein kumulatives Downloadlimit unterhalb Ihres Arbeitsspeicher- und Speicherbudgets fest, übertragen Sie Blöcke fester Größe und bereinigen Sie unvollständige Dateien bei nicht abgeschlossenem Download.

Nächste Schritte