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.
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}/contentEinreichen, abfragen und abrufen
- POST https://www.getapi.one/v1/videos senden und die zurückgegebene Aufgaben-ID unverändert speichern.
- 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.
- Bei queued oder in_progress fortfahren; nur bei completed erfolgreich beenden.
- Bei failed stoppen und den Fehler anzeigen. Unbekannte Zustände als nicht erfolgreich behandeln und die Antwort zur Diagnose bewahren.
- Nach completed GET https://www.getapi.one/v1/videos/{task_id}/content abrufen.
- Ü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.
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.jsonimport 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)
raiseZustandsautomat implementieren
| Status | Client-Aktion |
|---|---|
| queued | Festes Intervall abwarten und dieselbe Aufgaben-ID innerhalb der begrenzten Prüfanzahl erneut abfragen. |
| in_progress | Fortschritt anzeigen, sofern vorhanden, und Status weiter abfragen. |
| completed | Statusabfrage beenden und Inhaltsroute abrufen. |
| failed | Statusabfrage 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.