API за сериали
Ендпойнтът за сериал връща един сериал по id на GET /3/tv/{series_id}: имена, описание, статус, сезони, мрежи, жанрове и указатели към последния и следващия епизод. JSON съвпада с TMDB v3, така че съществуващите клиенти се нуждаят само от нов базов URL. Добавете append_to_response, за да слеете възрастови рейтинги, участници и оценки в една заявка.
Вземане на детайли за сериал
GET /3/tv/{series_id} връща основния запис на един сериал: имена, описание, статус, жанрове, мрежи, списъка със сезони и указатели към последния и следващия епизод. Id е числовото tv id на TMDB, така че сериал, който пазите като 1396, запазва това id и тук. Id на филми и id на сериали са отделни пространства, затова винаги пазете вида медия до числото.
Примерът иска Breaking Bad на английски и в същото извикване добавя възрастовите му рейтинги и външните оценки.
curl -sSf "https://api.amodb.dev/3/tv/1396?language=en-US&append_to_response=content_ratings,ratings" \
-H "Authorization: Bearer $AMODB_KEY"const params = new URLSearchParams({ language: 'en-US', append_to_response: 'content_ratings,ratings' });
const res = await fetch(`https://api.amodb.dev/3/tv/1396?${params}`, {
headers: { Authorization: `Bearer ${process.env.AMODB_KEY}` },
});
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const show = await res.json();
const us = show.content_ratings.results.find((r) => r.iso_3166_1 === 'US');
console.log(show.name, show.status, show.number_of_seasons, us?.rating);import os
import requests
r = requests.get(
"https://api.amodb.dev/3/tv/1396",
params={"language": "en-US", "append_to_response": "content_ratings,ratings"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
show = r.json()
us = next((x for x in show["content_ratings"]["results"] if x["iso_3166_1"] == "US"), None)
print(show["name"], show["status"], show["number_of_seasons"], us and us["rating"])<?php
$url = 'https://api.amodb.dev/3/tv/1396?' . http_build_query([
'language' => 'en-US',
'append_to_response' => 'content_ratings,ratings',
]);
$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");
}
$show = json_decode($body, true);
echo $show['name'], ' ', $show['status'], ' ', $show['number_of_seasons'], PHP_EOL;package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"os"
"time"
)
type Show struct {
Name string `json:"name"`
Status string `json:"status"`
NumberOfSeasons int `json:"number_of_seasons"`
NumberOfEpisodes int `json:"number_of_episodes"`
Next *struct {
AirDate string `json:"air_date"`
} `json:"next_episode_to_air"`
}
func main() {
q := url.Values{"language": {"en-US"}}
req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/tv/1396?"+q.Encode(), 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 s Show
if err := json.NewDecoder(res.Body).Decode(&s); err != nil {
panic(err)
}
next := "none scheduled"
if s.Next != nil {
next = s.Next.AirDate
}
fmt.Println(s.Name, s.Status, s.NumberOfSeasons, s.NumberOfEpisodes, next)
}Параметри
series_idпътзадължителенЧислов id на сериала, например1396.api_keyзаявкаедин от дватаВашият ключ. Ползвайте него или заглавкатаAuthorization: Bearer.languageзаявкаТаг на TMDB, напримерen-US,uk-UAилиes-ES. Поддържат се 14 основни езика. По подразбиранеen-US.append_to_responseзаявкаСписък с подресурси, разделени със запетая, които да се слеят в отговора, до 20 стойности.
Полета на отговора
| Поле | Тип | Бележки |
|---|---|---|
id | цяло число | Id на сериала. |
name, original_name | низ | Локализирано и оригинално заглавие. Оригинални японски или корейски имена остават в original_name. |
overview, tagline | низ | Локализиран текст, празен, когато няма превод. |
first_air_date, last_air_date | низ или null | YYYY-MM-DD. |
status | низ | Жизнен цикъл, вижте таблицата по-долу. |
in_production | булева стойност | true, докато сериалът още се снима. |
number_of_seasons, number_of_episodes | цяло число | Общи стойности, както са записани за сериала. |
episode_run_time | масив | Типична продължителност на епизодите в минути, може да е празен. |
seasons | масив | По едно кратко описание на сезон с id, season_number, name, overview, episode_count, air_date, poster_path, vote_average. |
last_episode_to_air, next_episode_to_air | обект или null | Кратки описания на епизоди, с формата на обектите от страницата сезони и епизоди. |
networks, production_companies | масив | id, name, logo_path, origin_country. |
production_countries, spoken_languages | масив | Държави с iso_3166_1 и name. Езици с english_name, iso_639_1 и name. |
created_by | масив | Създатели с id, name, profile_path и credit_id. Празен при повечето сериали. |
genres | масив | Обекти с id и name. Id на жанровете за сериали се различават от id на филмите. |
origin_country, original_language, languages | масив, низ | Кодове на държави и езикови кодове. |
homepage | низ | Официален сайт, празен, когато е неизвестен. |
poster_path, backdrop_path | низ или null | Добавя се към https:/. Вижте изображения. |
popularity | число | Относителна оценка, използвана от списъка с популярни. |
vote_average, vote_count | число, цяло число | Обобщена потребителска оценка. |
adult | булева стойност | Винаги false. Заглавия за възрастни никога не се обслужват. |
Примерен отговор
GET /, с изрязани дълги масиви и текст:
{
"adult": false,
"backdrop_path": "/ycFcYYnzVc8mWw41neszGPMyKc3.jpg",
"created_by": [],
"episode_run_time": [
48,
49
],
"first_air_date": "2008-01-20",
"genres": [
{
"id": 18,
"name": "Drama"
},
{
"id": 80,
"name": "Crime"
}
],
"homepage": "",
"id": 1396,
"in_production": false,
"languages": [
"en"
],
"last_air_date": "2013-09-29",
"last_episode_to_air": {
"air_date": "2013-09-29",
"episode_number": 16,
"episode_type": "standard",
"id": 62161,
"name": "פלינה",
"overview": "הסדרה זוכת הפרסים מגיעה לסיום דרמתי בפרק החותם אותה.",
"production_code": "",
"runtime": 56,
"season_number": 5,
"show_id": 1396,
"still_path": "/pA0YwyhvdDXP3BEGL2grrIhq8aM.jpg",
"vote_average": 0,
"vote_count": 0
},
"name": "Breaking Bad",
"next_episode_to_air": null,
"networks": [
{
"id": 174,
"logo_path": "/pmvRmATOCaDykE6JrVoeYxlFHw3.png",
"name": "AMC",
"origin_country": "US"
}
],
"number_of_episodes": 62,
"number_of_seasons": 5,
"origin_country": [
"US"
],
"original_language": "en",
"original_name": "Breaking Bad",
"overview": "Walter White, a New Mexico chemistry teacher, is diagnosed with Stage III cancer and given a prognosis of o...",
"popularity": 268.4968,
"poster_path": "/anFx9aTOOYqgS3v7x3R84Kz67ly.jpg",
"production_companies": [
{
"id": 2605,
"logo_path": null,
"name": "Gran Via Productions",
"origin_country": "US"
},
{
"id": 11073,
"logo_path": "/wHs44fktdoj6c378ZbSWfzKsM2Z.png",
"name": "Sony Pictures Television",
"origin_country": "US"
}
],
"production_countries": [
{
"iso_3166_1": "US",
"name": "United States of America"
}
],
"seasons": [
{
"air_date": "2009-02-17",
"episode_count": 9,
"id": 3577,
"name": "特别篇",
"overview": "",
"poster_path": "/ikBSCmgG5Z4jequUUAjKpf1QG3T.jpg",
"season_number": 0,
"vote_average": 0
},
{
"air_date": "2008-01-20",
"episode_count": 7,
"id": 3572,
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by a dire medical diagnosis. Stre...",
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}
],
"spoken_languages": [
{
"english_name": "English",
"iso_639_1": "en",
"name": "English"
},
{
"english_name": "Spanish",
"iso_639_1": "es",
"name": "Español"
}
],
"status": "Ended",
"tagline": "Change the equation.",
"vote_average": 9,
"vote_count": 18863,
"content_ratings": {
"results": [
{
"descriptors": [],
"iso_3166_1": "AT",
"rating": "16"
},
{
"descriptors": [],
"iso_3166_1": "AU",
"rating": "MA 15+"
}
]
},
"ratings": {
"imdb": {
"value": 9.5,
"votes": 2671962
},
"kinopoisk": {
"value": 8.9,
"votes": null
},
"metacritic": null,
"rotten_tomatoes": {
"value": 96,
"votes": null
},
"tmdb": {
"value": 9,
"votes": 18863
}
}
}Блоковете content_ratings и ratings идват от append_to_response. Имената и описанията в seasons, last_episode_to_air и next_episode_to_air се пазят за всеки запис отделно и може да не следват language, както показва еврейското име на епизод по-горе. Локализирания текст на сезони и епизоди четете от ендпойнта за сезон.
Статус и указатели към епизоди
status показва на какъв етап е сериалът, а next_episode_to_air подсказва кога да погледнете отново.
Стойност на status | Значение | next_episode_to_air |
|---|---|---|
Returning Series | Излъчва се сега или е между сезони. | Зададен, когато датата е известна, иначе null. |
Planned, In Production | Още не е редовен сериал. | Обикновено null. |
Ended | Е приключил излъчването си. | Null. |
Canceled | Спрян преди планирания край. | Null. |
Продължаващ сериал между сезони има next_episode_to_air със стойност null, затова четете null като „няма известна дата“, а не като „приключил“.
Масивът seasons изброява по едно кратко описание на сезон, а сезон 0 съдържа специалните епизоди. За да прочетете епизодите на сезон, извикайте ендпойнта от страницата сезони и епизоди.
Свързани ендпойнти за сериал
Всички пътища имат обща основа https:/, а ендпойнтите с локализиран текст приемат и language.
| Метод и път | Какво връща | Допълнителни параметри |
|---|---|---|
GET / | {id, results} с iso_3166_1, title, type, често празен | няма |
GET / | Възрастов рейтинг по държави | няма |
GET / | Списък с алтернативни подредби на епизодите, като DVD или сюжетна линия | няма |
GET / | Списък с 20 препоръчани сериала | няма |
GET / | Списък с 20 подобни сериала | няма |
GET / | results е празен за повечето сериали | няма |
GET / | Публични списъци, които съдържат сериала | page |
GET / | Стрийминг, наем и покупка по държави | няма |
GET /tv/latest | Най-новият добавен запис за сериал | няма |
Списъците recommendations и similar винаги връщат страница 1 с 20 елемента. Отговорът lists е странициран с page, по 20 списъка на страница. Другите странирани списъци в API приемат page от 1 до 500.
Възрастовите рейтинги идват като записи в results с iso_3166_1, rating и descriptors, затова изберете записа, който съвпада с държавата на зрителя. Доставчиците за гледане са подредени по код на държава, а всяка държава има link плюс списъци flatrate, rent и buy с provider_id, provider_name, logo_path и display_priority. Id на доставчици за филтриране идват от справочните списъци на страницата жанрове и справочни списъци.
Списъкът с групи епизоди връща id (низ), name, description, type, episode_count, group_count и network. amodb изброява групите, но не предлага ендпойнт, който връща епизодите на една група. Не предлага и пътищата changes на TMDB.
Слейте повече данни в едно извикване
Изброете подресурсите в append_to_response и всеки пристига под собствен ключ. Цялото извикване се брои веднъж към вашите 20, 40 или 120 заявки в минута. Работят до 20 стойности, а непознатите имена се игнорират без грешка. За сериал работят тези стойности:
| Стойност | Какво добавя | Подробности |
|---|---|---|
credits | Актьори и екип | Участници |
external_ids | Id като imdb_id, tvdb_id и wikidata_id | Търсене по външен идентификатор |
images, videos | Постери, фонови изображения, трейлъри | Изображения, Видеа |
keywords, translations | Етикети и преведени текстове | Ключови думи, Преводи |
content_ratings, alternative_titles, episode_groups, lists, watch/providers, similar, recommendations, reviews | Подресурсите от таблицата по-горе | Тази страница |
ratings, moods, soundtracks, wikidata, showtimes | Допълнения на amodb | Рейтинги, Настроения, Саундтраци, Прожекции |
Грешки
Неуспешно извикване връща тялото на грешката на TMDB. Грешно id дава status_code 34 със съобщението „The resource you requested could not be found.“
| HTTP | status_code | Кога |
|---|---|---|
| 401 | 7 | Ключът липсва или е грешен. |
| 402 | 36 | Периодът на плана е изтекъл. |
| 404 | 34 | Няма сериал с това id, заглавие за възрастни или път, който не се предлага. |
| 405 | 37 | Извикали сте метод за запис, например оценяване на сериал. |
| 429 | 25 | Надхвърлен е лимитът на заявки в минута. Изчакайте Retry-After секунди. |
Пълният списък е на страницата грешки, а лимитите по планове са на страницата лимити на заявките.
Практически бележки
- Детайлите за сериал и всеки подресурс по-горе се кешират за 6 часа. Проверявайте
last_episode_to_airне повече от няколко пъти на ден. - Искайте езика, който показвате. Празен
overviewозначава, че няма превод, затова за резервен вариант повторете заявката сen-US. - Ползвайте
number_of_seasonsкато граница на цикъла, когато взимате всеки сезон, по едно извикване. - За да изброите сериали, вместо да четете един, вижте търсене, откриване по филтри и тенденции и списъци.