Obtenir les données de films en 14 langues

GET /3/movie/{movie_id}?language=ru-RU renvoie le titre, le résumé, le slogan et les noms de genres en russe. Le paramètre language accepte les balises TMDB comme ru-RU ou pt-BR et fonctionne sur tous les points de terminaison qui renvoient du texte. Les identifiants restent les mêmes dans toutes les langues : une seule ligne de votre base de données les sert toutes.

Vous obtenez 14 langues avec une seule clé, l'original_title de chaque film, un point de terminaison de traductions qui liste toutes les langues d'un titre, et des noms de genres localisés. La liste complète est sur langues.

Les 14 langues servies

LangueCodeExemple de balise
Anglaisenen-US
Russeruru-RU
Ukrainienukuk-UA
Biélorussebebe-BY
Chinoiszhzh-CN
Portugaisptpt-BR
Bulgarebgbg-BG
Hébreuhehe-IL
Tchèquecscs-CZ
Roumainroro-RO
Françaisfrfr-FR
Polonaisplpl-PL
Italienitit-IT
Espagnoleses-ES

Toute autre balise se replie sur en. Le japonais et le coréen ne sont pas servis comme langues d'interface. Leurs titres originaux reviennent quand même dans original_title pour les films et original_name pour les séries.

Les données obtenues

Point de terminaisonContenu localisé
GET /3/movie/{movie_id}title, overview, tagline, noms de genres
GET /3/tv/{tv_id}name, overview, tagline, noms de genres
GET /3/tv/{tv_id}/season/{season_number}name et overview des saisons et des épisodes
GET /3/person/{person_id}biography
GET /3/genre/movie/listNoms de genres pour les filtres et les menus
GET /3/movie/{movie_id}/translationsToutes les langues d'un titre en une seule réponse
GET /3/movie/{movie_id}/imagesAffiches étiquetées par langue, filtrées avec include_image_language
GET /3/movie/{movie_id}/videosVidéos étiquetées par iso_639_1, toutes les langues en une seule réponse

Démarrer en 3 étapes

  1. Choisissez une offre sur les tarifs. Le nombre de langues ne change pas avec l'offre, seul le débit de requêtes change.
  2. Créez une clé dans le tableau de bord de votre compte.
  3. Appelez n'importe quel point de terminaison avec une balise language, et envoyez la clé dans api_key ou dans un en-tête Bearer.

Exemple de requête

L'exemple bash affiche le titre de Fight Club (id 550) en trois langues. Il utilise jq pour afficher un champ. L'exemple PHP demande le biélorusse et se replie sur l'anglais quand le résumé est vide.

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;

Réponse pour language=ru-RU, réduite à quelques champs. La clé text_language de l'exemple PHP est ajoutée par votre code, pas par l'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": "Бойцовский клуб"
}

Repli quand un champ est vide

Tous les titres n'ont pas de texte dans toutes les langues. Un overview peut revenir vide quand il n'existe pas de traduction, et un title ou un tagline peut revenir en anglais. L'API n'invente pas de texte. Utilisez un ordre fixe pour que la page affiche toujours quelque chose :

  1. Demandez la langue que vous affichez.
  2. Si un champ est vide, demandez en-US pour le même identifiant, ou lisez l'entrée anglaise de la liste des traductions.
  3. Si le titre est vide, affichez original_title.
  4. Enregistrez la langue d'origine de chaque champ, pour pouvoir réessayer plus tard.

Le cache de périphérie conserve une copie par langue pour chaque chemin mis en cache : le repli en anglais d'un titre populaire est donc généralement servi depuis le cache.

Lister toutes les traductions d'un titre

GET /3/movie/{movie_id}/translations renvoie un tableau translations, avec une entrée par langue disposant de données. La liste peut être plus longue que les 14 langues servies : Fight Club a 50 entrées. Utilisez-la pour construire un sélecteur de langue, ou pour stocker tous les textes d'un titre dans une seule ligne.

ChampSignification
iso_639_1, iso_3166_1Codes de langue et de pays
english_nameNom de la langue en anglais
data.title (films) ou data.name (séries), data.overview, data.taglineTexte localisé, le titre peut être vide
data.homepage, data.runtimeValeurs facultatives pour cette traduction

Le même point de terminaison existe pour les séries et les épisodes. Les entrées de séries portent data.name et pas de runtime, et les entrées d'épisodes ne portent que name et overview. Les saisons répondent par une liste vide, et les personnes et les collections n'ont pas de point de terminaison de traductions. Les détails sont sur traductions. Un seul appel de traductions remplace jusqu'à 14 appels de détails quand vous voulez toutes les langues à la fois.

Affiches et vidéos par langue

Les images et les vidéos portent leurs propres balises de langue dans iso_639_1. Sur les points de terminaison d'images, passez une liste séparée par des virgules et ajoutez null pour les éléments sans langue, comme les affiches sans texte. La réponse contient les éléments correspondants, classez-les donc dans votre code.

ParamètreUtilisé surExemple
include_image_languagePoints de terminaison d'imagesru,en,null

Les points de terminaison de vidéos renvoient toutes les langues en une seule réponse et ignorent include_video_language : filtrez donc vous-même sur iso_639_1. Voir images pour les tailles et le CDN.

L'hébreu et le texte de droite à gauche

L'hébreu est la seule langue de droite à gauche parmi les 14. Gérez-le dans la page, pas dans les données :

  • Définissez lang="he" et dir="rtl" sur l'élément qui contient le texte.
  • Entourez les titres en caractères latins au milieu d'un texte hébreu d'un élément <bdi> pour que la ponctuation ne passe pas du mauvais côté.
  • Utilisez des propriétés CSS logiques comme margin-inline-start au lieu de gauche et droite.

Comparaison

CapacitéExtraire les pages soi-mêmeJeu de données en anglais uniquementamodb
LanguesUne langue de site par requêteAnglais14 langues avec language
Même identifiant dans toutes les languesDes URL différentes par langueSans objetLe même identifiant numérique partout
Toutes les traductions d'un titreRécupérer chaque page de langueSans objetUn seul appel translations
Affiches localiséesURL d'images par langueVoir leur documentationFiltre include_image_language
Titre originalÀ extraire du texte de la pageVoir leur documentationoriginal_title, original_name

Tarifs

Le jeu de langues est le même pour toutes les offres : vous ne payez donc que le débit et la période. Achetez 1, 3, 6, 12 ou 24 mois prépayés, avec 0, 10, 20, 30 ou 40 pour cent de réduction sur les plus longues et sans renouvellement automatique. Les offres à 20, 40 et 120 requêtes par minute incluent toutes les langues et tous les points de terminaison. Un site en cinq langues demande jusqu'à cinq appels de détails par titre, et les requêtes répétées sont servies depuis le cache de périphérie pendant 6 heures. Pas d'offre gratuite. Voir les tarifs.