Skip to content

Latest commit

 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CineScan

A tiny static site showing what's currently playing at every Cineplex theatre in Canada — every movie, every format (Regular, IMAX, UltraAVX, ScreenX, 4DX, VIP, and their modifiers like 3D, D-BOX, Laser Projection, Dolby Atmos) — filterable and visually distinguishable by format.

Live at: https://ariesyous.github.io/cinescan/

How it works

  • data/theatres.json is a checked-in manifest of all ~152 Cineplex theatres across Canada (Cineplex theatreId, a slug, display name, city, province, and its output data file). It's generated by scripts/fetch-theatres.mjs, not hand-edited — re-run that script when a theatre opens/closes.

  • scripts/scrape.mjs queries Cineplex's (undocumented) theatrical API for every theatre in data/theatres.json and keeps every movie/format. To keep the daily request volume sane across 152 theatres, it probes in two phases:

    • Near window (~14 days, every theatre): matches Cineplex's normal contiguous published window, all formats kept.
    • Deep window (out to 6 months ahead): only for theatres that turned out to have an IMAX screen in the near window, and only keeps IMAX sessions from that far out — this is what catches tentpole IMAX advance ticket sales without probing everywhere for everything. Every other format (ScreenX, 4DX, UltraAVX, VIP, etc.) is only probed within the near window.

    Each theatre's results are written to its own file under data/ (e.g. data/cineplex-cinemas-vaughan.json); a theatre that fails entirely for a run is skipped, leaving its last known-good file untouched, without blocking the others.

  • .github/workflows/scrape.yml runs the scraper via GitHub Actions and commits the data/*.json files when they change. The near window runs 12 times a day (roughly 8am, 1-10pm, and 1am ET, "quick" mode); the deep window only runs once a week (Thursday 1pm ET, "deep" mode, riding along with that slot's near-window run), since IMAX advance-sale dates don't change often enough to justify probing them on every run. A quick run carries forward the previous deep run's far-future days untouched rather than dropping them. It can also be triggered manually (workflow_dispatch, with a mode input) from the Actions tab or via gh workflow run scrape.yml.

  • index.html / style.css / app.js are a plain static page (no build step) that fetches data/theatres.json to build a drill-down region picker — a handful of big buttons for GTA/Montreal/Vancouver/Everywhere Else, then cities (or provinces, under Everywhere Else), then a persistent list of that area's theatres so you can switch between them without re-navigating — plus a breadcrumb to jump back up, and a search box as a quick alternate way to jump straight to a theatre (Scotiabank Theatre Toronto shown by default). It then fetches the selected theatre's data file and renders it as a responsive calendar. Every session shows color-coded badges for its raw Cineplex format tags, and a filter bar above the calendar lets visitors toggle formats on/off. Past days and past showtimes drop off automatically since the scraper's window always starts at "today."

  • GitHub Pages deploys straight from the master branch root, so a push (including the scraper's own automated commits) redeploys the live site.

Since the Cineplex API is unofficial and reverse-engineered, it may change or break without notice — the scraper is written to skip bad/missing days rather than overwrite good data with empty results, and to leave a theatre's data file untouched entirely if every request for it fails.

License

MIT — see LICENSE.

About

Easily see what's on at Cineplex

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages