本文主要是介绍百度天气预报接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
百度提供天气预报查询接口API,可以根据经纬度/城市名查询天气情况,我们可以在微信公众平台开发中调用这一接口。
接口说明
根据经纬度/城市名查询天气的结果
接口示例
http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=yourkey&sn=yoursn
百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key
sn算法见底部附录
接口参数说明
参数类型 | 参数名称 | 是否必须 | 具体描述 |
---|---|---|---|
String | ak | true | 开发者密钥 |
String | sn | false | 若用户所用ak的校验方式为sn校验时该参数必须。 |
String | location | true | 输入城市名或经纬度,城市名称如:北京,经纬度格式为lng,lat坐标如: location=116.305145,39.982368;城市天气预报中间"|"分隔,location=116.305145,39.982368| 122.305145,36.982368|…. |
String | output | false | 输出的数据格式,默认为xml格式,当output设置为’json’时,输出的为json格式的数据; |
String | coord_type | false | 请求参数坐标类型,默认为gcj02经纬度坐标。允许的值为bd09ll、bd09mc、gcj02、wgs84。bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托坐标,gcj02表示经过国测局加密的坐标。wgs84表示gps获取的坐标。 |
返回结果
参数名称 | 含义 | 说明 | |
---|---|---|---|
currentCity | 当前城市 | 返回城市名 | |
status | 返回结果状态信息 | ||
date | 当前时间 | 年-月-日 | |
results | 天气预报信息 | 白天可返回近期3天的天气情况(今天、明天、后天)、晚上可返回近期4天的天气情况(今天、明天、后天、大后天) | |
results.currentCity | 当前城市 | ||
results.weather_data | weather_data.date | 天气预报时间 | |
weather_data.dayPictureUrl | 白天的天气预报图片url | ||
weather_data.nightPictureUrl | 晚上的天气预报图片url | ||
weather_data.weather | 天气状况 | 所有天气情况(”|”分隔符):晴|多云|阴|阵雨|雷阵雨|雷阵雨伴有冰雹|雨夹雪|小雨|中雨|大雨|暴雨|大暴雨|特大暴雨|阵雪|小雪|中雪|大雪|暴雪|雾|冻雨|沙尘暴|小雨转中雨|中雨转大雨|大雨转暴雨|暴雨转大暴雨|大暴雨转特大暴雨|小雪转中雪|中雪转大雪|大雪转暴雪|浮尘|扬沙|强沙尘暴|霾 | |
weather_data.wind | 风力 | ||
weather_data.temperature | 温度 |
返回xml格式的数据
<?xml version="1.0" encoding="utf-8" ?> <CityWeatherResponse> <status>success</status> <date>2014-05-03</date> <results> <currentCity>北京</currentCity> <weather_data> <date>周六(今天, 实时:22℃)</date> <dayPictureUrl>http://api.map.baidu.com/images/weather/day/leizhenyu.png</dayPictureUrl> <nightPictureUrl>http://api.map.baidu.com/images/weather/night/duoyun.png</nightPictureUrl> <weather>雷阵雨转多云</weather> <wind>北风5-6级</wind> <temperature>24 ~ 11℃</temperature> <date>周日</date> <dayPictureUrl>http://api.map.baidu.com/images/weather/day/duoyun.png</dayPictureUrl> <nightPictureUrl>http://api.map.baidu.com/images/weather/night/qing.png</nightPictureUrl> <weather>多云转晴</weather> <wind>北风4-5级</wind> <temperature>19 ~ 8℃</temperature> <date>周一</date> <dayPictureUrl>http://api.map.baidu.com/images/weather/day/qing.png</dayPictureUrl> <nightPictureUrl>http://api.map.baidu.com/images/weather/night/qing.png</nightPictureUrl> <weather>晴</weather> <wind>微风</wind> <temperature>21 ~ 9℃</temperature> <date>周二</date> <dayPictureUrl>http://api.map.baidu.com/images/weather/day/duoyun.png</dayPictureUrl> <nightPictureUrl>http://api.map.baidu.com/images/weather/night/qing.png</nightPictureUrl> <weather>多云转晴</weather> <wind>微风</wind> <temperature>21 ~ 10℃</temperature> </weather_data> </results> </CityWeatherResponse>
返回json格式的数据
{ "error": 0, "status": "success", "date": "2014-05-03", "results": [ { "currentCity": "北京", "weather_data": [ { "date": "周六(今天, 实时:22℃)", "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/leizhenyu.png", "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png", "weather": "雷阵雨转多云", "wind": "北风5-6级", "temperature": "24 ~ 11℃" }, { "date": "周日", "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png", "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png", "weather": "多云转晴", "wind": "北风4-5级", "temperature": "19 ~ 8℃" }, { "date": "周一", "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/qing.png", "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png", "weather": "晴", "wind": "微风", "temperature": "21 ~ 9℃" }, { "date": "周二", "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/duoyun.png", "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/qing.png", "weather": "多云转晴", "wind": "微风", "temperature": "21 ~ 10℃" } ] } ] }
附录1:sn计算算法
sn = MD5(urlencode(basicString + sk))
其中 basicString 的算法如下:
- (1) get 请求
- url 中 http://域名{uri}
- basicString = uri
- (2) post 请求
- url 中 http://域名{uri} POST 参数按照key进行从小大到字母排序
- 然后拼装成:k1= v1&k2= v2&k3=v3&...&kn=vn的格式=> {params}
- basicString = uri +?+ params
SN签名计算的PHP代码参考示例:
- /**
- * @brief 计算SN签名算法
- * @param string $ak access key
- * @param string $sk secret key
- * @param string $url url值,例如: /geosearch/nearby 不能带hostname和querstring,也不能带?
- * @param array $querystring_arrays 参数数组,key=>value形式。在计算签名后不能重新排序,也不能添加或者删除数据元素
- * @param string $method 只能为'POST'或者'GET'
- */
- public function caculateAKSN($ak, $sk, $url, $querystring_arrays, $method = 'GET'){
- if ($method === 'POST'){
- ksort($querystring_arrays);
- }
- $querystring = http_build_query($querystring_arrays);
- return md5(urlencode($url.'?'.$querystring.$sk));
- }
附录2:返回码定义
返回码 | 定义 | 英文描述 |
---|---|---|
0 | 正常 | |
1 | 服务器内部错误 | |
2 | 请求参数非法 | |
3 | 权限校验失败 | |
4 | 配额校验失败 | |
5 | ak不存在或者非法 | |
101 | 服务禁用 | |
102 | 不通过白名单或者安全码不对 | |
2xx | 无权限 | |
3xx | 配额错误 |
控制服务部分错误码:
202-205、210、233 | 无请求权限 |
231 | 用户uid,ak不存在 |
232 | 用户、ak被封禁 |
234 | sn签名计算错误 |
210 | 权限资源不存在 |
345 | 分钟配额超额 |
346 | 月配额超额 |
347 | 年配额超额 |
348 | 永久配额超额无请求权限 |
355 | 日配额超额 |
350 | 配额资源不存在 |
微信中开发实现的方法,请访问
微信公众平台开发(4)天气预报
效果如下:
扫描下面的二维码可体验
这篇关于百度天气预报接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!