WeatherKit是苹果提供的查询天气接口,通过swift的API封装可以快速的集成到app应用中,其他平台例如网站、安卓则可以调用它提供的REST API接口使用。
开通苹果的开发者账号,即可拥有每个月50万次的免费调用,如果需要更多,超出部分可以另外付费。系统原生库集成比较简单,本文写一写REST API接口的调用,用于自己封装接口,网站或其他平台使用。
一、创建APPID
在开发者后台,选择Identifiers
,创建一个App ID,类型是APP,在App Services中,勾选WeatherKit
选项。记住创建的Bundle ID
后面使用。
二、创建秘钥
同样在开发者后台,选择Keys
,创建一个key文件,勾选WeatherKit功能,点击Register,创建之后,会有一个Download
选项,将这个文件下载下来。是一个 .p8 结尾的文件,重命名为key.txt
为了后面加密更方便。
该文件只能下载一次,丢失或者删除的话,需要重新创建。同时也记录创建的Key ID,在列表页也可以看到Key ID。
三、签名
使用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"
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/1350.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!