API překladů
Endpointy překladů vracejí všechny jazykové verze záznamu v jedné odpovědi: title nebo name, overview, tagline a homepage u filmů a seriálů, name a overview u epizod. Každý řádek nese iso_639_1, iso_3166_1 a english_name. Použijte je pro jazyky, které parametr language neobsluhuje, nebo k sestavení řetězce záloh.
Získání překladů filmu
GET / vrací jeden řádek na každý jazyk, který má pro film text. Každý řádek obsahuje objekt data s přeloženými poli. Volání nepřijímá parametr jazyka, protože celý smysl je vidět všechny jazyky najednou.
Příklad najde ruský řádek a vypíše jeho název a začátek popisu.
curl -s "https://api.amodb.dev/3/movie/550/translations" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/movie/550/translations';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const { translations } = await res.json();
const ru = translations.find((t) => t.iso_639_1 === 'ru');
console.log(ru ? `${ru.data.title}: ${ru.data.overview.slice(0, 80)}` : 'no Russian row');import os
import requests
r = requests.get(
"https://api.amodb.dev/3/movie/550/translations",
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
ru = next((t for t in r.json()["translations"] if t["iso_639_1"] == "ru"), None)
print(f"{ru['data']['title']}: {ru['data']['overview'][:80]}" if ru else "no Russian row")<?php
$ch = curl_init('https://api.amodb.dev/3/movie/550/translations');
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");
}
foreach (json_decode($body, true)['translations'] as $t) {
if ($t['iso_639_1'] === 'ru') {
echo $t['data']['title'], ': ', mb_substr($t['data']['overview'], 0, 80), PHP_EOL;
exit;
}
}
echo 'no Russian row', PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Translations struct {
Translations []struct {
ISO6391 string `json:"iso_639_1"`
Data struct {
Title string `json:"title"`
Overview string `json:"overview"`
} `json:"data"`
} `json:"translations"`
}
func main() {
req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/movie/550/translations", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
client := &http.Client{Timeout: 10 * time.Second}
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(res.Status)
}
var t Translations
if err := json.NewDecoder(res.Body).Decode(&t); err != nil {
panic(err)
}
for _, row := range t.Translations {
if row.ISO6391 == "ru" {
text := []rune(row.Data.Overview)
if len(text) > 80 {
text = text[:80]
}
fmt.Printf("%s: %s\n", row.Data.Title, string(text))
return
}
}
fmt.Println("no Russian row")
}Parametry
movie_idpathpovinnýČíselné ID filmu, například550.api_keyqueryjeden ze dvouVáš klíč. Použijte jej, nebo hlavičkuAuthorization: Bearer.
Pole odpovědi
| Pole | Typ | Poznámky |
|---|---|---|
id | integer | ID filmu. |
translations | array | Jeden řádek na každý jazyk, který má text, seřazeno podle kódu jazyka. Film 550 vrací 50 řádků. |
translations[].iso_ | string | Kód země patřící k jazyku, například US pro en nebo BR pro pt. U jazyků mimo 14 podporovaných opakuje kód jazyka velkými písmeny. |
translations[].iso_ | string | Kód jazyka, například ru nebo pt. V poli jedinečný. |
translations[].name | string | Jazyk zapsaný v tomto jazyce. |
translations[].english_ | string | Název jazyka anglicky. |
translations[].data | object | Přeložená pole. Klíče závisejí na zdroji, viz tabulka níže. |
Příklad odpovědi
Zobrazeny jsou dva z 50 řádků a popisy jsou zkráceny.
{
"id": 550,
"translations": [
{
"iso_3166_1": "US",
"iso_639_1": "en",
"name": "English",
"english_name": "English",
"data": {
"title": "Fight Club",
"overview": "A ticking-time-bomb insomniac and a slippery soap salesman channel primal male aggression into a shocking new form of therapy....",
"homepage": "https://www.20thcenturystudios.com/movies/fight-club",
"tagline": "Mischief. Mayhem. Soap.",
"runtime": 0
}
},
{
"iso_3166_1": "RU",
"iso_639_1": "ru",
"name": "Русский",
"english_name": "Russian",
"data": {
"title": "Бойцовский клуб",
"overview": "Сотрудник страховой компании страдает хронической бессонницей и отчаянно пытается вырваться из мучительно скучной жизни. Однажд...",
"homepage": "https://www.20thcenturystudios.com/movies/fight-club",
"tagline": "«Интриги. Хаос. Мыло»",
"runtime": 0
}
}
]
}V amodb je runtime v řádku překladu vždy 0. Délku čtěte ze záznamu detailu filmu.
Endpointy překladů a jejich klíče data
Všechny cesty sdílejí základ https:/. Každá vrací id a pole translations s tvarem řádku výše. Mění se jen klíče uvnitř data.
| Metoda a cesta | Klíče data |
|---|---|
GET / | title, overview, homepage, tagline, runtime (vždy 0) |
GET / | name, overview, homepage, tagline |
GET / | žádné, pole je vždy prázdné |
GET / | name, overview |
Záznamy seriálů uvádějí zhruba tolik jazyků jako filmy. Řádky epizod pokrývají jen podporované jazyky, které mají pro danou epizodu text, ve zkontrolovaných vzorcích od 2 do 14. Chybějící klíč berte jako prázdnou hodnotu a neznámé klíče ignorujte. Nadřazené záznamy viz seriály.
amodb nenabízí překlady pro osoby ani kolekce. Biografie osoby se řídí parametrem language volání detailů osoby a popis kolekce přichází tak, jak je uložen.
Záloha, když text chybí
Titul může existovat ve 14 jazycích a přesto mít prázdný popis v jazyce, který uživatel zvolil. Projděte řetězec jazyků, vezměte první neprázdnou hodnotu a zapamatujte si, z jakého jazyka pochází.
function pickText(translations, wanted, field) {
for (const code of [...wanted, 'en']) {
const row = translations.find((t) => t.iso_639_1 === code);
const value = row?.data?.[field];
if (value) return { code, value };
}
return null;
}
// Prefer Ukrainian, then Russian, then English.
// const hit = pickText(translations, ['uk', 'ru'], 'overview');U seriálu předejte jako pole 'name' místo 'title'. Text ze záložního jazyka v rozhraní označte, aby uživatel věděl, proč ukrajinská stránka ukazuje anglický obsah.
Překlady, nebo parametr language
| Potřeba | Použijte |
|---|---|
| Zobrazit jeden jazyk jednomu uživateli | language ve volání detailů |
| Vypsat všechny jazyky titulu v editoru | Tento endpoint |
Číst jazyk, který language neobsluhuje, například ja | Tento endpoint, řádek vyberte podle iso_639_1 |
| Zjistit, které ze 14 podporovaných jazyků mají text | Tento endpoint, porovnejte iso_639_1 |
| Sestavit odkazy na alternativní jazyky stránky | Tento endpoint, čtěte přítomné kódy |
Tagy, které language přijímá, viz jazyky. Jakýkoli jiný tag se ve volání detailů vrátí k angličtině.
Chyby
| HTTP | status_code | Kdy |
|---|---|---|
| 401 | 7 | Klíč chybí nebo je nesprávný. |
| 402 | 36 | Platnost tarifu skončila. |
| 404 | 34 | Sezóna ani epizoda s tímto ID neexistuje, nebo ID není číslo. |
| 405 | 37 | Použili jste metodu pro zápis na cestě překladů. |
| 429 | 25 | Překročili jste počet požadavků za minutu. Počkejte tolik sekund, kolik říká Retry-After. |
ID filmu nebo seriálu, které neexistuje, na této cestě není chyba: odpoví 200 s "translations": [], zatímco cesta detailů odpoví 404. Více viz chyby a limity požadavků.
Praktické poznámky
- Jedno volání nahradí až 14 volání detailů. Použijte je, když potřebujete víc než dva jazyky téhož titulu.
- Řádky jsou seřazeny podle kódu jazyka, což není pořadí priority. Řádky vybírejte podle
iso_639_1, nikdy podle pozice v poli. - Volání typu detailů se na edge cachují 6 hodin, takže stejně dlouhá cache u klienta nic nestojí na čerstvosti.
- Původní názvy v jiných písmech, například japonských nebo korejských, jsou vždy dostupné v
original_titleaoriginal_namev záznamu detailů. - Chcete-li přidat překlady k volání detailů, předejte
append_a čtěte stejné pole z odpovědi. Funguje pro filmy, seriály i epizody. Přidaný blok nemáto_ response= translations id.