Obține toate episoadele unui sezon
GET / întoarce un sezon cu array-ul complet episodes. Fiecare episod are episode_number, name, overview, air_date, runtime și still_path. ID-urile sunt ID-urile numerice folosite de TMDB, de exemplu 1396 pentru Breaking Bad.
Primești sezoane, episoade cu date și durate, cadre, ultimul episod difuzat și următorul pentru un serial, plus lista ordinilor alternative de episoade. Câmpurile de text urmează parametrul language, iar o descriere rămâne goală când nu există traducere.
Ce date primești
| Endpoint | Întoarce |
|---|---|
GET /3/tv/{tv_id} | Rezumatul seasons, number_of_seasons, status, next_episode_to_air, last_episode_to_air |
GET / | Un sezon cu toate episodes |
GET / | Un episod cu crew și guest_stars |
GET / | Numele, type și numărul de episoade ale fiecărei ordini alternative definite pentru serial |
Câmpurile unui episod:
| Câmp | Tip | Observații |
|---|---|---|
id, show_id | număr întreg | ID-ul episodului și ID-ul serialului. show_id apare în listele de sezoane și în next_episode_to_air, nu pe calea unui singur episod |
episode_number, season_number | număr întreg | Poziția în sezon |
episode_type | șir | De exemplu standard |
name, overview | șir | Localizate prin language |
air_date | șir sau null | YYYY-MM-DD, gol sau null când nu este anunțat |
runtime | număr întreg sau null | Minute |
still_path | șir sau null | Se adaugă la https:/ |
vote_average, vote_count | număr, număr întreg | Momentan 0 la episoade |
production_code | șir | Cod de studio, adesea gol |
crew, guest_stars | array | Persoanele creditate pe episod, cu aceleași câmpuri ca un membru al distribuției |
Începe în 3 pași
- Alege un plan la prețuri. Toate planurile întorc aceleași date despre episoade, iar diferă doar ritmul cererilor.
- Creează o cheie în panoul contului tău și păstrează-o într-o variabilă de mediu.
- Cere
/3/tv/{tv_id}/season/1cu cheia într-un antet Bearer sau înapi_key.
Exemplu de cerere
Exemplul aduce sezonul 1 din Breaking Bad (ID de serial 1396) în engleză. Programul Go îl decodează în structuri tipizate și afișează câte o linie pentru fiecare episod, cu data difuzării, durata și URL-ul cadrului.
curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
-H "Authorization: Bearer $AMODB_KEY"package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"time"
)
type Episode struct {
EpisodeNumber int `json:"episode_number"`
Name string `json:"name"`
AirDate string `json:"air_date"`
Runtime int `json:"runtime"`
StillPath *string `json:"still_path"`
}
type Season struct {
Name string `json:"name"`
SeasonNumber int `json:"season_number"`
Episodes []Episode `json:"episodes"`
}
func main() {
client := &http.Client{Timeout: 10 * time.Second}
url := "https://api.amodb.dev/3/tv/1396/season/1?language=en-US"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AMODB_KEY"))
res, err := client.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
if res.StatusCode != http.StatusOK {
panic(fmt.Sprintf("amodb returned %s", res.Status))
}
var season Season
if err := json.NewDecoder(res.Body).Decode(&season); err != nil {
panic(err)
}
fmt.Println(season.Name)
for _, e := range season.Episodes {
still := "no still"
if e.StillPath != nil {
still = "https://img.amodb.dev/t/p/w300" + *e.StillPath
}
fmt.Printf("S%02dE%02d %s %3d min %s %s\n",
season.SeasonNumber, e.EpisodeNumber, e.AirDate, e.Runtime, e.Name, still)
}
}Răspuns scurtat: 2 dintre cele 7 episoade, fiecare cu un membru al echipei și un invitat.
{
"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...",
"production_code": "",
"runtime": 59,
"season_number": 1,
"show_id": 1396,
"still_path": "/ydlY3iPfeOAvu8gVqrxPoMvzNCn.jpg",
"vote_average": 0,
"vote_count": 0,
"crew": [
{
"department": "Camera",
"job": "Director of Photography",
"credit_id": "52b7029219c29533d00dd2c1",
"adult": false,
"gender": 2,
"id": 2483,
"known_for_department": "Camera",
"name": "约翰·托尔",
"original_name": "约翰·托尔",
"popularity": 1.1957,
"profile_path": "/cfL9A6tC7L5Ps5fq1o3WpVKGMb1.jpg"
}
],
"guest_stars": [
{
"character": "Steven Gomez",
"credit_id": "5271b489760ee35b3e0881a7",
"order": 8,
"adult": false,
"gender": 2,
"id": 61535,
"known_for_department": "Acting",
"name": "史蒂文·迈克尔·奎扎达",
"original_name": "史蒂文·迈克尔·奎扎达",
"popularity": 1.7511,
"profile_path": "/pVYrDkwI6GWvCNL2kJhpDJfBFyd.jpg"
}
]
},
{
"air_date": "2008-01-27",
"episode_number": 2,
"episode_type": "standard",
"id": 62086,
"name": "Cat's in the Bag...",
"overview": "Walt and Jesse attempt to tie up loose ends. The desperate situation gets mor...",
"production_code": "",
"runtime": 49,
"season_number": 1,
"show_id": 1396,
"still_path": "/AbMoecO0ZZio0LcgeLxlzdyGs6X.jpg",
"vote_average": 0,
"vote_count": 0,
"crew": [
{
"department": "Camera",
"job": "Director of Photography",
"credit_id": "52b7049c19c2953b63015013",
"adult": false,
"gender": 2,
"id": 17948,
"known_for_department": "Camera",
"name": "Reynaldo Villalobos",
"original_name": "Reynaldo Villalobos",
"popularity": 0.904,
"profile_path": "/4YlfhHDRZWhbRgeqT2Bwl1u5p9j.jpg"
}
],
"guest_stars": [
{
"character": "Krazy-8",
"credit_id": "52725845760ee3046b09426e",
"order": 504,
"adult": false,
"gender": 2,
"id": 1046460,
"known_for_department": "Acting",
"name": "Max Arciniega",
"original_name": "Max Arciniega",
"popularity": 1.4399,
"profile_path": "/eqKAJKPpt41KpsLIkkBnAY4HMAL.jpg"
}
]
}
],
"name": "Season 1",
"overview": "High school chemistry teacher Walter White's life is suddenly transformed by...",
"id": 3572,
"poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
"season_number": 1,
"vote_average": 0
}Preia un serial întreg
amodb nu acceptă valori de tip season/1 în append_to_response, așa că apelurile pentru sezoane rămân separate. Citește mai întâi number_of_seasons și lista seasons din detaliile serialului TV, apoi cere fiecare sezon într-o buclă.
const base = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };
async function get(path) {
const res = await fetch(base + path, { headers });
if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
return res.json();
}
const show = await get('/tv/1396');
for (const { season_number } of show.seasons) {
const season = await get(`/tv/1396/season/${season_number}`);
console.log(season.name, season.episodes.length);
}seasons include sezonul 0 când serialul are episoade speciale, deci Breaking Bad costă 1 apel de detalii plus 6 apeluri de sezon. Un serial cu 10 sezoane costă 11 cereri. Detaliile sunt ținute în cache la margine 6 ore, așa că stochează rezultatul și reîmprospătează-l după un program.
Date de difuzare și ce urmează
GET /3/tv/{tv_id} conține next_episode_to_air și last_episode_to_air, obiecte de episod complete cu name, air_date, season_number, episode_number, runtime și still_path. next_episode_to_air este null când nu s-a anunțat nimic. Combină-l cu status (de exemplu Returning Series, Ended sau Canceled) ca să decizi dacă afișezi un cronometru.
air_date este o dată calendaristică fără oră. Compară-o cu data de azi pentru a marca episoadele noi. Pentru un program al celor aflate în difuzare, listele airing_today și on_the_air de la tendințe și liste sunt ținute în cache 30 de minute.
Cadre și durate
Folosește w185 sau w300 pentru rândurile din listă și original pentru dimensiunea completă. Dimensiunile cadrelor sunt w92, w185, w300 și original. Un episod poate să nu aibă cadru, așa că afișează un substituent când still_path este null. Gazda de imagini nu cere cheie, vezi imagini.
runtime este în minute și poate fi null. Ca să arăți timpul de vizionare continuă al unui sezon, adună runtime din episodes și numără null ca 0. Adaugă append_ pe calea unui singur episod pentru un obiect credits și o listă stills. Array-ul cast al episodului este gol, iar persoanele se află în crew și guest_stars. Detaliile sunt la sezoane și episoade și credite.
Ordini alternative cu grupurile de episoade
Unele seriale se urmăresc într-o altă ordine decât cea în care au fost difuzate. GET / listează ordinile definite pentru un serial. Fiecare intrare are id, name, description, type, episode_count, group_count și network. Array-ul results este gol când nu s-a definit nicio ordine.
type | Ordine |
|---|---|
| 1 | Data difuzării originale |
| 2 | Absolută |
| 3 | DVD |
| 4 | Digitală |
| 5 | Arc narativ |
| 6 | Producție |
| 7 | TV |
amodb întoarce doar această listă. Nu oferă GET /, deci episoadele din interiorul unui grup nu sunt disponibile. Folosește endpoint-urile de sezon pentru datele episoadelor.
Cum se compară
| Capacitate | Extragi date din paginile de episoade | API de metadate cu nivel gratuit | amodb |
|---|---|---|---|
| Sezon complet | O descărcare de pagină pe sezon | Vezi documentația lor | Un apel, cu array-ul episodes inclus |
| Serial întreg | Parcurgi fiecare sezon | Vezi documentația lor | Un apel pe sezon, listate în seasons |
| Date de difuzare | Analizezi textul | Vezi documentația lor | air_date plus next_episode_to_air |
| Cadre | Descarci și redimensionezi | Vezi documentația lor | Dimensiuni fixe pe img.amodb.dev, fără cheie |
| Alte ordini de episoade | Indisponibil | Vezi documentația lor | Lista episode_groups, conținutul grupurilor nu este servit |
| Limbi | O singură limbă pe site | Vezi documentația lor | 14 limbi prin language |
Prețuri
Planurile sunt plătite în avans pentru 1, 3, 6, 12 sau 24 de luni, cu reduceri de 0, 10, 20, 30 sau 40 la sută pentru perioadele mai lungi, și nu se reînnoiesc singure. Planurile de 20, 40 și 120 de cereri pe minut întorc toate endpoint-urile de pe această pagină. Reîmprospătarea unui serial costă o cerere pentru detalii și una pe sezon. Nu există nivel gratuit. Alege un plan la prețuri.