手把手教你:用苹果开发者账号免费调用天气接口(羊毛党必看)

大家好,我是你们的羊毛猎手。

做开发的朋友都知道,很多项目都想加个天气显示功能,但稍微好用点的天气 API 基本都要收费,或者免费版限制特别多,比如每天只调几百次,还得发邮件申请 Key,流程繁琐得要命。

今天给大伙安利一个 "藏得挺深" 的羊毛——如果你手头正好有一个苹果开发者账号(哪怕是个人账号),你其实已经拥有了调用官方天气接口的免费额度!

苹果 WeatherKit 接口返回的天气数据界面示意图

图1:WeatherKit 提供的天气数据可视化示例

废话不多说,直接上干货。

为什么选苹果的天气接口?

市面上的天气服务商也不少,比如和风天气、OpenWeatherMap 等。相比之下,苹果官方提供的 WeatherKit 有几个天然优势:

  1. 稳定性:毕竟是大厂的基建,不用担心哪天突然挂了或者跑路。
  2. 数据准:苹果整合了多家高质量数据源,准确度没得说。
  3. 不要钱(在一定额度内):这对我们这种个人开发者或者折腾党来说,最实在。

准备工作:你需要什么?

在开始之前,请确保你手头有:

  1. 一个有效的 Apple Developer Program 会员资格(99美元/年的那个)。
  2. 一台可以访问 App Store Connect 的电脑

如果没有开发者账号,下面的内容可能就只能看看热闹了,毕竟这是苹果给付费会员的专属权益。

具体配置步骤(保姆级教程)

第一步:创建 Service ID

要调用接口,你不能直接用普通的 Bundle ID,需要创建一个专门的 Service ID。

  1. 登录 App Store Connect
  2. 在左侧菜单找到 "用户与访问" 或者直接搜索 "Certificates, Identifiers & Profiles"。
  3. 进入 "Identifiers",点击右上角的 "+" 号。
  4. 选择 "Services IDs" 类型,点击 Continue。
  5. 填写 Description(描述,随便填)和 Bundle ID(建议用反向域名格式,比如 com.example.weather),注册成功。

第二步:关联天气服务权限

这是关键一步,很多教程漏了这一步导致调不通。

  1. 在刚才创建的 Service ID 列表中,点击你的 ID 进入详情页。
  2. 找到 "Capabilities" 配置区域。
  3. 勾选 WeatherKit
  4. 点击保存。

JWT Token 组成结构和签名生成逻辑图

图2:JWT Token 结构及 ES256 签名生成原理

第三步:生成 API Key

有了权限,我们需要一把钥匙(Key)去开门。

  1. 回到 "Certificates, Identifiers & Profiles" 主页,切换到 Keys 标签页。
  2. 点击 "+" 创建新 Key。
  3. 输入 Key Name(比如 "Weather App Key")。
  4. 重点来了:在下方列表中,一定要勾选 WeatherKit 权限。
  5. 点击 Generate(生成)。

⚠️ 注意:生成的 .p8 文件只会显示一次!请务必立刻下载并妥善保管,苹果不会帮你存备份。

第四步:获取 JWT Token

苹果的 API 验证机制使用的是 JWT(JSON Web Token)。你需要用刚才下载的 .p8 私钥文件,结合你的 Team ID、Key ID 和 Service ID 来签名生成 Token。

这个过程虽然有点繁琐,但也有很多现成的库可以直接用。

代码示例

这里给大伙一个简单的思路(伪代码逻辑):

  • Header: { "alg": "ES256", "kid": "你的Key ID", "typ": "JWT" }
  • Payload: { "iss": "你的Team ID", "iat": 当前时间戳, "exp": 过期时间戳, "sub": "你的Service ID" }

使用对应的加密库(如 Node.js 的 jsonwebtoken)用 ES256 算法签名即可。Token 的有效期通常设置不要超过 1 小时,建议动态生成。

如何调用接口?

拿到 Token 后,你就可以放心大胆地请求了。

请求示例

curl -v -H 'Authorization: Bearer <你的JWT_Token>' "https://weatherkit.apple.com/api/v1/weather/en/37.32299/-122.03218?dataSets=currentWeather,forecastHourly"
``

这里的 URL 参数含义:
- `en`: 语言代码。
- `37.32299/-122.03218`: 纬度/经度(支持查询指定坐标天气)。
- `dataSets`: 你需要的数据类型,比如 `currentWeather`(实时天气)、`forecastHourly`(逐时预报)等。

### 注意事项(避坑指南)
1.  **请求频率限制**:虽然免费,但不是无限造。根据目前的政策,免费额度通常是每月 50 万次调用。对于个人项目、博客挂件或者小型 App 来说,这完全是绰绰有余的。
2.  **必须 HTTPS**:接口只支持 HTTPS 协议,不支持明文 HTTP。
3.  **域名白名单**:部分配置下,你可能需要在 App Store Connect 里配置允许访问的域名(虽然对于后端直接调用大部分情况不需要,但如果是前端调用要注意 CORS 的问题)。

## 总结

这波羊毛薅得其实挺舒服的。与其去折腾那些不知名的小接口,不如直接用苹果官方的,稳定、免费且体面。

如果你已经有开发者账号,不用白不用;如果你还没账号,单纯为了这个 api 去充值一年可能不太划算,除非你刚好在开发 iOS 应用。

这套流程稍微有点技术门槛,主要卡在 JWT Token 的生成上。如果大家在配置过程中遇到问题(比如生成 Token 报错、接口返回 401/403),可以检查一下 Key ID 是否匹配,或者 Token 是否过期。

希望能帮到有需要的兄弟们!

标签: none

AI Skills Smart Station on Nick Launches

评论已关闭