Ottenere i dati dei film in 14 lingue

GET /3/movie/{movie_id}?language=ru-RU restituisce titolo, trama, slogan e nomi dei generi in russo. Il parametro language accetta tag TMDB come ru-RU o pt-BR e funziona su ogni endpoint che restituisce testo. Gli ID restano uguali in ogni lingua, quindi una sola riga nel tuo database le serve tutte.

Ottieni 14 lingue con una sola chiave, l'original_title di ogni film, un endpoint di traduzioni che elenca tutte le lingue di un titolo e nomi dei generi localizzati. L'elenco completo è nella pagina lingue.

Le 14 lingue servite

LinguaCodiceTag di esempio
Ingleseenen-US
Russoruru-RU
Ucrainoukuk-UA
Bielorussobebe-BY
Cinesezhzh-CN
Portogheseptpt-BR
Bulgarobgbg-BG
Ebraicohehe-IL
Cecocscs-CZ
Rumenororo-RO
Francesefrfr-FR
Polaccoplpl-PL
Italianoitit-IT
Spagnoloeses-ES

Qualsiasi altro tag ripiega su en. Giapponese e coreano non sono serviti come lingue dell'interfaccia. I loro titoli originali tornano comunque in original_title per i film e original_name per le serie TV.

Quali dati ottieni

EndpointContenuto localizzato
GET /3/movie/{movie_id}title, overview, tagline, nomi dei generi
GET /3/tv/{tv_id}name, overview, tagline, nomi dei generi
GET /3/tv/{tv_id}/season/{season_number}name e overview di stagioni ed episodi
GET /3/person/{person_id}biography
GET /3/genre/movie/listNomi dei generi per filtri e menu
GET /3/movie/{movie_id}/translationsTutte le lingue di un titolo in una sola risposta
GET /3/movie/{movie_id}/imagesLocandine etichettate per lingua, filtrate con include_image_language
GET /3/movie/{movie_id}/videosVideo etichettati con iso_639_1, tutte le lingue in una sola risposta

Parti in 3 passaggi

  1. Scegli un piano nella pagina dei prezzi. Il numero di lingue non cambia con il piano, cambia solo la frequenza delle richieste.
  2. Crea una chiave nella dashboard del tuo account.
  3. Chiama qualsiasi endpoint con un tag language e invia la chiave come api_key o come header Bearer.

Esempio di richiesta

L'esempio in bash stampa il titolo di Fight Club (id 550) in tre lingue. Usa jq per stampare un campo. L'esempio in PHP richiede il bielorusso e ripiega sull'inglese quando la trama è vuota.

bashphp
for lang in en-US ru-RU he-IL; do
  curl -s "https://api.amodb.dev/3/movie/550?language=$lang" \
    -H "Authorization: Bearer $AMODB_KEY" | jq -r '.title'
done
<?php
function amodb(string $path, array $query = []): array
{
    $url = 'https://api.amodb.dev/3' . $path . '?' . http_build_query($query);
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('AMODB_KEY')],
    ]);
    $body = curl_exec($ch);
    $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    if ($status !== 200) {
        throw new RuntimeException("amodb returned $status");
    }
    return json_decode($body, true);
}

function localizedMovie(int $id, string $lang): array
{
    $movie = amodb("/movie/$id", ['language' => $lang]);
    $movie['text_language'] = $lang;
    if (trim($movie['overview'] ?? '') === '') {
        $fallback = amodb("/movie/$id", ['language' => 'en-US']);
        $movie['overview'] = $fallback['overview'] ?? '';
        $movie['text_language'] = 'en-US';
    }
    return $movie;
}

$movie = localizedMovie(550, 'be-BY');
echo $movie['title'], ' (', $movie['original_title'], ')', PHP_EOL;
echo '[', $movie['text_language'], '] ', $movie['overview'], PHP_EOL;

Risposta per language=ru-RU, ridotta a pochi campi. La chiave text_language nell'esempio PHP è aggiunta dal tuo codice, non dall'API.

JSON
{
  "genres": [
    {
      "id": 18,
      "name": "драма"
    },
    {
      "id": 53,
      "name": "триллер"
    }
  ],
  "id": 550,
  "original_language": "en",
  "original_title": "Fight Club",
  "overview": "Сотрудник страховой компании страдает хронической бессонницей и отчаянно пытается вырваться из мучительно скучной жизни. Однажды в очередной командировке он...",
  "poster_path": "/66RvLrRJTm4J8l3uHXWF09AICol.jpg",
  "tagline": "«Интриги. Хаос. Мыло»",
  "title": "Бойцовский клуб"
}

Ripiego quando un campo è vuoto

Non tutti i titoli hanno testo in ogni lingua. Un overview può tornare vuoto quando non esiste una traduzione, e un title o un tagline può tornare in inglese. L'API non inventa testo. Usa un ordine fisso così la pagina mostra sempre qualcosa:

  1. Richiedi la lingua che mostri.
  2. Se un campo è vuoto, richiedi en-US per lo stesso ID, oppure leggi la voce inglese dalla lista delle traduzioni.
  3. Se il titolo è vuoto, mostra original_title.
  4. Registra da quale lingua proviene ogni campo, così puoi riprovare più tardi.

La cache edge tiene una copia per lingua per ogni percorso in cache, quindi il ripiego in inglese di un titolo popolare di solito viene servito dalla cache.

Elencare tutte le traduzioni di un titolo

GET /3/movie/{movie_id}/translations restituisce un array translations, con una voce per ogni lingua che ha dati. L'elenco può essere più lungo delle 14 lingue servite: Fight Club ha 50 voci. Usalo per costruire un selettore di lingua, o per salvare tutti i testi di un titolo in una sola riga.

CampoSignificato
iso_639_1, iso_3166_1Codici di lingua e paese
english_nameNome della lingua in inglese
data.title (film) o data.name (serie TV), data.overview, data.taglineTesto localizzato, il titolo può essere vuoto
data.homepage, data.runtimeValori facoltativi per quella traduzione

Lo stesso endpoint esiste per serie TV ed episodi. Le voci delle serie portano data.name e nessun runtime, e le voci degli episodi portano solo name e overview. Le stagioni rispondono con una lista vuota, e persone e collezioni non hanno un endpoint di traduzioni. I dettagli sono nella pagina traduzioni. Una sola chiamata di traduzioni sostituisce fino a 14 chiamate di dettagli quando vuoi tutte le lingue insieme.

Locandine e video per lingua

Immagini e video portano i propri tag di lingua in iso_639_1. Sugli endpoint delle immagini passa un elenco separato da virgole e aggiungi null per gli elementi senza lingua, come le locandine senza testo. La risposta contiene gli elementi corrispondenti, quindi ordinali nel tuo codice.

ParametroUsato suEsempio
include_image_languageEndpoint delle immaginiru,en,null

Gli endpoint dei video restituiscono tutte le lingue in una sola risposta e ignorano include_video_language, quindi filtra tu su iso_639_1. Vedi immagini per dimensioni e CDN.

L'ebraico e il testo da destra a sinistra

L'ebraico è l'unica lingua da destra a sinistra tra le 14. Gestiscilo nella pagina, non nei dati:

  • Imposta lang="he" e dir="rtl" sull'elemento che contiene il testo.
  • Racchiudi i titoli in caratteri latini dentro un testo ebraico in un elemento <bdi> perché la punteggiatura non finisca dal lato sbagliato.
  • Usa proprietà CSS logiche come margin-inline-start invece di sinistra e destra.

Confronto

FunzionalitàFare scraping delle pagine da soloDataset solo in ingleseamodb
LingueUna lingua del sito per richiestaInglese14 lingue con language
Stesso ID in tutte le lingueURL diversi per linguaNon applicabileLo stesso ID numerico ovunque
Tutte le traduzioni di un titoloScaricare la pagina di ogni linguaNon applicabileUna sola chiamata translations
Locandine localizzateURL delle immagini per linguaVedi la loro documentazioneFiltro include_image_language
Titolo originaleDa estrarre dal testo della paginaVedi la loro documentazioneoriginal_title, original_name

Prezzi

L'insieme delle lingue è lo stesso su ogni piano, quindi paghi solo la frequenza e il periodo. Acquista 1, 3, 6, 12 o 24 mesi prepagati, con uno sconto di 0, 10, 20, 30 o 40 per cento su quelli più lunghi e senza rinnovo automatico. I piani da 20, 40 e 120 richieste al minuto includono ogni lingua e ogni endpoint. Un sito in cinque lingue richiede fino a cinque chiamate di dettagli per titolo, e le richieste ripetute sono servite dalla cache edge per 6 ore. Nessun piano gratuito. Vedi i prezzi.