Атрыманне сеансаў фільма

GET /3/movie/{movie_id}/showtimes?country=US вяртае кінатэатры, якія паказваюць адзін фільм у адной краіне, кожны са спісам сеансаў. country гэта двухлітарны код. Без яго results застаецца пустым, і вы атрымліваеце толькі лічбы па краінах. Пакрыццё залежыць ад краіны і назвы, а пусты масіў results азначае, што для гэтай пары нічога невядома.

Вы атрымліваеце назву кінатэатра, сетку, адрас і гадзінны пояс, а для кожнага сеанса час пачатку, залу, фарматы, тэгі і спасылку на бранаванне, дзе яны вядомыя. Вяртаюцца толькі сеансы, пачынаючы з сённяшняга дня. Адказ апісвае сеансы. Гэта не сэрвіс продажу білетаў.

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

ЭндпоінтШто вяртае
GET /3/movie/{movie_id}/showtimesКінатэатры і сеансы аднаго фільма ў country або лічбы па краінах без яе
GET /3/movie/now_playingФільмы, што зараз у кінатэатрах, звужаныя па region
GET /3/movie/{movie_id} з append_to_response=showtimesДэталі плюс сеансы адным запытам, гл. сеансы

Палі ў адказе па сеансах:

ПолеТыпСэнс
idцэлы лікId фільма
countryрадок або nullДвухлітарны код, які вы запыталі, null, калі ніводзін не быў карэктным
resultsмасіўАдзін элемент на кінатэатр, пусты, калі нічога невядома або country адсутнічае
countriesмасіўЛічбы па краінах: country, name, venues, cities, showtimes, first_day, last_day
results[].id, name, city, addressцэлы лік, радкіId кінатэатра, назва, горад і вулічны адрас
results[].chainаб’ект або nullkey і name сеткі кінатэатраў
results[].timezoneрадок або nullПояс IANA кінатэатра, напрыклад Europe/Moscow
results[].latitude, longitudeлік або nullМесцазнаходжанне, калі вядома
results[].region, postal_code, phone, urlрадок або nullІншыя звесткі пра кінатэатр, часта null
results[].showtimesмасіўСеансы ў гэтым кінатэатры
showtimes[].dateрадокМясцовы дзень, напрыклад 2026-10-18
showtimes[].startрадокМясцовы час пачатку, напрыклад 2026-10-18T21:40, без зруху
showtimes[].auditoriumрадок або nullНазва або нумар залы
showtimes[].formatsмасіўФарматы сеанса, напрыклад 2D, IMAX або Dolby Atmos
showtimes[].tagsмасіўДадатковыя пазнакі, напрыклад Reserved Seating
showtimes[].booking_urlрадок або nullСпасылка на куплю білета, калі вядома
showtimes[].sold_outлагічнае значэннеtrue, калі крыніца пазначае сеанс як распрададзены
showtimes[].end, audio, subtitles, language, price, currency, pricesрозныя, часта nullЗапаўняюцца, толькі калі крыніца кінатэатра іх дае

Адказ змяшчае не болей за 1500 сеансаў, упарадкаваных па кінатэатры, потым па часе пачатку.

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

  1. Адкрыйце цэны і абярыце план. Сеансы ўваходзяць у кожны план.
  2. Стварыце ключ у асабістым кабінеце.
  3. Запытайце /3/movie/{movie_id}/showtimes з кодам country і перадайце ключ у api_key або ў загалоўку Bearer.

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

Прыклад на bash чытае сеансы Fight Club (id 550) у Расіі, дзе ў amodb сёння ёсць сеансы для яго. Прыклад на JS бярэ першыя пяць фільмаў са спісу now_playing для Расіі і друкуе да трох сеансаў на кінатэатр або заўвагу, калі нічога невядома.

bashjs
curl -s "https://api.amodb.dev/3/movie/550/showtimes?country=RU" \
  -H "Authorization: Bearer $AMODB_KEY"
const BASE = 'https://api.amodb.dev/3';
const headers = { Authorization: `Bearer ${process.env.AMODB_KEY}` };

async function get(path, params = {}) {
  const res = await fetch(`${BASE}${path}?${new URLSearchParams(params)}`, { headers });
  if (!res.ok) throw new Error(`amodb returned ${res.status} for ${path}`);
  return res.json();
}

const country = 'RU';
const playing = await get('/movie/now_playing', { region: country, page: 1 });

for (const movie of playing.results.slice(0, 5)) {
  const { results } = await get(`/movie/${movie.id}/showtimes`, { country });
  if (results.length === 0) {
    console.log(`${movie.title}: no showtimes known`);
    continue;
  }
  for (const cinema of results) {
    const times = cinema.showtimes
      .slice(0, 3)
      .map((s) => `${s.start.slice(5, 10)} ${s.start.slice(11, 16)} ${s.formats.join('/')}`)
      .join(', ');
    console.log(`${movie.title} at ${cinema.name}, ${cinema.city}: ${times}`);
  }
}

Скарочаны адказ для country=RU: першы кінатэатр з 2 сеансамі.

JSON
{
  "id": 550,
  "country": "RU",
  "results": [
    {
      "id": 1114,
      "name": "Мираж Синема НА БОЛЬШОМ",
      "chain": {
        "key": "mirage-ru",
        "name": "Мираж Синема"
      },
      "city": "Санкт-Петербург",
      "region": null,
      "address": "Большой пр. П.С., д. 35А",
      "postal_code": null,
      "country": "RU",
      "timezone": "Europe/Moscow",
      "latitude": null,
      "longitude": null,
      "phone": null,
      "url": "https://www.mirage.ru/spb/cinema/1/",
      "showtimes": [
        {
          "date": "2026-10-18",
          "start": "2026-10-18T21:40",
          "end": null,
          "auditorium": null,
          "formats": [
            "2D"
          ],
          "tags": [],
          "audio": null,
          "subtitles": null,
          "language": null,
          "price": null,
          "currency": null,
          "prices": null,
          "booking_url": "https://www.mirage.ru/ticket_new/aca7b114-d587-4fc5-9df6-28568e8fa9b3/",
          "sold_out": false
        },
        {
          "date": "2026-10-19",
          "start": "2026-10-19T22:20",
          "end": null,
          "auditorium": "Зал №4",
          "formats": [
            "2D"
          ],
          "tags": [],
          "audio": null,
          "subtitles": null,
          "language": null,
          "price": null,
          "currency": null,
          "prices": null,
          "booking_url": "https://www.mirage.ru/ticket_new/0c32e190-890a-4c81-a754-3300fefc4d5e/",
          "sold_out": false
        }
      ]
    }
  ],
  "countries": [
    {
      "country": "RU",
      "name": "Russia",
      "venues": 2,
      "cities": 1,
      "showtimes": 7,
      "first_day": "2026-10-18",
      "last_day": "2026-10-21"
    }
  ]
}

Пакрыццё і пустыя вынікі

Даныя пра кінатэатры даступныя не для кожнай краіны або назвы. Праектуйце інтэрфейс з гэтым улікам.

СітуацыяШто вы бачыцеШто рабіць
Сеансы вядомыяУ results адзін элемент на кінатэатрПаказаць спіс
Для гэтай краіны і назвы нічога невядомаresults пусты масіў, countries пералічвае, дзе даныя ёсцьПаказаць нейтральную заўвагу, а не пустую табліцу
country не адпраўленыresults пусты, country роўны null, у countries ёсць лічбыДайце карыстальніку выбраць з countries
Невядомы id фільма404 са status_code 34Праверыць id
Перавышаны ліміт429 са status_code 25Пачакаць Retry-After секунд

Пусты масіў не памылка і не сцвярджэнне, што фільма няма ў кінатэатрах. Ён азначае, што даных пра сеансы невядома. Поўны фармат цела гл. на старонцы памылкі.

Старонка афішы бягучых рэлізаў

Спалучыце два эндпоінты. Спіс паказвае, якія фільмы бягучыя, а сеансы запаўняюць расклад.

КрокЗапытЗаўвагі
1GET /3/movie/now_playing?region=US&page=1Да 20 фільмаў на старонку, кэш 30 хвілін
2GET /3/movie/{movie_id}/showtimes?country=USАдзін выклік на фільм, кэш 30 хвілін
3Фільтр у вашым кодзеПа city, formats або tags

Адна старонка з 20 фільмаў каштуе 21 запыт. Адказ для буйнога рэлізу можа важыць сотні кілабайт, бо змяшчае да 1500 сеансаў. На плане з 20 запытамі ў хвіліну гэта цэлая хвіліна бюджэту, таму загружайце ў фонавай задачы і аддавайце наведвальнікам захаваную копію. Планы на 40 і 120 запытаў у хвіліну спраўляюцца з той жа задачай з запасам. Акно і загалоўкі гл. на старонцы ліміты запытаў, а іншыя эндпоінты спісаў на старонцы трэнды і спісы.

Як трымаць копію свежай

Сеансы мяняюцца па днях, у адрозненне ад дэталяў фільма. Захоўвайце кожны адказ з id фільма, краінай і часам атрымання. TTL ад 30 хвілін да некалькіх гадзін падыходзіць для большасці старонак афішы, а сеансы, што ўжо пачаліся, можна схаваць, параўноўваючы start з бягучым часам у timezone кінатэатра. Паколькі ў start няма зруху, не пераносьце яго ў гадзінны пояс наведвальніка.

Параўнанне

МагчымасцьСкрэйпінг сайтаў кінатэатраўAPI метаданых без сеансаўamodb
НаладкаАдзін скрэйпер на сайт кінатэатраНедаступнаАдзін эндпоінт, адна форма JSON
Прывязка да id фільмаСупастаўленне па тэксце назвыНедаступнаId фільма ў шляху
ПакрыццёТое, што ўдаецца спампавацьНямаЗалежыць ад краіны і назвы, пусты масіў, калі невядома
Фарматы і бранаваннеРазбор подпісаў і спасылакНедаступнаПалі formats, tags і booking_url
ПадтрымкаЛамаецца, калі сайт змяняеццаНямаАдна форма JSON для кожнай краіны

Цэны

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