Calendar Feeds:一切的起点
Source: Dev.to
当我住在贝尔法斯特时,我有一个问题:我想知道 Strand 电影院正在上映什么,而不必记得去查看他们的网站。我想在日历里查看下周五,看看是否有值得去看的影片。
于是我写了一个爬虫,抓取上映列表,将其转换为结构化格式,并生成了一个 ICS 文件。那是 2023 年 6 月。这个工作流——获取、转换、输出——仍然是 Clusterflick 今天所有功能的基础。
当前设置
我现在在 Google 日历中拥有 14 个电影院的日历订阅。当我想查看上映情况时,只需打开其中几个——例如 BFI、Castle Cinema、Genesis Cinema 和 Prince Charles Cinema——来制定周末计划。买票时,我只需把相应的事件复制到我的个人日历中。
添加订阅非常简单,只需把 URL 粘贴到 Google 日历即可。如果你想自己尝试,📅 data‑calendar repo 中包含了每个场馆的说明和订阅链接。
事件详情
每个日历事件包括:
- 场馆名称和地点(让 Google Maps 知道你要去哪里)
- 指向原始列表页面的链接
- 电影标题(按照电影院的排片方式)
- 我们设法提取的任何元数据:导演、演员、剧情简介
在所有这些信息下面,我们会加入与 The Movie Database (TMDB) 的匹配,提供:
- 正式标题和年份
- 概要介绍
- 返回 TMDB 的链接以获取更多信息
事件标题本身保持电影院原始的排片标题。
示例:Prince Charles Cinema 下周排片 📆
订阅会反映场馆特有的标题。例如,Prince Charles Cinema 列出 “Troll 2 (aka Best Worst Movie)”,而我们在 TMDB 中匹配到 Troll 2,订阅中仍显示原始标题,同时提供 TMDB 链接。
处理时长
电影院的排片通常只提供开始时间,鲜少标明影片时长,而时长对于日历事件是必需的。
- 起初,我默认所有影片为 90 分钟。
- 如果列表中包含时长,则使用该时长。
- 由于我们对 96 % 以上的影片在 TMDB 中完成匹配,可以直接从 TMDB 拉取实际时长。
因此,一部 2 小时 20 分钟的影片会在日历中显示为 2 小时 20 分钟的事件。虽然没有考虑通常约 20 分钟的预告片时长,但已足够用于安排晚间观影。
架构优势
日历订阅在 转换 步骤之后直接生成,绕过了网站所需的更复杂逻辑:
-
网站 必须:
- 将多个场馆的放映合并为统一的电影条目
- 缓存 TMDB 查询以避免速率限制
- 获取丰富的元数据(完整演员表、剧组、海报、预告片)
- 为每部电影生成静态页面
-
日历订阅 直接跳过这些步骤。它们只是:“这是该场馆声明的上映内容,采用你的日历应用能识别的格式。” 过程如下:
- 获取列表
- 转换为结构化数据
- 生成 ICS 文件
为什么重要
这仍然是整个项目中最简单、最具个人价值的输出。其余的一切——网站、电影匹配、LLM 辅助的歧义消除——都是在此基础上发展而来的。
我最初只是想在不访问网站的情况下查看电影院的排片。两年后,我仍然每周使用这些订阅。其余的 Clusterflick 正是因为这件事足够有用而不断扩展的。