> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xhuoapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Istruzioni per l'integrazione dell'API Midjourney Videos

> Midjourney generation 集成指南 - XHuoAPI

Questo documento presenterà un'istruzione per l'integrazione dell'API Midjourney Videos, che consente di generare video ufficiali di Midjourney tramite l'inserimento di parametri personalizzati.

## Processo di richiesta

Per utilizzare l'API, è necessario prima andare alla pagina corrispondente [Midjourney Videos API](https://api.xhuoapi.ai/documents/midjourney-videos) per richiedere il servizio corrispondente. Una volta entrati nella pagina, fare clic sul pulsante "Acquire", come mostrato nell'immagine:

![](https://cdn.xhuoapi.ai/q6ytrc.png)

Se non si è ancora effettuato il login o la registrazione, si verrà automaticamente reindirizzati alla pagina di accesso per invitare a registrarsi e accedere. Dopo aver effettuato il login o la registrazione, si tornerà automaticamente alla pagina corrente.

Alla prima richiesta, verrà fornito un credito gratuito, che consente di utilizzare l'API senza costi.

## Utilizzo di base

Iniziamo a comprendere il modo di utilizzo di base, che consiste nell'inserire la parola chiave `prompt`, l'azione di generazione `action`, e l'array di immagini di riferimento per il primo e l'ultimo fotogramma `image_url`, per ottenere il risultato elaborato. Prima di tutto, è necessario semplicemente passare un campo `action`, il cui valore è `generate`. Esso include principalmente due tipi di azioni: generare video (`generate`), estendere video (`extend`), i dettagli sono i seguenti:

<p>
  <img src="https://cdn.xhuoapi.ai/pi72m9.png" width="500" className="m-auto" />
</p>

Possiamo vedere che qui abbiamo impostato le intestazioni della richiesta, che includono:

* `accept`: il formato della risposta desiderata, qui è impostato su `application/json`, ovvero formato JSON.
* `authorization`: la chiave per chiamare l'API, che può essere selezionata direttamente dopo la richiesta.

Inoltre, abbiamo impostato il corpo della richiesta, che include:

* `image_url`: il link all'immagine di riferimento per il primo fotogramma del video generato.
* `end_image_url`: opzionale, specifica l'immagine di riferimento per l'ultimo fotogramma del video generato.
* `video_id`: deve essere specificato l'ID del video quando si estende un video.
* `video_index`: deve essere specificato quale video specifico dell'`video_id`, l'indice parte da 0, il valore predefinito è 0.
* `action`: l'azione di questo compito di generazione video, che include principalmente due azioni: generare video (`generate`), estendere video (`extend`).
* `prompt`: parola chiave.
* `mode`: modalità di velocità di generazione video, predefinita è veloce.
* `resolution`: chiarezza del video, predefinita è 720p.
* `loop`: se generare un video in loop, predefinito è false.
* `callback_url`: l'URL per il quale è necessario restituire il risultato.

Dopo aver selezionato, si può notare che a destra è stato generato il codice corrispondente, come mostrato nell'immagine:

<p>
  <img src="https://cdn.xhuoapi.ai/y0cw0p.png" width="500" className="m-auto" />
</p>

Cliccando sul pulsante "Try" è possibile effettuare un test, come mostrato nell'immagine sopra, e abbiamo ottenuto il seguente risultato:

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751816808164156352.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751816807896311",
  "video_urls": [
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_0.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_1.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_2.mp4",
    "https://storage.fonedis.cc//video/1c67c36c-8177-4f19-ad72-1dc1567265a6/0_3.mp4"
  ],
  "task_id": "037955e0-deee-4050-baa8-1416300d67e2",
  "success": true
}
```

Il risultato restituito ha diversi campi, descritti come segue:

* `success`, lo stato attuale del compito di generazione video.
* `task_id`, l'ID del compito di generazione video attuale.
* `image_url`, l'immagine di copertura del compito di generazione video attuale.
* `image_width`, la larghezza dell'immagine di copertura del compito di generazione video attuale.
* `image_height`, l'altezza dell'immagine di copertura del compito di generazione video attuale.
* `video_id`, l'ID del video del compito di generazione video attuale.
* `video_urls`, l'array dei link video del compito di generazione video attuale.

Possiamo vedere che abbiamo ottenuto informazioni video soddisfacenti, e abbiamo solo bisogno di ottenere il video generato di Midjourney in base all'indirizzo del link video in `video_urls`.

Inoltre, se si desidera generare il codice di integrazione corrispondente, è possibile copiarlo direttamente, ad esempio il codice CURL è il seguente:

```shell theme={null}
curl -X POST 'https://api.xhuoapi.ai/v1/midjourney/videos' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "action": "generate",
  "prompt": "A cat sitting on a table",
  "image_url": "https://cdn.xhuoapi.ai/jgo1cw.jpg"
}'
```

## Funzione di estensione video

Se si desidera continuare a generare un video Kling già creato, è possibile impostare il parametro `action` su `extend` e inserire l'ID del video da continuare a generare. L'ID del video può essere ottenuto in base all'uso di base.

In questo caso, possiamo vedere che l'ID del video sopra menzionato è:

```
"video_id": "1751816807896311"
```

> Nota: l'`video_id` qui è l'ID del video generato dopo la creazione. Se non si sa come generare un video, è possibile fare riferimento all'uso di base sopra per generare un video.

Successivamente, dobbiamo compilare i suggerimenti necessari per personalizzare la generazione del video, specificando i seguenti contenuti:

* `video_index`: selezionare l'indice del video da estendere, questo indice è quello generato in `video_urls`, l'indice parte da 0, il valore predefinito è 0.
* `video_id`: l'ID del video specificato per l'estensione.
* `action`: l'azione di estensione video, che è `extend`.
* `prompt`: parola chiave.

Esempio di compilazione:

<p>
  <img src="https://cdn.xhuoapi.ai/855hnj.png" width="500" className="m-auto" />
</p>

Dopo aver completato, il codice generato automaticamente è il seguente:

<p>
  <img src="https://cdn.xhuoapi.ai/p58w39.png" width="500" className="m-auto" />
</p>

Codice Python corrispondente:

```python theme={null}
import requests

url = "https://api.xhuoapi.ai/v1/midjourney/videos"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "action": "extend",
    "prompt": "A cat sitting on a table",
    "video_id": "1751816807896311",
    "video_index": 1
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
```

Cliccando su "Esegui", si può notare che si ottiene un risultato, come segue:

```json theme={null}
{
    "image_url": "https://storage.fonedis.cc/upload_1751817471047011172.png",
    "image_width": 560,
    "image_height": 688,
    "progress": 100,
    "video_id": "1751818094559027",
    "video_urls": [
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_0.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_1.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_2.mp4",
        "https://storage.fonedis.cc//video/a4bd2f43-b925-462d-9725-8aef98403133/0_3.mp4"
    ],
    "task_id": "da3bdcd0-9c21-4b40-877a-2c36e5f479e5",
    "success": true
}
```

Si può vedere che il contenuto del risultato è coerente con quanto sopra, il che realizza la funzionalità di espansione video.

## Callback asincrono

Poiché il tempo di generazione dell'API Midjourney Videos è relativamente lungo, circa 1-2 minuti, se l'API non risponde per un lungo periodo, la richiesta HTTP manterrà la connessione, causando un consumo aggiuntivo di risorse di sistema. Pertanto, questa API offre anche supporto per callback asincroni.

Il flusso complessivo è: quando il client invia una richiesta, specifica un campo `callback_url` aggiuntivo. Dopo che il client ha inviato la richiesta API, l'API restituirà immediatamente un risultato, contenente un campo `task_id`, che rappresenta l'ID del compito corrente. Quando il compito è completato, il risultato del video generato verrà inviato al `callback_url` specificato dal client in formato JSON POST, che include anche il campo `task_id`, in modo che il risultato del compito possa essere associato tramite l'ID.

Di seguito, vediamo un esempio per capire come operare concretamente.

Innanzitutto, il callback Webhook è un servizio in grado di ricevere richieste HTTP, gli sviluppatori dovrebbero sostituirlo con l'URL del server HTTP che hanno costruito. Qui, per comodità di dimostrazione, utilizziamo un sito Web pubblico di esempio per Webhook [https://webhook.site/](https://webhook.site/), aprendo questo sito si ottiene un URL Webhook, come mostrato nell'immagine:

<p>
  <img src="https://cdn.xhuoapi.ai/lali6d.png" width="500" className="m-auto" />
</p>

Copia questo URL e puoi usarlo come Webhook, l'esempio qui è `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`.

Successivamente, possiamo impostare il campo `callback_url` su questo URL Webhook, riempiendo i parametri corrispondenti, come mostrato nell'immagine:

<p>
  <img src="https://cdn.xhuoapi.ai/vk0l0a.png" width="500" className="m-auto" />
</p>

Cliccando su Esegui, si può notare che si ottiene immediatamente un risultato, come segue:

```
{
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee"
}
```

Dopo un momento, possiamo osservare il risultato del video generato su `https://webhook.site/556e6971-b41f-4fa8-9151-6e91acd0399f`, come mostrato nell'immagine:

<p>
  <img src="https://cdn.xhuoapi.ai/7hcuw8.png" width="500" className="m-auto" />
</p>

Il contenuto è il seguente:

```json theme={null}
{
  "image_url": "https://storage.fonedis.cc/upload_1751818513244368774.png",
  "image_width": 560,
  "image_height": 688,
  "progress": 100,
  "video_id": "1751818512924054",
  "video_urls": [
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_0.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_1.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_2.mp4",
    "https://storage.fonedis.cc//video/9ff3783e-bcf6-4f11-b738-09aa52318e6e/0_3.mp4"
  ],
  "task_id": "b726a27a-f379-4d91-b569-cfe4b7b299ee",
  "success": true
}
```

Si può vedere che nel risultato c'è un campo `task_id`, gli altri campi sono simili a quelli sopra, tramite questo campo è possibile realizzare l'associazione dei compiti.

## Gestione degli errori

Quando si chiama l'API, se si verifica un errore, l'API restituirà il codice di errore e le informazioni corrispondenti. Ad esempio:

* `400 token_mismatched`: Richiesta non valida, probabilmente a causa di parametri mancanti o non validi.
* `400 api_not_implemented`: Richiesta non valida, probabilmente a causa di parametri mancanti o non validi.
* `401 invalid_token`: Non autorizzato, token di autorizzazione non valido o mancante.
* `429 too_many_requests`: Troppe richieste, hai superato il limite di frequenza.
* `500 api_error`: Errore interno del server, qualcosa è andato storto sul server.

### Esempio di risposta di errore

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusione

Attraverso questo documento, hai compreso come utilizzare l'API Midjourney Videos per generare video tramite l'inserimento di parole chiave e immagini di riferimento. Speriamo che questo documento possa aiutarti a integrare e utilizzare meglio questa API. Se hai domande, non esitare a contattare il nostro team di supporto tecnico.
