API sezón a epizod seriálů
Jednu sezónu se všemi epizodami načtete přes GET /3/tv/{series_id}/season/{season_number} a jednu epizodu o úroveň hlouběji. JSON odpovídá TMDB v3 s air_date, episode_number, runtime a still_path. Každá epizoda nese crew a guest_stars, sezóna 0 obsahuje speciály a append_to_response přidává credits, images a videos.
Získání sezóny
GET / vrací jednu sezónu a její celé pole episodes v jedné odpovědi. Čísla sezón začínají od 1 a 0 je vyhrazena pro speciály. ID seriálu a čísla sezón vezměte ze záznamu seriály.
Příklad načte sezónu 1 seriálu Breaking Bad. Kód vypíše jeden řádek na epizodu.
curl -sSf "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"const url = 'https://api.amodb.dev/3/tv/1396/season/1?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 season = await res.json();
for (const ep of season.episodes) {
console.log(String(ep.episode_number).padStart(2, '0'), ep.name, ep.air_date, `${ep.runtime ?? '?'} min`);
}import os
import requests
r = requests.get(
"https://api.amodb.dev/3/tv/1396/season/1",
params={"language": "en-US"},
headers={"Authorization": f"Bearer {os.environ['AMODB_KEY']}"},
timeout=10,
)
r.raise_for_status()
season = r.json()
for ep in season["episodes"]:
print(f"{ep['episode_number']:02d}", ep["name"], ep["air_date"], ep["runtime"] or "?")<?php
$url = 'https://api.amodb.dev/3/tv/1396/season/1?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");
}
$season = json_decode($body, true);
foreach ($season['episodes'] as $ep) {
printf("%02d %s %s\n", $ep['episode_number'], $ep['name'], $ep['air_date']);
}package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Season struct {
Name string `json:"name"`
Episodes []struct {
EpisodeNumber int `json:"episode_number"`
Name string `json:"name"`
AirDate string `json:"air_date"`
Runtime int `json:"runtime"`
} `json:"episodes"`
}
func main() {
req, _ := http.NewRequest("GET", "https://api.amodb.dev/3/tv/1396/season/1?language=en-US", 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 Season
if err := json.NewDecoder(res.Body).Decode(&s); err != nil {
panic(err)
}
for _, e := range s.Episodes {
fmt.Printf("%02d %s %s %d min\n", e.EpisodeNumber, e.Name, e.AirDate, e.Runtime)
}
}Parametry
series_idpathpovinnýČíselné ID seriálu, například1396.season_numberpathpovinnýCelé číslo sezóny.0vrací speciály.api_keyqueryjeden ze dvouVáš klíč. Použijte jej, nebo hlavičkuAuthorization: Bearer.languagequeryTag TMDB, napříkladen-USnebofr-FR. Podporuje se 14 základních jazyků. Výchozíen-US.append_to_responsequeryHodnoty na úrovni sezóny:credits,external_ids,images,videos. Jiné názvy se ignorují.
Pole odpovědi
| Pole | Typ | Poznámky |
|---|---|---|
id, season_number | integer | ID sezóny a její číslo v seriálu. |
name, overview | string | Lokalizovaný text, prázdný, když překlad neexistuje. |
air_date | string nebo null | Datum první epizody, YYYY-MM-DD. |
poster_path | string nebo null | Připojte k https:/. |
vote_average | number | Souhrnné skóre uživatelů pro sezónu. |
episodes | array | Každá epizoda, s poli uvedenými v další části. |
Příklad odpovědi
GET /. Sezóna má 7 epizod, takže episodes je zkráceno na jednu položku a pole crew a guest_stars této položky jsou vynechána:
{
"air_date": "2008-01-20",
"episodes": [
{
"air_date": "2008-01-20",
"episode_number": 1,
"episode_type": "standard",
"id": 62085,
"name": "Pilot",
"overview": "When an unassuming high school chemistry teacher discovers he has a rare form of lung cancer, he decides to...",
"production_code": "",
"runtime": 59,
"season_number": 1,
"show_id": 1396,
"still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
"vote_average": 0,
"vote_count": 0
}
],
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by a dire medical diagnosis. Stre...",
"id": 3572,
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}Každá epizoda v odpovědi sezóny nese také pole crew a guest_stars s tvarem položky popsaným na stránce obsazení a štáb. runtime může být u neodvysílané epizody null.
Získání epizody
GET / vrací jednu epizodu. Odpověď sezóny už obsahuje všechny epizody s crew a guest_stars, proto tento endpoint použijte k obnovení jednoho záznamu bez opětovného načtení sezóny. Přijímá language a append_to_response s credits, external_ids, images, translations a videos. Požadavek jako / stojí jeden požadavek.
| Pole | Typ | Poznámky |
|---|---|---|
id | integer | ID epizody. |
show_id | integer | ID seriálu. Je v odpovědi sezóny a v odkazech seriálu, ne v odpovědi jedné epizody. |
season_number, episode_number | integer | Pozice v seriálu. Použijte je k sestavení cesty požadavku. |
name, overview | string | Lokalizovaný text. |
air_date | string nebo null | Jen datum, bez času a časového pásma. Null, když není naplánováno. |
episode_type | string | standard u běžných epizod. Finále poznáte porovnáním episode_number s episode_count dané sezóny v záznamu seriálu. |
runtime | integer nebo null | Minuty. |
production_code | string | Kód studia, často prázdný. |
still_path | string nebo null | Záběr epizody. Použijte w300 nebo original z https:/. |
vote_average, vote_count | number, integer | Souhrnné skóre uživatelů. |
crew, guest_stars | array | Záznamy účasti u této epizody, viz obsazení a štáb. |
Další a poslední epizoda v záznamu seriálu
Endpoint seriálu vrací next_episode_to_air a last_episode_to_air. Každý je souhrn epizody s výše uvedenými poli, plus show_id a bez crew a guest_stars. Další je null u skončených seriálů a u pokračujících seriálů bez potvrzeného data. Ukázka čte South Park, pokračující seriál.
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
const res = await fetch('https://api.amodb.dev/3/tv/2190', { headers });
if (!res.ok) throw new Error(`amodb returned ${res.status}`);
const next = (await res.json()).next_episode_to_air;
console.log(next ? `Next: S${next.season_number}E${next.episode_number} on ${next.air_date}` : 'No upcoming episode');Pro odpočet porovnejte air_date s místním datem diváka. Hodnota nenese denní dobu, zobrazte proto datum, ne čas na hodinách.
Dílčí zdroje sezón a epizod
Cesty sezón a epizod mají vlastní dílčí zdroje. Několik z nich dnes vrací prázdná data.
| Metoda a cesta | Vrací |
|---|---|
GET / | id, cast a crew sezóny |
GET / | id a prázdné pole posters |
GET / | id a prázdné pole results |
GET / | id plus tvdb_id, wikidata_id a další ID, všechna null |
GET / | id a prázdné pole translations |
GET .../ | id, prázdné cast, crew a guest_stars |
GET .../ | id a pole stills se záběrem epizody |
GET .../ | id a prázdné pole results |
GET .../ | id plus imdb_id, tvdb_id a další ID, všechna null |
GET .../ | id a pole translations s názvem a popisem pro každý jazyk |
Obsazení sezón a epizod pokrývá stránka obsazení a štáb a záběry stránka obrázky. amodb nenabízí cesty changes z TMDB ani endpoint pro epizody jedné skupiny epizod.
Chyby
| HTTP | status_code | Kdy |
|---|---|---|
| 401 | 7 | Klíč chybí nebo je nesprávný. |
| 402 | 36 | Platnost tarifu skončila. |
| 404 | 34 | Seriál, sezóna nebo epizoda neexistuje, například sezóna 0 u seriálu bez speciálů, nebo cesta, která se nenabízí. |
| 405 | 37 | Zavolali jste metodu pro zápis. |
| 429 | 25 | Překročen počet požadavků za minutu. Počkejte tolik sekund, kolik říká Retry-After. |
Úplný formát těla viz chyby a okna viz limity požadavků.
Praktické poznámky
- Sezóny a epizody se cachují 6 hodin. Aktuální sezónu načtěte znovu jednou nebo dvakrát denně, dokud se seriál vysílá.
- Seriál o 10 sezónách potřebuje 10 volání sezón. V tarifu s 20 požadavky za minutu to spotřebuje polovinu minutového limitu a opakovaný běh do 6 hodin se obslouží z cache na edge.
- Neodvysílaná epizoda může mít
air_datenull,runtimenull a prázdnýoverview. Vykreslete zástupný text místo selhání. - Záběry jsou široké snímky, ne plakáty. Pro seznamy žádejte
w300aoriginaljen pro zobrazení v plné velikosti.