ז'אנרים ורשימות חיפוש
נקודות הקצה של ז'אנרים ורשימות חיפוש מחזירות רשימות עזר קטנות שטוענים פעם אחת: מזהי ז'אנרים של סרטים וסדרות עם שמות ב-14 שפות, ובנוסף מדינות, שפות, תפקידי צוות, דירוגי גיל וספקי סטרימינג. הן משתמשות בנתיבים ובמבנים של TMDB v3, לא צריכות דפדוף ומשתנות לעיתים רחוקות, ולכן שמרו אותן במטמון ליום.
קבלת רשימת ז'אנרים של סרטים
GET / מחזיר כל ז'אנר של סרטים כ-id וכ-name. המזהים הם המספרים ש-genre_ids נושא בפריטי רשימה ושאותם with_genres מצפה לקבל בעמוד גילוי. השמות עוקבים אחרי הפרמטר language.
הדוגמה טוענת את הרשימה ובונה מפה של מזהה לשם, הדבר הראשון שרוב האפליקציות צריכות.
curl -s "https://api.amodb.dev/3/genre/movie/list?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
const res = await fetch(url, { headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` } });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const { genres } = await res.json();
const names = new Map(genres.map((g) => [g.id, g.name]));
console.log(names.get(878), names.size);import os
import requests
r = requests.get(
"https://api.amodb.dev/3/genre/movie/list",
params={"language": "en-US"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
names = {g["id"]: g["name"] for g in r.json()["genres"]}
print(names[878], len(names))<?php
$url = 'https://api.amodb.dev/3/genre/movie/list?language=en-US';
$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");
}
$names = [];
foreach (json_decode($body, true)['genres'] as $g) {
$names[$g['id']] = $g['name'];
}
echo $names[878], ' ', count($names), PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Genres struct {
Genres []struct {
ID int `json:"id"`
Name string `json:"name"`
} `json:"genres"`
}
func main() {
url := "https://api.amodb.dev/3/genre/movie/list?language=en-US"
req, _ := http.NewRequest("GET", url, 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 g Genres
if err := json.NewDecoder(res.Body).Decode(&g); err != nil {
panic(err)
}
names := map[int]string{}
for _, x := range g.Genres {
names[x.ID] = x.Name
}
fmt.Println(names[878], len(names))
}פרמטרים
api_keyשאילתהאחד משנייםהמפתח שלכם. השתמשו בו או בכותרתAuthorization: Bearer.languageשאילתהתגית TMDB כמוen-US,ru-RUאוpt-BR. השמות מוחזרים בשפה הזו. ברירת מחדלen-US.
שדות התגובה
| שדה | סוג | הערות |
|---|---|---|
genres | array | כל הרשימה בתגובה אחת, בלי דפדוף. |
genres[].id | integer | מזהה ז'אנר יציב. |
genres[].name | string | שם הז'אנר בשפה המבוקשת. |
תגובה לדוגמה
{
"genres": [
{ "id": 12, "name": "Adventure" },
{ "id": 14, "name": "Fantasy" },
{ "id": 16, "name": "Animation" },
{ "id": 18, "name": "Drama" }
]
}התגובה מכילה 27 ז'אנרים ממוינים לפי מזהה. כאן היא קוצרה ל-4 הראשונים.
מזהי ז'אנרים
שני נתיבי הז'אנרים מחזירים את 27 הז'אנרים האלה, ממוינים לפי מזהה. השמות שלמטה הם באנגלית. שפות אחרות מחזירות את אותם מזהים עם שמות מתורגמים.
| מזהה | שם |
|---|---|
| 12 | Adventure |
| 14 | Fantasy |
| 16 | Animation |
| 18 | Drama |
| 27 | Horror |
| 28 | Action |
| 35 | Comedy |
| 36 | History |
| 37 | Western |
| 53 | Thriller |
| 80 | Crime |
| 99 | Documentary |
| 878 | Science Fiction |
| 9648 | Mystery |
| 10402 | Music |
| 10749 | Romance |
| 10751 | Family |
| 10752 | War |
| 10759 | Action & Adventure |
| 10762 | Kids |
| 10763 | News |
| 10764 | Reality |
| 10765 | Sci-Fi & Fantasy |
| 10766 | Soap |
| 10767 | Talk |
| 10768 | War & Politics |
| 10770 | TV Movie |
רשימת ז'אנרים של סדרות
GET /3/genre/tv/list מקבל את אותו פרמטר language ומחזיר את אותה רשימה בדיוק, ולכן מפה אחת של מזהה לשם מכסה סרטים וסדרות. בנתוני רשימות, המזהים 10759 ו-10762 עד 10768 מופיעים רק בפריטי סדרות, ומזהים כמו 28, 12 ו-878 מופיעים בפריטי סרטים. כשמסננים סדרות בעמוד גילוי, השתמשו במזהי הסדרות, למשל 10765 למדע בדיוני ופנטזיה.
רשימות חיפוש
הנתיבים האלה מחזירים נתוני עזר לטפסים, למסננים ולמסכי הגדרות. כולם מקבלים את המפתח; אף אחד לא מקבל page.
| שיטה ונתיב | פרמטרים | כל פריט או מבנה |
|---|---|---|
GET / | אין | מערך של { iso_ |
GET / | אין | מערך של { iso_ |
GET / | אין | מערך של 14 מחרוזות כמו ru-RU |
GET / | אין | מערך של { department, jobs } כאשר jobs מפרט שמות תפקידים |
GET / | אין | { certifications } לפי קוד מדינה, 10 מדינות |
GET / | אין | { certifications } לפי קוד מדינה, מפתח אחד לכל מדינה בקטלוג |
GET / | language | { results } של { iso_ |
GET / | language, watch_region | { results } של ספקים |
GET / | language, watch_region | { results } של ספקים |
/ ו-/ מתעלמים מ-language ותמיד מחזירים את אותם שמות. ה-native_name ברשימת האזורים עוקב אחרי language. amodb לא מציע את /.
פריט דירוג גיל מציין את הדירוג, מה הוא אומר ואת סדר המיון שלו. הפריטים מקובצים לפי קוד מדינה, ולכן קריאה אחת מכסה כל שוק. רשימת הסרטים כוללת את טקסטי הדירוג. ברשימת הסדרות meaning הוא מחרוזת ריקה.
{
"certifications": {
"US": [
{ "certification": "PG", "meaning": "Some material may not be suitable for children under 10.", "order": 3 },
{ "certification": "R", "meaning": "Under 17 requires accompanying parent or adult guardian.", "order": 5 }
]
}
}הדוגמה קוצרה ל-2 מתוך 6 הפריטים של ארצות הברית. רשימת הסרטים מכסה את AU, BR, CA, DE, ES, FR, GB, IT, RU ו-US.
לפריט ספק יש provider_id, provider_name, logo_path, display_priority ו-display_priorities, מפה מקוד מדינה לעדיפות. בלי watch_region מקבלים את כל הספקים. עם watch_region=US נשארים רק ספקים שמשרתים את המדינה הזו. אזור לא מוכר מחזיר מערך results ריק. העבירו קוד מ-/. לוגואים של ספקים נטענים ממארח התמונות, ראו תמונות.
{
"display_priorities": { "AT": 1, "DE": 1, "GB": 1, "JP": 1, "US": 3 },
"display_priority": 3,
"logo_path": "/gMZdpavHmxFNnLpMHwVxfqeux2g.png",
"provider_name": "Amazon Prime Video",
"provider_id": 9
}זה פריט אחד מ-/.
שגיאות
| HTTP | status_code | מתי |
|---|---|---|
| 401 | 7 | המפתח חסר או שגוי. |
| 402 | 36 | תקופת המסלול הסתיימה. |
| 404 | 34 | הנתיב לא קיים, למשל /genre/book/list. |
| 405 | 37 | השתמשתם בשיטת כתיבה בנתיב חיפוש. |
| 429 | 25 | חרגתם מהבקשות שלכם לדקה. המתינו Retry-After שניות. |
פרטים על כל קוד בעמוד שגיאות. מגבלות המסלולים בעמוד מגבלות קצב.
הערות מעשיות
- טענו את הרשימות פעם אחת לכל שפה בהפעלה ושמרו אותן בזיכרון או בקובץ. הקצה שומר את נתיבי
/configurationבמטמון 24 שעות, ולכן רענון יומי בצד שלכם מספיק. - שמרו במסד הנתונים מזהי ז'אנרים, לא שמות. שם משתנה עם השפה, מזהה לא.
- שני נתיבי הז'אנרים מחזירים את אותם 27 פריטים, ולכן מפה אחת מכסה סרטים וסדרות. המזהים 10759 ו-10762 עד 10768 מופיעים רק בפריטי סדרות.
with_genres=28,12בעמוד גילוי פירושו אקשן והרפתקאות יחד.with_genres=28|12פירושו אחד מהם.- שמות ז'אנרים עוקבים אחרי הפרמטר
language. תגית מחוץ ל-14 שפות הבסיס שבעמוד שפות חוזרת לאנגלית, וכמה שמות נשארים באנגלית בחלק מהשפות, למשל10759באיטלקית.