Ottenere le proiezioni di un film
GET / restituisce i cinema che proiettano un film in un paese, ciascuno con un elenco di proiezioni. country è un codice di 2 lettere. Senza di esso results resta vuoto e ottieni solo i conteggi per paese. La copertura varia per paese e titolo, e un array results vuoto significa che per quella coppia non si sa nulla.
Ottieni nome del cinema, catena, indirizzo e fuso orario, e per ogni proiezione l'orario di inizio, la sala, i formati, le etichette e un link di prenotazione, quando noti. Vengono restituite solo le proiezioni da oggi in poi. La risposta descrive proiezioni. Non è un servizio di biglietteria.
Quali dati ottieni
| Endpoint | Restituisce |
|---|---|
GET / | Cinema e proiezioni di un film in country, oppure i conteggi per paese senza di esso |
GET / | I film attualmente al cinema, ristretti da region |
GET / con append_ | Dettagli e proiezioni in una sola richiesta, vedi orari delle proiezioni |
Campi della risposta delle proiezioni:
| Campo | Tipo | Significato |
|---|---|---|
id | intero | ID del film |
country | stringa o null | Il codice di 2 lettere richiesto, null se nessuno era valido |
results | array | Un elemento per cinema, vuoto quando non si sa nulla o manca country |
countries | array | Conteggi per paese: country, name, venues, cities, showtimes, first_day, last_day |
results[].id, name, city, address | intero, stringhe | ID, nome, città e indirizzo del cinema |
results[].chain | oggetto o null | key e name della catena di cinema |
results[].timezone | stringa o null | Fuso IANA del cinema, per esempio Europe/Moscow |
results[].latitude, longitude | numero o null | Posizione, quando nota |
results[].region, postal_code, phone, url | stringa o null | Altri dettagli del cinema, spesso null |
results[].showtimes | array | Proiezioni in quel cinema |
showtimes[].date | stringa | Giorno locale come 2026-10-18 |
showtimes[].start | stringa | Orario di inizio locale come 2026-10-18T21:40, senza scarto |
showtimes[].auditorium | stringa o null | Nome o numero della sala |
showtimes[].formats | array | Formati di proiezione, per esempio 2D, IMAX o Dolby Atmos |
showtimes[].tags | array | Etichette extra come Reserved Seating |
showtimes[].booking_ | stringa o null | Link per acquistare un biglietto, quando noto |
showtimes[].sold_out | booleano | true quando la fonte segna la proiezione come esaurita |
showtimes[].end, audio, subtitles, language, price, currency, prices | vari, spesso null | Compilati solo quando la fonte del cinema li fornisce |
Una risposta contiene al massimo 1.500 proiezioni, ordinate per cinema e poi per orario di inizio.
Parti in 3 passaggi
- Apri la pagina dei prezzi e scegli un piano. Gli orari delle proiezioni sono inclusi in ogni piano.
- Crea una chiave nella dashboard del tuo account.
- Richiedi
/con un codice3/ movie/ {movie_ id}/ showtimes country, e passa la chiave inapi_keyo come header Bearer.
Esempio di richiesta
L'esempio in bash legge le proiezioni di Fight Club (id 550) in Russia, dove amodb ha oggi delle proiezioni. L'esempio in JS prende i primi cinque film della lista now_playing russa e stampa fino a tre proiezioni per cinema, o una nota quando non se ne conosce nessuna.
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}`);
}
}Risposta ridotta per country=RU: il primo cinema con 2 delle sue proiezioni.
{
"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"
}
]
}Copertura e risultati vuoti
I dati dei cinema non sono disponibili per ogni paese né per ogni titolo. Progetta la tua interfaccia tenendone conto.
| Situazione | Cosa vedi | Cosa fare |
|---|---|---|
| Proiezioni note | results ha un elemento per cinema | Mostra l'elenco |
| Nulla di noto per questo paese e titolo | results è un array vuoto, countries elenca dove esistono dati | Mostra una nota neutra, non una tabella vuota |
Nessun country inviato | results è vuoto, country è null, countries ha i conteggi | Lascia scegliere all'utente da countries |
| ID del film sconosciuto | 404 con status_code 34 | Controlla l'ID |
| Limite superato | 429 con status_code 25 | Attendi i secondi di Retry-After |
Un array vuoto non è un errore e non afferma che il film manchi dai cinema. Significa che non si conoscono dati sulle proiezioni. Vedi errori per il formato completo del corpo.
Costruire una pagina di programmazione per le uscite attuali
Combina due endpoint. La lista dice quali film sono in sala, e gli orari riempiono le proiezioni.
| Passaggio | Richiesta | Note |
|---|---|---|
| 1 | GET / | Fino a 20 film per pagina, in cache 30 minuti |
| 2 | GET / | Una chiamata per film, in cache 30 minuti |
| 3 | Filtra nel tuo codice | Per city, formats o tags |
Una pagina di 20 film costa 21 richieste. La risposta per una grande uscita può pesare diverse centinaia di kilobyte, perché contiene fino a 1.500 proiezioni. Con il piano da 20 richieste al minuto è un intero minuto di budget, quindi recupera i dati in un job in background e servi i visitatori dalla tua copia salvata. I piani da 40 e 120 richieste al minuto reggono lo stesso job con margine. Vedi limiti di richieste per la finestra e gli header, e tendenze e liste per gli altri endpoint di liste.
Mantenere aggiornata la tua copia
Gli orari cambiano di giorno in giorno, a differenza dei dettagli di un film. Salva ogni risposta con l'ID del film, il paese e l'ora del recupero. Un TTL da 30 minuti fino a qualche ora va bene per la maggior parte delle pagine di programmazione, e le proiezioni già iniziate si possono nascondere confrontando start con l'ora attuale nel timezone del cinema. Poiché start non ha scarto, non spostarlo nel fuso orario del visitatore.
Confronto
| Funzionalità | Fare scraping dei siti dei cinema | API di metadati senza orari | amodb |
|---|---|---|---|
| Configurazione | Uno scraper per ogni sito di cinema | Non disponibile | Un endpoint, una sola struttura JSON |
| Collegamento a un ID di film | Abbinare dal testo del titolo | Non disponibile | ID del film nel percorso |
| Copertura | Quello che riesci a estrarre | Nessuna | Varia per paese e titolo, array vuoto quando non noto |
| Formati e prenotazione | Analizzare etichette e link | Non disponibile | Campi formats, tags e booking_url |
| Manutenzione | Si rompe quando un sito cambia | Nessuna | Una sola struttura JSON per ogni paese |
Prezzi
I piani prepagati durano 1, 3, 6, 12 o 24 mesi, con uno sconto di 0, 10, 20, 30 o 40 per cento per quelli più lunghi. Nulla si rinnova automaticamente. I piani consentono 20, 40 e 120 richieste al minuto e ognuno include gli orari delle proiezioni insieme a tutti gli altri dati. Una pagina di programmazione aggiornata ogni 30 minuti per pochi paesi sta nella frequenza più bassa. Non esiste un piano gratuito. Scegli un piano nella pagina dei prezzi.