GetAPI.ONE
Generare video con API attività ONE
Inviare attività video in formato OpenAI, conservare ID pubblico, interrogare la rotta ONE esatta fino a esito terminale e recuperare contenuti solo dopo completamento.
Confermare protocollo prima di spendere
- Scegliere modello attuale che dichiari endpoint video OpenAI.
- Rivedere prezzi e campi supportati; video può essere asincrono e fatturabile.
- Usare istruzione breve e a basso rischio nel primo test accettato.
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}/contentInviare, interrogare e recuperare
- Inviare POST https://www.getapi.one/v1/videos e conservare ID esatto.
- Interrogare GET https://www.getapi.one/v1/videos/{task_id} a intervalli fissi e con controlli limitati; non creare attività durante l'attesa.
- Continuare con queued o in_progress; successo solo con completed.
- Fermarsi e mostrare errore per failed. Stati ignoti non sono successo: conservare risposta diagnostica.
- Dopo completed, recuperare GET https://www.getapi.one/v1/videos/{task_id}/content.
- Trasferire blocchi fissi con limite totale. L'esempio usa tetto locale 512 MiB e rimuove file parziale per errori di lettura, validazione, scrittura o cancellazione.
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)
raiseImplementare macchina a stati
| Stato | Azione client |
|---|---|
| queued | Attendere intervallo fisso e consultare stesso ID entro il limite. |
| in_progress | Mostrare progresso se fornito e continuare polling. |
| completed | Fermare polling e richiedere contenuto. |
| failed | Fermare polling, registrare errore sicuro e richiedere ripetizione intenzionale. |
Verificare il risultato previsto
- La risposta fornisce ID che il client conserva con persistenza sufficiente.
- Ogni consultazione usa lo stesso ID senza duplicare lavoro.
- Il contenuto scaricato ha tipo video e si apre solo dopo completed.
Recuperare senza duplicare attività
- Dopo timeout d'invio non reinviare alla cieca: cercare ID attività o registro console.
- In 404 durante polling verificare ID pubblico, rotta singolare/plurale esatta e stessa chiave account.
- In failed conservare modello, riepilogo sicuro, ID ed errore prima di cambiare input.
Proteggere attività e risultati multimediali
- Tenere chiave e consultazione attività nel backend autenticato.
- Validare istruzioni, upload, durata, dimensioni e quantità rispetto al contratto prima dell'inoltro.
- Conservare risultati approvati in storage controllato; non presumere URL permanenti o sicure da pubblicare.
- Imporre limite totale download sotto memoria/storage disponibili, usare blocchi fissi e pulire file parziali se incompleto.