开始使用
欢迎使用和风天气开发服务,本篇文档将介绍一些基本概念和文档索引,便于你快速开始以及了解和风天气开发服务是如何运行的。
帐号
你需要注册一个帐号,用于管理你的项目、凭据、财务等事宜。请参考帐号管理。
配置API和SDK
在请求数据之前,需要一些准备工作:
- 创建项目和凭据用来管理你的API。
- 了解身份认证,和风天气支持两种身份认证方式:JSON Web Token (JWT) 以及 API KEY。
- 获取API Host,这是你独立的API请求地址。
- 如何发送API请求。
- 安装和配置 iOS SDK 或 Android SDK。
开发
我们提供了详尽的开发文档以及实用资料,可以帮助开发者更高效的完成工作。
另一方面,最佳实践介绍了一些常见做法和经验,以便你能够快速的、稳定的获取你需要的数据。
费用
和风天气的计费方式为按量计费,并采用阶梯价,意味着你的请求量越多,单价越低,并且当你停止使用时,你不需要支付任何费用。请参考定价和计费方式和支付。
如果你的请求量较多,你也可以使用节省计划来大幅降低你的成本,了解节省计划。
对于中国大陆地区的用户,我们的价格已经包含增值税,如需要开具增值税发票请参考增值税发票。
帮助和支持
你可以点击网页顶部的放大镜按钮去搜索需要的资料,或查看常见问题。99%的疑问可以在文档中找到答案。
你也可以提交工单,我们的技术专家将尽快帮助你。
前往控制台 - 工单
条款
为了提供一个更加公平、高效、合规的开发环境,你需要同意我们的各项服务条款,并在许可证允许的范围内使用和风天气开发服务。参考条款。
API Host
API Host是开发者独立的API地址,用于取代传统的公共API地址,这将提供更高的安全性和保护开发者的隐私。
对于每个开发者帐号来说,API Host都是独立、唯一的,同时API Host也是身份认证的一部分,这意味着即使开发者的凭据泄露了,盗用者如果不知道API Host也是无法请求数据的。
查看你的API Host
你可以在控制台-设置中查看你的API Host,API Host 看起来像是:
abc1234xyz.def.qweatherapi.com
使用API Host
你需要将API Host粘贴至API请求URL或SDK的配置文件中,请参考:
- 如何发送API请求
- 安装和配置 iOS SDK
- 安装和配置 Android SDK
API 配置
了解如何发送一个API请求。
现在,我们假设你已经创建了项目和凭据,准备开始创建一个完整的API请求吧。
请求URL
通常来讲,一个完整的API请求URL由scheme,host,path,path parameters和query parameters组成:
https://abcxyz.qweatherapi.com/airquality/v1/station/{LocationID}?lang=en
\___/ \____________________/\____________________/\___________/\______/
scheme host path path queryparams params
- scheme: 仅支持HTTPS协议。
- host: 开发者的API Host,请在控制台-设置中查看。
- path: API的请求路径(或称之为API端点、Endpoint)。
- path params: 路径参数均为必选参数。
- query params: 查询参数,包括必选和可选参数,多个查询参数使用
&分割。
提示:你必须对参数中的特殊字符进行URL编码。
添加身份认证
我们在上一步创建了一个API请求URL,现在需要为它添加身份认证以便服务器可以识别我们的身份。了解身份认证。
JWT
在请求标头中添加如下内容:
Authorization: Bearer eyJhbGciOiAiRWREU0EiLCJraWQiOiAiQUJDRDEyMzQifQ.eyJpc3MiOiJBQkNEMTIzNCIsImlhdCI6MTcwMzkxMjQwMCwiZXhwIjoxNzAzOTEyOTQwfQ.MEQCIFGLmpmAEwuhB74mR04JWg_odEau6KYHYLRXs8Bp_miIAiBMU5O13vnv9ieEBSK71v4UULMI4K5T9El6bCxBkW4BdA
API KEY
在请求标头中添加如下内容:
X-QW-Api-Key: ABCD1234EFGH
Gzip
请注意,和风天气开发服务的API均使用Gzip进行了压缩,这将极大的减少网络流量,加快请求。因此,当你在开发过程中,需要对返回的数据进行解压。请参考最佳实践-Gzip。
构建完整的API请求
你可以用熟悉的开发语言构建最终的API请求,这里使用curl获取北京实时天气为例:
# 将下列占位符替换为你的实际值:
# abcxyz.qweatherapi.com → 你的 API Host
# 1234.ABCD.5678 → 你生成的 JWT
# ABCD1234EFGH → 你的 API KEY# JWT 身份认证curl --compressed \
-H 'Authorization: Bearer 1234.ABCD.5678' \
'https://abcxyz.qweatherapi.com/v7/weather/now?location=101010100'# API KEY 身份认证curl --compressed \
-H "X-QW-Api-Key: ABCD1234EFGH" \
'https://abcxyz.qweatherapi.com/v7/weather/now?location=101010100'
对于大部分开发者来说,构建一个API URL并非难事,但我们仍然强烈建议你阅读最佳实践-优化请求文档,了解发送API请求的一些常见问题和经验。
当然,为了得到天气,需要得知城市编码;而一般无法记住城市编码,因此需要通过城市搜索API,将文本(如“北京”“上海”“Shanghai”等)获取到对应的城市编码。
城市搜索API
城市搜索API提供全球地理位位置、全球城市搜索服务,支持经纬度坐标反查、多语言、模糊搜索等功能。
天气数据是基于地理位置的数据,因此获取天气之前需要先知道具体的位置信息。使用城市搜索,可获取到该城市的基本信息,包括城市的Location ID(你需要这个ID去查询天气),多语言名称、经纬度、时区、海拔、Rank值、归属上级行政区域、所在行政区域等。
另外,城市搜索也可以帮助你在你的APP中实现模糊搜索,用户只需要输入1-2个字即可获得结果。
请求路径
/geo/v2/city/lookup
参数
查询参数
location(必选)需要查询地区的名称,支持文字、以英文逗号分隔的经度,纬度坐标(十进制,最多支持小数点后两位)、LocationID或Adcode(仅限中国城市)。例如location=北京或location=116.41,39.92
模糊搜索,当location传递的为文字时,支持模糊搜索,即用户可以只输入城市名称一部分进行搜索,最少一个汉字或2个字符,结果将按照相关性和Rank值进行排列,便于开发或用户进行选择他们需要查看哪个城市的天气。例如
location=bei,将返回与bei相关性最强的若干结果,包括黎巴嫩的贝鲁特和中国的北京市
重名,当location传递的为文字时,可能会出现重名的城市,例如陕西省西安市、吉林省辽源市下辖的西安区和黑龙江省牡丹江市下辖的西安区,此时会根据Rank值排序返回所有结果。在这种情况下,可以通过
adm参数的方式进一步确定需要查询的城市或地区,例如location=西安&adm=黑龙江
adm城市的上级行政区划,可设定只在某个行政区划范围内进行搜索,用于排除重名城市或对结果进行过滤。例如adm=beijing
如请求参数为
location=chaoyang&adm=beijing时,返回的结果只包括北京市的朝阳区,而不包括辽宁省的朝阳市如请求参数仅为
location=chaoyang时,返回的结果包括北京市的朝阳区、辽宁省的朝阳市以及长春市的朝阳区
range搜索范围,可设定只在某个国家或地区范围内进行搜索,国家和地区名称需使用ISO 3166 所定义的国家代码。如果不设置此参数,搜索范围将在所有城市。例如range=cnnumber返回结果的数量,取值范围1-20,默认返回10个结果。lang多语言设置,请阅读多语言文档,了解我们的多语言是如何工作、如何设置以及数据是否支持多语言。
请求示例
curl -X GET --compressed \
-H 'Authorization: Bearer your_token' \
'https://your_api_host/geo/v2/city/lookup?location=beij'
请将your_token替换为你的JWT身份认证,将your_api_host替换为你的API Host
返回数据
返回数据是JSON格式并进行了Gzip压缩。
{"code":"200","location":[{"name":"北京","id":"101010100","lat":"39.90499","lon":"116.40529","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"10","fxLink":"https://www.qweather.com/weather/beijing-101010100.html"},{"name":"海淀","id":"101010200","lat":"39.95607","lon":"116.31032","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"15","fxLink":"https://www.qweather.com/weather/haidian-101010200.html"},{"name":"朝阳","id":"101010300","lat":"39.92149","lon":"116.48641","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"15","fxLink":"https://www.qweather.com/weather/chaoyang-101010300.html"},{"name":"昌平","id":"101010700","lat":"40.21809","lon":"116.23591","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"23","fxLink":"https://www.qweather.com/weather/changping-101010700.html"},{"name":"房山","id":"101011200","lat":"39.73554","lon":"116.13916","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"23","fxLink":"https://www.qweather.com/weather/fangshan-101011200.html"},{"name":"通州","id":"101010600","lat":"39.90249","lon":"116.65860","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"23","fxLink":"https://www.qweather.com/weather/tongzhou-101010600.html"},{"name":"丰台","id":"101010900","lat":"39.86364","lon":"116.28696","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"25","fxLink":"https://www.qweather.com/weather/fengtai-101010900.html"},{"name":"大兴","id":"101011100","lat":"39.72891","lon":"116.33804","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"25","fxLink":"https://www.qweather.com/weather/daxing-101011100.html"},{"name":"延庆","id":"101010800","lat":"40.46532","lon":"115.98501","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"33","fxLink":"https://www.qweather.com/weather/yanqing-101010800.html"},{"name":"平谷","id":"101011500","lat":"40.14478","lon":"117.11234","adm2":"北京","adm1":"北京市","country":"中国","tz":"Asia/Shanghai","utcOffset":"+08:00","isDst":"0","type":"city","rank":"33","fxLink":"https://www.qweather.com/weather/pinggu-101011500.html"}],"refer":{"sources":["QWeather"],"license":["QWeather Developers License"]}
}
code请参考状态码location.name地区/城市名称location.id地区/城市IDlocation.lat地区/城市纬度location.lon地区/城市经度location.adm2地区/城市的上级行政区划名称location.adm1地区/城市所属一级行政区域location.country地区/城市所属国家名称location.tz地区/城市所在时区location.utcOffset地区/城市目前与UTC时间偏移的小时数,参考详细说明location.isDst地区/城市是否当前处于夏令时。1表示当前处于夏令时,0表示当前不是夏令时。location.type地区/城市的属性location.rank地区评分location.fxLink该地区的天气预报网页链接,便于嵌入你的网站或应用refer.sources原始数据来源,或数据源说明,可能为空refer.license数据许可或版权声明,可能为空
