FediMeteo, timezones, and the art of not breaking what already works
2 days ago
- FediMeteo起初是一个针对意大利城市的简单Python脚本,使用Nominatim获取坐标、Open-Meteo获取天气数据,并通过snac发布信息。
- 通过将本地化内容分离到JSON文件并为每个国家设置cron调度,它扩展到多个欧洲国家。
- 添加德国后发现名称歧义问题(例如,多个Neustadt、法兰克福美因河畔与奥得河畔法)。导致需要手动解决。
- 美国带来了重大挑战:超过1200个城市、六个时区以及广泛的名称重复(例如Springfields、Portlands)。
- 机器人被重写以支持州后缀、自动时区检测、多个天气提供者及回退机制、可配置单位以及严格的向后兼容性。
- 一个调试打印意外将Open-Meteo API密钥泄露到帖子中;该事件促使实施多层机密信息编辑。
- 引入了坐标缓存以减少Nominatim负载并允许手动修正(例如,将费拉拉的坐标从省中心校正为市中心)。
- 由于城市间休眠导致的慢速循环和基于cron的调度导致重启后丢失更新;为了实现鲁棒性,采用带有状态文件恢复的守护进程。
- 设计理念强调Unix式简洁、隐藏复杂性以及在不破坏现有功能前提下的运维韧性。