ז'אנרים ורשימות חיפוש

נקודות הקצה של ז'אנרים ורשימות חיפוש מחזירות רשימות עזר קטנות שטוענים פעם אחת: מזהי ז'אנרים של סרטים וסדרות עם שמות ב-14 שפות, ובנוסף מדינות, שפות, תפקידי צוות, דירוגי גיל וספקי סטרימינג. הן משתמשות בנתיבים ובמבנים של TMDB v3, לא צריכות דפדוף ומשתנות לעיתים רחוקות, ולכן שמרו אותן במטמון ליום.

עודכן צפייה כ-Markdown

קבלת רשימת ז'אנרים של סרטים

GET /3/genre/movie/list מחזיר כל ז'אנר של סרטים כ-id וכ-name. המזהים הם המספרים ש-genre_ids נושא בפריטי רשימה ושאותם with_genres מצפה לקבל בעמוד גילוי. השמות עוקבים אחרי הפרמטר language.

הדוגמה טוענת את הרשימה ובונה מפה של מזהה לשם, הדבר הראשון שרוב האפליקציות צריכות.

bashjspyphpgo
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.

שדות התגובה

שדהסוגהערות
genresarrayכל הרשימה בתגובה אחת, בלי דפדוף.
genres[].idintegerמזהה ז'אנר יציב.
genres[].namestringשם הז'אנר בשפה המבוקשת.

תגובה לדוגמה

JSON
{
  "genres": [
    { "id": 12, "name": "Adventure" },
    { "id": 14, "name": "Fantasy" },
    { "id": 16, "name": "Animation" },
    { "id": 18, "name": "Drama" }
  ]
}

התגובה מכילה 27 ז'אנרים ממוינים לפי מזהה. כאן היא קוצרה ל-4 הראשונים.

מזהי ז'אנרים

שני נתיבי הז'אנרים מחזירים את 27 הז'אנרים האלה, ממוינים לפי מזהה. השמות שלמטה הם באנגלית. שפות אחרות מחזירות את אותם מזהים עם שמות מתורגמים.

מזההשם
12Adventure
14Fantasy
16Animation
18Drama
27Horror
28Action
35Comedy
36History
37Western
53Thriller
80Crime
99Documentary
878Science Fiction
9648Mystery
10402Music
10749Romance
10751Family
10752War
10759Action & Adventure
10762Kids
10763News
10764Reality
10765Sci-Fi & Fantasy
10766Soap
10767Talk
10768War & Politics
10770TV Movie

רשימת ז'אנרים של סדרות

GET /3/genre/tv/list מקבל את אותו פרמטר language ומחזיר את אותה רשימה בדיוק, ולכן מפה אחת של מזהה לשם מכסה סרטים וסדרות. בנתוני רשימות, המזהים 10759 ו-10762 עד 10768 מופיעים רק בפריטי סדרות, ומזהים כמו 28, 12 ו-878 מופיעים בפריטי סרטים. כשמסננים סדרות בעמוד גילוי, השתמשו במזהי הסדרות, למשל 10765 למדע בדיוני ופנטזיה.

רשימות חיפוש

הנתיבים האלה מחזירים נתוני עזר לטפסים, למסננים ולמסכי הגדרות. כולם מקבלים את המפתח; אף אחד לא מקבל page.

שיטה ונתיבפרמטריםכל פריט או מבנה
GET /configuration/countriesאיןמערך של { iso_3166_1, english_name, native_name }
GET /configuration/languagesאיןמערך של { iso_639_1, english_name, name }
GET /configuration/primary_translationsאיןמערך של 14 מחרוזות כמו ru-RU
GET /configuration/jobsאיןמערך של { department, jobs } כאשר jobs מפרט שמות תפקידים
GET /certification/movie/listאין{ certifications } לפי קוד מדינה, 10 מדינות
GET /certification/tv/listאין{ certifications } לפי קוד מדינה, מפתח אחד לכל מדינה בקטלוג
GET /watch/providers/regionslanguage{ results } של { iso_3166_1, english_name, native_name }
GET /watch/providers/movielanguage, watch_region{ results } של ספקים
GET /watch/providers/tvlanguage, watch_region{ results } של ספקים

/configuration/countries ו-/configuration/languages מתעלמים מ-language ותמיד מחזירים את אותם שמות. ה-native_name ברשימת האזורים עוקב אחרי language. amodb לא מציע את /configuration/timezones.

פריט דירוג גיל מציין את הדירוג, מה הוא אומר ואת סדר המיון שלו. הפריטים מקובצים לפי קוד מדינה, ולכן קריאה אחת מכסה כל שוק. רשימת הסרטים כוללת את טקסטי הדירוג. ברשימת הסדרות meaning הוא מחרוזת ריקה.

JSON
{
  "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 ריק. העבירו קוד מ-/watch/providers/regions. לוגואים של ספקים נטענים ממארח התמונות, ראו תמונות.

JSON
{
  "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
}

זה פריט אחד מ-/watch/providers/movie?watch_region=US.

שגיאות

HTTPstatus_codeמתי
4017המפתח חסר או שגוי.
40236תקופת המסלול הסתיימה.
40434הנתיב לא קיים, למשל /genre/book/list.
40537השתמשתם בשיטת כתיבה בנתיב חיפוש.
42925חרגתם מהבקשות שלכם לדקה. המתינו Retry-After שניות.

פרטים על כל קוד בעמוד שגיאות. מגבלות המסלולים בעמוד מגבלות קצב.

הערות מעשיות

  • טענו את הרשימות פעם אחת לכל שפה בהפעלה ושמרו אותן בזיכרון או בקובץ. הקצה שומר את נתיבי /configuration במטמון 24 שעות, ולכן רענון יומי בצד שלכם מספיק.
  • שמרו במסד הנתונים מזהי ז'אנרים, לא שמות. שם משתנה עם השפה, מזהה לא.
  • שני נתיבי הז'אנרים מחזירים את אותם 27 פריטים, ולכן מפה אחת מכסה סרטים וסדרות. המזהים 10759 ו-10762 עד 10768 מופיעים רק בפריטי סדרות.
  • with_genres=28,12 בעמוד גילוי פירושו אקשן והרפתקאות יחד. with_genres=28|12 פירושו אחד מהם.
  • שמות ז'אנרים עוקבים אחרי הפרמטר language. תגית מחוץ ל-14 שפות הבסיס שבעמוד שפות חוזרת לאנגלית, וכמה שמות נשארים באנגלית בחלק מהשפות, למשל 10759 באיטלקית.