Calendar Feeds: Where It All Started
Source: Dev.to
When I lived in Belfast, I had one problem: I wanted to know what was showing at the Strand Cinema without having to remember to check their website. I wanted to look at next Friday in my calendar and see if there was anything worth going to.
So I built a scraper, pulled the listings, transformed them into a structured format, and generated an ICS file. That was June 2023. That workflow—retrieve, transform, output—is still the foundation of everything Clusterflick does today.
Current Setup
I now have 14 cinema calendar feeds in my Google Calendar. When I want to see what’s on, I toggle a few of them on—e.g., the BFI, Castle Cinema, Genesis Cinema, and the Prince Charles Cinema for a weekend plan. When I book tickets, I simply copy that event over to my personal calendar.
Adding a feed is as easy as pasting a URL into Google Calendar. If you want to try it yourself, the 📅 data‑calendar repo contains instructions and feed URLs for every venue.
Event Details
Each calendar event includes:
- The venue name and location (so Google Maps knows where you’re going)
- A link back to the original listing page
- The movie title as the cinema lists it
- Any metadata we managed to extract: directors, actors, a plot summary
Below all of that, we include our match with The Movie Database (TMDB), giving you:
- The canonical title and year
- An overview
- A link back to TMDB for more information
The event title itself remains the cinema’s original listing.
Example: Prince Charles Cinema Schedule for Next Week 📆
The feed reflects the venue‑specific title. For instance, if the Prince Charles Cinema lists “Troll 2 (aka Best Worst Movie)” and we’ve matched it to Troll 2 in TMDB, the feed shows the original title while still providing the TMDB link.
Handling Runtime
Cinema listings usually provide a start time but rarely the film’s length, which is needed for calendar events.
- Early on, I defaulted everything to 90 minutes.
- If the listing includes a runtime, we use it.
- Since we match more than 96 % of films against TMDB, we can pull the actual runtime from there.
Thus, a 2 h 20 m film becomes a 2 h 20 m calendar event. It doesn’t account for the typical 20 minutes of trailers, but it’s close enough for planning an evening.
Architectural Benefits
Calendar feeds are generated directly after the transform step, bypassing the more complex logic required for the website:
-
Website must:
- Combine showings from multiple venues into canonical movies
- Cache TMDB lookups to avoid rate limits
- Fetch rich metadata (full cast, crew, posters, trailers)
- Generate static pages for every film
-
Calendar feeds skip all of that. They are simply: “here’s what this venue says is showing, in a format your calendar app understands.” The process is:
- Retrieve listings
- Transform into structured data
- Generate the ICS file
Why It Matters
This is still the simplest, most personally useful output of the whole project. Everything else—the website, the movie matching, the LLM‑assisted disambiguation—grew from this.
I just wanted to see what was on at the cinema without checking the website. Two years later, I still use these feeds every week. The rest of Clusterflick exists because this one thing was useful enough to keep building on.