资讯详情

终端里的月亮8相位:weathr如何调用美国海军天文台API获取真实月相数据

📅 2026/9/29 10:09:01 | 华诺云谱 👁 阅读
终端里的月亮8相位:weathr如何调用美国海军天文台API获取真实月相数据
终端里的月亮8相位weathr如何调用美国海军天文台API获取真实月相数据【免费下载链接】weathra terminal weather app with ascii animation项目地址: https://gitcode.com/gh_mirrors/wea/weathr终端天气应用 weathr 不只是画雨和雪——它还能在夜空里画出与真实世界同步的月亮。weathr 通过调用美国海军天文台USNOAstronomical Applications Department 的月相 API获取当天真实月相数据再映射到 8 帧 ASCII 月亮动画上让你在终端里看到今晚月亮的真身 谁是美国海军天文台 APIweathr 的主天气数据来自 Open-Meteo但天文数据日月升落、月相需要外援。项目为此设计了补充数据源Supplementary Provider架构主天气源负责温度、风、降水等数据当主源缺少天文数据时例如英国 Met Office 不返回日月信息就交给AADProvider去美国海军天文台补取整个机制记录在 PROVIDERS.md 的 Supplementary Providers 一节中架构定义位于 supplementary/mod.rs这类 provider 用于在小范围内补充其他 provider 缺失的数据——例如 MetOffice 不提供任何天文数据它需要另外发起请求来获取。API 的基地址是https://aa.usno.navy.mil/api/这是美国政府的天文数据服务无需 API Key、直接可用。月相请求是如何构造的核心实现在 aad.rs。当请求类型为PhasesOfMoon时程序拼接出这样的 URLhttps://aa.usno.navy.mil/api/moon/phases/date?date2026-09-29nump1参数含义很简单参数作用date今天的日期%Y-%m-%d格式nump1只取 1 条月相记录即当天请求是异步发出的30 秒超时返回 JSON 中的phasedata字段会被反序列化为MoonPhase结构程序取第一条记录的phase字符串——比如Full Moon或Waxing Gibbous。7 个英文月相名 → 一个数字API 返回的是文字月相名而渲染引擎只认数字。aad.rs 中的convert_string_to_moon_phase把月相名映射到 0~1 区间API 返回的月相名数值含义New Moon0.0新月看不见Waxing Crescent0.15娥眉月First Quarter0.25上弦月Waxing Gibbous0.35盈凸月Full Moon0.5满月Waning Gibbous0.65亏凸月Last Quarter0.75下弦月Waning Crescent0.85残月 顺带一提Met Office 场景走的是另一个接口rstt/oneday见 met_office.rs它在一次请求里同时拿到当日日出日落、晨昏蒙影时间 当前月相一举两得。数字变画8 帧 ASCII 月亮的渲染月相数值到了动画层就变成 8 帧 ASCII 画稿之一。moon.rs 在编译期把 8 个文件全部内嵌进二进制assets/moon/phase_0.txt … phase_7.txt选帧公式只有一行moon.rsstep (phase × 8).round() % 8以满月0.5为例0.5 × 8 4正好选中第 4 帧——一个用~和o字符填满的圆月亮见 phase_4.txt而新月0.0选中 phase_0那是一帧几乎全空的画稿月亮消失了只留下夜空 渲染时还有个小巧思~字符位置会被渲染成空格让月亮的实体遮住背后的星星营造真实的遮挡感。月亮只在夜里出现数据链路完整走一遍是这样的天气请求返回后moon_phase随响应一起送达app.rs 调用self.animations.update_moon_phase(moon_phase)把数值广播给所有动画系统MoonSystem在 animation_manager.rs 的on_moon_phase回调里存下相位渲染前检查is_active只有当sun.is_day false天黑了时月亮才登场也就是说weathr 的昼夜循环、日出日落时刻都来自同一个 USNO 接口——月相和昼夜判断数据同源所以不会出现白天挂着月亮的穿帮。如何亲自体验真实月相安装后直接运行即可夜间或--night模拟夜间就能看到与今晚真实月相一致的 ASCII 月亮# 安装 cargo install weathr # 模拟夜间天气观察月亮 weathr --simulate clear --night如果本地是白天用--night强制切换到夜间模式配合q键退出。想深入了解数据源细节可阅读 aad.rs 与 moon.rs 两个文件——从 HTTP 请求到终端像素整条链路不到 400 行代码非常值得一读 【免费下载链接】weathra terminal weather app with ascii animation项目地址: https://gitcode.com/gh_mirrors/wea/weathr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑