Un API de seriale TV cu stare, sezoane și următorul episod

GET /3/tv/{series_id} întoarce un serial cu status, networks, lista seasons, last_episode_to_air și next_episode_to_air. Endpoint-urile de sezon și de episod adaugă date de difuzare, durate și cadre. amodb este un API independent care vorbește protocolul TMDB v3, deci un client scris pentru TMDB funcționează după ce schimbi URL-ul de bază în https://api.amodb.dev/3.

Ce primești:

  • Înregistrări de seriale cu numărul de sezoane și de episoade, plus prima și ultima dată de difuzare.
  • Un șir status și un indicator in_production.
  • Rețele cu ID-uri, logo-uri și țara de origine.
  • Un apel pe sezon, care întoarce toate episoadele sezonului.
  • Liste de seriale care se difuzează azi sau în următoarele 7 zile.

Ce date primești

Ai nevoie deApelCâmpuri cheie
Fișa serialuluiGET /3/tv/{series_id}name, original_name, status, in_production, number_of_seasons, number_of_episodes
Următorul și ultimul episodacelași apelnext_episode_to_air, last_episode_to_air
Un sezonGET /3/tv/{series_id}/season/{season_number}episodes, air_date, poster_path
Un episodGET /3/tv/{series_id}/season/{season_number}/episode/{episode_number}name, overview, runtime, still_path, air_date
O rețeaGET /3/network/{network_id}name, headquarters, origin_country

Listele complete de câmpuri sunt la seriale TV și sezoane și episoade.

Începe în 3 pași

  1. Deschide prețuri și alege planul cu ritmul de cereri de care ai nevoie: 20, 40 sau 120 pe minut.
  2. Creează o cheie API în panoul contului tău.
  3. Trimite GET /3/tv/{series_id} cu Authorization: Bearer YOUR_API_KEY sau adaugă api_key ca parametru de interogare.

Exemplu de cerere

Scriptul citește Breaking Bad (ID de serial 1396), afișează starea și următorul episod, apoi listează sezonul 1. Salvează-l ca check.mjs și rulează-l cu Node 18 sau mai nou.

bashjs
curl -s "https://api.amodb.dev/3/tv/1396?language=en-US&append_to_response=ratings" \
  -H "Authorization: Bearer $AMODB_KEY"

curl -s "https://api.amodb.dev/3/tv/1396/season/1?language=en-US" \
  -H "Authorization: Bearer $AMODB_KEY"
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?language=en-US');
const next = show.next_episode_to_air;
console.log(`${show.name}: ${show.status}, ${show.number_of_seasons} seasons`);
console.log(next
  ? `Next: S${next.season_number}E${next.episode_number} on ${next.air_date}`
  : 'No upcoming episode is scheduled');

const season = await get('/tv/1396/season/1?language=en-US');
for (const ep of season.episodes) {
  console.log(`E${ep.episode_number} ${ep.air_date} ${ep.name}`);
}

Un răspuns de serial scurtat pentru language=en-US. Sunt păstrate doar unele câmpuri, iar seasons arată primele 2 din cele 6 intrări. Unele nume nu urmează language în aceste date: numele sezonului 0 este în chineză, iar name din last_episode_to_air este în ebraică.

JSON
{
  "first_air_date": "2008-01-20",
  "id": 1396,
  "in_production": false,
  "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,
  "number_of_episodes": 62,
  "number_of_seasons": 5,
  "original_name": "Breaking Bad",
  "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 diagn...",
      "poster_path": "/91EIXdWxmp2mHNRsSuDW3WyDJLj.jpg",
      "season_number": 1,
      "vote_average": 0
    }
  ],
  "status": "Ended"
}

Citirea stării și a următorului episod

Șirul status îți spune cum să etichetezi un serial. next_episode_to_air este un obiect doar cât timp un episod este programat, deci este null între sezoane, ca și după final. Testează status înainte să afișezi „încheiat”.

statusSemnificațieCe afișezi
Returning SeriesSe așteaptă mai multe episoadeData următoarei difuzări dacă obiectul există, altfel „revine”
In ProductionSe produce, încă nu e în difuzare„În producție”
PlannedDoar anunțat„Planificat”
PilotExistă doar un pilot„Pilot”
EndedDifuzarea s-a încheiat„Încheiat” și last_air_date
CanceledOprit înainte de finalul planificat„Anulat”

Câmpurile din next_episode_to_air și last_episode_to_air: air_date, season_number, episode_number, episode_type, id, show_id, name, overview, runtime și still_path. Șirul status poate fi gol la câteva titluri, așa că ține pregătită o etichetă neutră.

Detaliile sunt ținute în cache la margine 6 ore, deci cererea aceluiași serial de mai mult de patru ori pe zi întoarce același corp. Interoghează serialele urmărite o dată sau de două ori pe zi și reîmprospătează-l pe cel pe care îl deschide un utilizator.

Sezoane, episoade și ce se difuzează

Sezonul 0, când un serial are unul, conține episoadele speciale. Sezoanele obișnuite încep de la 1.

ApelÎntoarceParametri
GET /3/tv/{series_id}/season/{season_number}Fișa sezonului cu un array episodeslanguage, append_to_response
GET /3/tv/airing_todaySeriale cu un episod difuzat azipage, language
GET /3/tv/on_the_airSeriale difuzate în săptămâna următoarepage, language
GET /3/discover/tvSeriale filtrate după rețea, stare și altelewith_networks, with_status, sort_by, page

Rezultatele listelor și ale discover sunt ținute în cache 30 de minute, deci o cerere la jumătate de oră ajunge pentru o insignă „difuzare în curând”. Potrivește ID-urile întoarse cu serialele urmărite de utilizatori. Detaliile de sezon și de episod sunt tratate pe pagina ghid de episoade.

Construirea unei liste de urmărire cu numărătoare inversă

Un ecran „serialele pe care le urmăresc” cere un ID stocat pentru fiecare serial și un mic job zilnic.

  1. Salvează id din fișa serialului când un utilizator începe să urmărească un serial.
  2. O dată pe zi, apelează /3/tv/{series_id} pentru fiecare ID urmărit și stochează status, next_episode_to_air și last_air_date.
  3. Când next_episode_to_air este un obiect, afișează air_date ca dată. Nu are oră și nici fus orar, așa că nu număra invers până la minut.
  4. Când este null, iar status este Returning Series, afișează „sezon nou neprogramat”.
  5. Preia apelul de sezon doar când un utilizator deschide serialul, pentru că este cel mai mare răspuns.

Un 404 cu status_code 34 înseamnă că ID-ul este necunoscut, iar un 429 înseamnă că ai depășit cererile pe minut: așteaptă numărul de secunde din Retry-After. Cu 200 de seriale urmărite, o trecere zilnică înseamnă 200 de cereri, cam zece minute la 20 de cereri pe minut. Vezi limite de cereri și erori.

Cum se compară

CapacitateExtragi singur paginileAPI de metadate cu nivel gratuitamodb
Structura sezoanelor și episoadelorReconstruită din machetele paginilorVariază, verifică documentațiaApel de sezon cu un array episodes
Data următoarei difuzăriExtrasă dintr-o pagină de programVariază, verifică documentațianext_episode_to_air, null când nu e programat nimic
Starea serialuluiText liber pe o paginăVariază, verifică documentațiaȘirul status și indicatorul in_production
Difuzate săptămâna aceastaExtragi un programVariază, verifică documentația/3/tv/on_the_air și /3/tv/airing_today
LimbiCe oferă paginaVariază14, alese cu language
Condiții de accesSe aplică termenii site-uluiNivel gratuit cu condiții de utilizareCu plată, plătit în avans, fără nivel gratuit

Prețuri

Plătești o singură dată pentru 1, 3, 6, 12 sau 24 de luni. Perioadele mai lungi au reduceri de 10, 20, 30 sau 40 la sută, iar nimic nu se reînnoiește automat. Fiecare plan primește toate datele despre seriale TV, cu 20, 40 sau 120 de cereri pe minut ca unică diferență. Vezi prețuri, creează o cheie, iar primul tău apel de serial costă o cerere.