WeatherKit是苹果提供的查询天气接口,通过swift的API封装可以快速的集成到app应用中,其他平台例如网站、安卓则可以调用它提供的REST API接口使用。

开通苹果的开发者账号,即可拥有每个月50万次的免费调用,如果需要更多,超出部分可以另外付费。系统原生库集成比较简单,本文写一写REST API接口的调用,用于自己封装接口,网站或其他平台使用。

一、创建APPID

在开发者后台,选择Identifiers,创建一个App ID,类型是APP,在App Services中,勾选WeatherKit选项。记住创建的Bundle ID后面使用。

2025-01-03T08:58:24.png

二、创建秘钥

同样在开发者后台,选择Keys,创建一个key文件,勾选WeatherKit功能,点击Register,创建之后,会有一个Download选项,将这个文件下载下来。是一个 .p8 结尾的文件,重命名为key.txt为了后面加密更方便。

该文件只能下载一次,丢失或者删除的话,需要重新创建。同时也记录创建的Key ID,在列表页也可以看到Key ID。

2025-01-03T08:58:41.png

三、签名

使用mac自带的终端命令行签名更方便。

1、在终端执行命令(需要有Ruby环境)

gem install jwt

Mac自带的有Ruby,如果你执行该命令报错不存在,可能是没安装Ruby或者版本过老,可以通过Homebrew安装Ruby之后再执行上面命令。

2、创建执行的ruby文件

新建纯文本文件,名字为client_secret.rb,放在上面key.txt文件同级目录。

内容

require 'jwt'

key_file = 'key.txt'
team_id = ''
client_id = ''
key_id = ''

ecdsa_key = OpenSSL::PKey::EC.new IO.read key_file

headers = {
  'kid' => key_id
}

claims = {
    'iss' => team_id,
    'iat' => Time.now.to_i,
    'exp' => Time.now.to_i + 86400*365*100
    'aud' => 'https://appleid.apple.com',
    'sub' => client_id,
}

token = JWT.encode claims, ecdsa_key, 'ES256', headers

puts token
  • team_id是开发账号的teamID
  • client_id是前面创建APPID时的那个Bundle ID
  • key_id是前面创建秘钥时的key ID
  • 文件里面的exp过期时间这里我设置成了一百年,WeatherKit苹果并没有硬性规定,apple登录的话写了最长六个月,这个可以修改成自己需要的过期时间,过期了就要重新创建一个秘钥文件,然后再生成一次token,否则会报错401错误。

3、生成Token

在client_secret.rb文件夹下,执行下面命令,就会生成一个tokens

ruby client_secret.rb 

开始使用

发起接口请求,请求头加上Authorization字段,内容为Bearer + 空格 + 创建的token

"Authorization": "Bearer 创建的token"

然后调用对应经纬度和国家的接口即可返回json数据

curl -v -H 'Authorization: Bearer [developer token]' "https://weatherkit.apple.com/api/v1/availability/37.323/122.032?country=US"

☟☟可点击下方广告支持一下☟☟

最后修改:2025 年 01 月 03 日
请我喝杯可乐,请随意打赏: ☞已打赏列表