API תרגומים
נקודות הקצה של התרגומים מחזירות כל גרסת שפה של רשומה בתגובה אחת: כותרת או שם, תקציר, סלוגן ואתר בית לסרטים ולסדרות, ושם ותקציר לפרקים. כל שורה נושאת iso_639_1, iso_3166_1 ו-english_name. השתמשו בהן כדי לקרוא שפות שהפרמטר language לא מגיש או כדי לבנות שרשרת גיבוי.
קבלת תרגומים של סרט
GET / מחזיר שורה אחת לכל שפה שיש בה טקסט לסרט. בכל שורה יש אובייקט data עם השדות המתורגמים. הקריאה לא מקבלת פרמטר שפה, כי כל העניין הוא לראות את כל השפות בבת אחת.
הדוגמה מוצאת את השורה הרוסית ומדפיסה את הכותרת שלה ואת תחילת התקציר.
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")
}פרמטרים
movie_idנתיבחובהמזהה סרט מספרי, למשל550.api_keyשאילתהאחד משנייםהמפתח שלכם. השתמשו בו או בכותרתAuthorization: Bearer.
שדות התגובה
| שדה | סוג | הערות |
|---|---|---|
id | integer | מזהה הסרט. |
translations | array | שורה אחת לכל שפה עם טקסט, ממוינת לפי קוד שפה. סרט 550 מחזיר 50 שורות. |
translations[].iso_ | string | קוד המדינה שמתלווה לשפה, כמו US עבור en או BR עבור pt. בשפות מחוץ ל-14 המוגשות הוא חוזר על קוד השפה באותיות גדולות. |
translations[].iso_ | string | קוד שפה כמו ru או pt. ייחודי במערך. |
translations[].name | string | השפה כתובה בשפה עצמה. |
translations[].english_ | string | שם השפה באנגלית. |
translations[].data | object | השדות המתורגמים. המפתחות תלויים במשאב, ראו בטבלה למטה. |
תגובה לדוגמה
מוצגות שתיים מתוך 50 השורות, והתקצירים קוצרו.
{
"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
}
}
]
}ב-amodb הערך runtime הוא תמיד 0 בשורת תרגום. קראו את משך הסרט מרשומת פרטי סרט.
נקודות קצה של תרגומים ומפתחות ה-data שלהן
כל הנתיבים חולקים את בסיס הכתובת https:/. כל אחד מחזיר id ומערך translations במבנה השורה שלמעלה. רק המפתחות בתוך data משתנים.
| שיטה ונתיב | מפתחות data |
|---|---|
GET / | title, overview, homepage, tagline, runtime (תמיד 0) |
GET / | name, overview, homepage, tagline |
GET / | אין, המערך תמיד ריק |
GET / | name, overview |
רשומות סדרות מפרטות בערך כמה שפות כמו סרטים. שורות של פרקים מכסות רק את השפות המוגשות שיש בהן טקסט לפרק הזה, מ-2 עד 14 בדוגמאות שנבדקו. התייחסו למפתח חסר כאל ערך ריק, והתעלמו ממפתחות שאינכם מכירים. את הרשומות האב ראו בסדרות טלוויזיה.
amodb לא מציע תרגומים לאנשים או לאוספים. ביוגרפיה של אדם עוקבת אחרי הפרמטר language בקריאת פרטי האדם, ותקציר של אוסף מגיע כפי שהוא שמור.
גיבוי כשחסר טקסט
כותר יכול להתקיים ב-14 שפות ועדיין להיות עם תקציר ריק בשפה שהמשתמש בחר. עברו על שרשרת שפות, קחו את הערך הראשון שאינו ריק וזכרו מאיזו שפה הוא הגיע.
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');לסדרה, העבירו את 'name' כשדה במקום 'title'. סמנו בממשק טקסט משפת גיבוי, כדי שהמשתמש יבין למה עמוד באוקראינית מציג תקציר באנגלית.
תרגומים או הפרמטר language
| צורך | שימוש |
|---|---|
| להציג שפה אחת למשתמש אחד | language בקריאת הפרטים |
| לרשום את כל השפות של כותר בעורך | נקודת הקצה הזו |
לקרוא שפה ש-language לא מגיש, כמו ja | נקודת הקצה הזו, בחרו שורה לפי iso_639_1 |
| לבדוק לאילו מ-14 השפות המוגשות יש טקסט | נקודת הקצה הזו, השוו iso_639_1 |
| לבנות קישורים בשפות חלופיות לעמוד | נקודת הקצה הזו, קראו את הקודים הקיימים |
את התגיות ש-language מקבל ראו בעמוד שפות. כל תגית אחרת חוזרת לאנגלית בקריאת פרטים.
שגיאות
| HTTP | status_code | מתי |
|---|---|---|
| 401 | 7 | המפתח חסר או שגוי. |
| 402 | 36 | תקופת המסלול הסתיימה. |
| 404 | 34 | אין עונה או פרק עם המזהה הזה, או מזהה שאינו מספר. |
| 405 | 37 | השתמשתם בשיטת כתיבה בנתיב תרגומים. |
| 429 | 25 | עברתם את הבקשות שלכם לדקה. המתינו Retry-After שניות. |
מזהה סרט או סדרה שלא קיים אינו שגיאה בנתיב הזה: הוא עונה 200 עם "translations": [], ואילו נתיב הפרטים עונה 404. עוד על שגיאות ומגבלות קצב.
הערות מעשיות
- קריאה אחת מחליפה עד 14 קריאות פרטים. השתמשו בה כשצריך יותר משתי שפות של אותו כותר.
- השורות ממוינות לפי קוד שפה, וזה לא סדר עדיפות. בחרו שורות לפי
iso_639_1, אף פעם לא לפי מיקום במערך. - קריאות מסוג פרטים נשמרות בקצה במטמון 6 שעות, ולכן מטמון לקוח באותו אורך לא עולה כלום בטריות.
- כותרות מקוריות בכתבים אחרים, כמו יפנית או קוריאנית, זמינות תמיד ב-
original_titleוב-original_nameברשומת הפרטים. - כדי להוסיף תרגומים לקריאת פרטים, העבירו
append_וקראו את אותו מערך מהתגובה. זה עובד לסרטים, לסדרות ולפרקים. לבלוק המצורף איןto_ response= translations id.