Obține toate episoadele unui sezon

GET /3/tv/{tv_id}/season/{season_number} î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 /3/tv/{tv_id}/season/{season_number}Un sezon cu toate episodes
GET /3/tv/{tv_id}/season/{season_number}/episode/{episode_number}Un episod cu crew și guest_stars
GET /3/tv/{tv_id}/episode_groupsNumele, type și numărul de episoade ale fiecărei ordini alternative definite pentru serial

Câmpurile unui episod:

CâmpTipObservații
id, show_idnumăr întregID-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_numbernumăr întregPoziția în sezon
episode_typeșirDe exemplu standard
name, overviewșirLocalizate prin language
air_dateșir sau nullYYYY-MM-DD, gol sau null când nu este anunțat
runtimenumăr întreg sau nullMinute
still_pathșir sau nullSe adaugă la https://img.amodb.dev/t/p/{size}
vote_average, vote_countnumăr, număr întregMomentan 0 la episoade
production_codeșirCod de studio, adesea gol
crew, guest_starsarrayPersoanele creditate pe episod, cu aceleași câmpuri ca un membru al distribuției

Începe în 3 pași

  1. Alege un plan la prețuri. Toate planurile întorc aceleași date despre episoade, iar diferă doar ritmul cererilor.
  2. Creează o cheie în panoul contului tău și păstrează-o într-o variabilă de mediu.
  3. Cere /3/tv/{tv_id}/season/1 cu cheia într-un antet Bearer sau în api_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.

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

JSON
{
  "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ă.

JavaScript
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_to_response=credits,images 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 /3/tv/{tv_id}/episode_groups 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.

typeOrdine
1Data difuzării originale
2Absolută
3DVD
4Digitală
5Arc narativ
6Producție
7TV

amodb întoarce doar această listă. Nu oferă GET /3/tv/episode_group/{id}, deci episoadele din interiorul unui grup nu sunt disponibile. Folosește endpoint-urile de sezon pentru datele episoadelor.

Cum se compară

CapacitateExtragi date din paginile de episoadeAPI de metadate cu nivel gratuitamodb
Sezon completO descărcare de pagină pe sezonVezi documentația lorUn apel, cu array-ul episodes inclus
Serial întregParcurgi fiecare sezonVezi documentația lorUn apel pe sezon, listate în seasons
Date de difuzareAnalizezi textulVezi documentația lorair_date plus next_episode_to_air
CadreDescarci și redimensioneziVezi documentația lorDimensiuni fixe pe img.amodb.dev, fără cheie
Alte ordini de episoadeIndisponibilVezi documentația lorLista episode_groups, conținutul grupurilor nu este servit
LimbiO singură limbă pe siteVezi documentația lor14 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.