API серыялаў са статусам, сезонамі і наступным эпізодам

GET /3/tv/{series_id} вяртае серыял са status, networks, спісам seasons, last_episode_to_air і next_episode_to_air. Эндпоінты сезонаў і эпізодаў дадаюць даты эфіру, працягласць і кадры. amodb гэта незалежнае API, якое працуе па пратаколе TMDB v3, таму кліент, напісаны для TMDB, працуе пасля змены базавага URL на https://api.amodb.dev/3.

Што вы атрымліваеце:

  • Запісы серыялаў з колькасцю сезонаў і эпізодаў, а таксама датамі першага і апошняга эфіру.
  • Радок status і прыкмету in_production.
  • Тэлеканалы з id, лагатыпамі і краінай паходжання.
  • Адзін выклік на сезон, які вяртае кожны эпізод гэтага сезона.
  • Спісы серыялаў, што выходзяць у эфір сёння або на працягу наступных 7 дзён.

Якія даныя вы атрымліваеце

Што трэбаВыклікКлючавыя палі
Запіс серыялаGET /3/tv/{series_id}name, original_name, status, in_production, number_of_seasons, number_of_episodes
Наступны і апошні эпізодтой жа выклікnext_episode_to_air, last_episode_to_air
Адзін сезонGET /3/tv/{series_id}/season/{season_number}episodes, air_date, poster_path
Адзін эпізодGET /3/tv/{series_id}/season/{season_number}/episode/{episode_number}name, overview, runtime, still_path, air_date
ТэлеканалGET /3/network/{network_id}name, headquarters, origin_country

Поўныя спісы палёў ёсць на старонках серыялы і сезоны і эпізоды.

Пачніце за 3 крокі

  1. Адкрыйце цэны і абярыце план з патрэбнай частатой запытаў: 20, 40 або 120 у хвіліну.
  2. Стварыце ключ API у асабістым кабінеце.
  3. Адпраўце GET /3/tv/{series_id} з Authorization: Bearer YOUR_API_KEY або дадайце api_key як параметр запыту.

Прыклад запыту

Скрыпт чытае Breaking Bad (id серыяла 1396), друкуе яго статус і наступны эпізод, потым пералічвае сезон 1. Захавайце яго як check.mjs і запусціце з Node 18 або новей.

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}`);
}

Скарочаны адказ па серыяле для language=en-US. Пакінуты толькі некаторыя палі, а seasons паказвае першыя 2 з 6 запісаў. Некаторыя назвы ў гэтых даных не выконваюць language: назва сезона 0 па-кітайску, а name унутры last_episode_to_air па-іўрыце.

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"
}

Як чытаць статус і наступны эпізод

Радок status падказвае, як пазначыць серыял. next_episode_to_air ёсць аб’ектам, толькі пакуль эпізод запланаваны, таму паміж сезонамі ён роўны null, як і пасля завяршэння. Правярайце status, перш чым паказваць «завершаны».

statusСэнсШто паказваць
Returning SeriesЧакаюцца новыя эпізодыДату наступнага эфіру, калі аб’ект ёсць, інакш «працягваецца»
In ProductionЗдымаецца, у эфіры яшчэ не выходзіць«У вытворчасці»
PlannedТолькі анансаваны«Запланаваны»
PilotІснуе толькі пілот«Пілот»
EndedПаказ скончаны«Завершаны» і last_air_date
CanceledСпынены да запланаванага канца«Закрыты»

Палі ўнутры next_episode_to_air і last_episode_to_air: air_date, season_number, episode_number, episode_type, id, show_id, name, overview, runtime і still_path. Радок status таксама можа быць пустым у некалькіх назваў, таму трымайце напагатове нейтральны подпіс.

Дэталі кэшуюцца на edge на 6 гадзін, таму запыт таго ж серыяла больш за чатыры разы на дзень вяртае тое ж цела. Апытвайце серыялы, якія адсочваюць, раз-два на дзень і абнаўляйце той, што адкрывае карыстальнік.

Сезоны, эпізоды і тое, што ў эфіры

Сезон 0, калі ён ёсць, змяшчае спецвыпускі. Звычайныя сезоны пачынаюцца з 1.

ВыклікШто вяртаеПараметры
GET /3/tv/{series_id}/season/{season_number}Запіс сезона з масівам episodeslanguage, append_to_response
GET /3/tv/airing_todayСерыялы з эпізодам у эфіры сённяpage, language
GET /3/tv/on_the_airСерыялы, што выходзяць у эфір на гэтым тыдніpage, language
GET /3/discover/tvСерыялы, адфільтраваныя па тэлеканале, статусе і іншымwith_networks, with_status, sort_by, page

Спісы і вынікі discover кэшуюцца на 30 хвілін, таму аднаго запыту раз у паўгадзіны хопіць для значка «хутка ў эфіры». Супастаўляйце вернутыя id з серыяламі, якія адсочваюць вашы карыстальнікі. Дэталі сезонаў і эпізодаў апісаны на старонцы даведнік па эпізодах.

Спіс адсочвання з зваротным адлікам

Экрану «серыялы, якія я адсочваю» патрэбны адзін захаваны id на серыял і невялікая штодзённая задача.

  1. Захавайце id серыяла, калі карыстальнік пачынае яго адсочваць.
  2. Раз на дзень выклікайце /3/tv/{series_id} для кожнага адсочвальнага id і захоўвайце status, next_episode_to_air і last_air_date.
  3. Калі next_episode_to_air ёсць аб’ектам, паказвайце air_date як дату. Яна не нясе часу сутак і гадзіннага пояса, таму не лічыце адлік да хвіліны.
  4. Калі ён роўны null, а status Returning Series, паказвайце «новы сезон не запланаваны».
  5. Выклікайце сезон, толькі калі карыстальнік адкрывае серыял, бо гэта самы вялікі адказ.

404 са status_code 34 азначае, што id невядомы, а 429 азначае, што вы перавысілі запыты ў хвіліну: пачакайце Retry-After секунд. Пры 200 адсочваных серыялах адзін штодзённы праход гэта 200 запытаў, каля дзесяці хвілін пры 20 запытах у хвіліну. Гл. ліміты запытаў і памылкі.

Параўнанне

МагчымасцьСкрэйпінг старонак самастойнаAPI метаданых з бясплатным тарыфамamodb
Структура сезонаў і эпізодаўАднаўляецца з макетаў старонакПа-рознаму, глядзіце дакументацыюВыклік сезона з масівам episodes
Дата наступнага эфіруРазбіраецца са старонкі раскладуПа-рознаму, глядзіце дакументацыюnext_episode_to_air, null, калі нічога не запланавана
Статус серыялаВольны тэкст на старонцыПа-рознаму, глядзіце дакументацыюРадок status і прыкмета in_production
Што ў эфіры на тыдніСкрэйпінг раскладуПа-рознаму, глядзіце дакументацыю/3/tv/on_the_air і /3/tv/airing_today
МовыТое, што прапануе старонкаПа-рознаму14, выбіраюцца праз language
Умовы доступуДзейнічаюць умовы сайтаБясплатны тарыф з умовамі выкарыстанняПлатна, наперад, без бясплатнага тарыфа

Цэны

Плаціце адзін раз за 1, 3, 6, 12 або 24 месяцы. Доўгія перыяды даюць зніжку 10, 20, 30 або 40 працэнтаў, і нічога не прадаўжаецца аўтаматычна. Кожны план дае ўсе даныя пра серыялы, і адзіная розніца 20, 40 або 120 запытаў у хвіліну. Гл. цэны, стварыце ключ, і ваш першы выклік серыяла каштуе адзін запыт.