中国天气网API
上次做飞信天气预报的时候简单搜索了一下中国天气网的 API ,当然是没有官方文档的,最初是谁挖掘出来的也不可考了。刚才在增加新功能的时候又顺手搜了一下相关资料,发现这个 API 还真不简单。中国天气网有三个 API 适用于不同场合的使用。
http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下。
|
|
上面这个就是我现在在用的,返回的数据最全面,也是绝大多数博客中都会介绍的。另外还有两个接口比较简洁。
http://www.weather.com.cn/data/sk/101010100.html 这个接口返回的数据是实况数据,像下面这样的。
|
|
还有一个接口http://www.weather.com.cn/data/cityinfo/101010100.html 这个接口返回的数据如下。
|
|
另外中国天气网还有一个根据 IP 来判断访问者所在地的引擎,地址在http://61.4.185.48:81/ ,直接访问的话会提示“This is the geoip engine created for weather.com.cn. ”,访问http://61.4.185.48:81/g/ 可以返回你的 IP 所在地相应信息,包括 IP 和城市编号,但是没有城市名称。
2013 年 8 月 2 日更新。
返回数据最多的那个接口,即本文中最开始介绍的接口,其中的图片获取规则因为博文发布时间久远,我已经遗忘了。如果有哪位读者知道的话,恳请评论告知,我好添加到文章中,方便各位的共享。
另外,天气网本身有另一个用于 Flash 的接口。在天气网上查询任意一个城市的天气,可以看到其页面上有一个 Flash 绘制的“整点天气实况”,就是当天的气温曲线。里面的数据是从 http://flash.weather.com.cn/sk2/101050101.xml 这个接口获得的。返回数据如下。
|
|
稍作解析: sktq
是“实况天气”的汉语拼音首字母缩写,这个节点的 id
是城市 ID ,ptime
即是发布时间, city
是城市的名称。根节点内是一系列 qw
节点, qw
即是“气温”的汉语拼音缩写;每个节点中, h 是整点小时数,即此节点数据发布时间的小时位; wd
是温度,以摄氏计; fx
是风向,貌似是个角度,具体的规则我还不太清楚; fl
是风力级数; js
是降水,以毫米计; sd
是相对湿度,以百分数计。这一系列节点是以时间逆序排列的,也就是说,接近当前时间的排在前面。
要使用这个接口的数据,跟其他接口一样,也需要解决读者评论中提到的跨域问题,我个人的建议是用自己的服务器做代理转发,经过代理层之后是要用 JSON
还是 JSONP
或者 Flash
跨域,就随自己喜好和项目需求了吧。
2013 年 8 月 22 日更新。
四个图片接口依次如下:http://m.weather.com.cn/img/c0.gif , http://m.weather.com.cn/img/b0.gif , http://www.weather.com.cn/m/i/weatherpic/29x20/d0.gif , http://www.weather.com.cn/m2/i/icon_weather/29x20/n00.gif 。其中图片编号 99 代表空图片。
对于想手动获取城市代码的朋友,也有几个接口提供给大家。获取省级代码的接口: http://www.weather.com.cn/data/list3/city.xml?level=1 ,获取城市代码的接口(比如安徽省是 22 ): http://www.weather.com.cn/data/list3/city22.xml?level=2 ,获取区域代码的接口(比如安庆是 2206): http://www.weather.com.cn/data/list3/city2206.xml?level=3 。需要注意的是这几个接口并不是返回 XML 文档,而是返回纯文本,需要自行分割匹配。
Flash 实况地址在这里: http://flash.weather.com.cn/sk2/shikuang.swf?id=101050101 。
本次更新的内容都来自于 http://g.kehou.com/t1033317914.html,在此对接口的挖掘者和分享者表示感谢!也感谢读者朋友的反馈。
2014年4月25日更新。
本文可能无法及时更新,因为我也并不是一直都在使用这些接口。 3月份开始中国天气网貌似对一些数据源进行了处理,对未验证的请求会返回旧的数据。 解决方法,个人认为比较完整的一个总结在这里:国内有哪些城市较完整可以免费使用的天气 API 接口?
另外一篇从中国天气网移动版页面上分析来的接口说明,看这里:开发笔记-获取天气数据接口。
反正现在总体来看,移动版页面的数据源判定比较简单,最多也就是对 Referer 进行判断而已,建议使用。 桌面版网页的数据源虽然有一个实况接口还可以使用,但是想必验证会趋于严格。有兴趣的也可以继续挖掘:) 。
这个详解太详细了。index_ag index_xc 分别是感冒易发指数和洗车指数。楼主猜测的都是对的。img1-12确实是图标编号,可以去另一个根目录的另一个文件夹下载的。
赞一个,现在还知道了实况的api。
顿时觉得墨迹神马的都弱爆了
返回的数据实际是标准的 JSON 格式,而 Ajax 有严格的跨域限制,因此直接地使用 Ajax 获取数据是不可行的。
但是有这样一种技术叫做 JSONP ,你可以搜索了解一下,它可以解决跨域问题,前提是数据源服务器要支持。这里显然是不可行的。
但是我们还有最后一招,虽然 Ajax 有跨域限制,但是服务器端是没有跨域限制的,比如我们的服务器 A ,其上运行的程序显然可以获取任意地址的数据。我们可以利用这个特征,在自己的服务器上架设一个代理。比方说,天气网的 API 服务器是 B ,我们的服务器是 A ,我们在 A 上放一个 dataproxy.php 文件(以 PHP 为例),他接受一些参数,然后把这些参数拼装成符合 B 要求的格式,去获取 B 上的数据,然后返回获取的数据,或者还可以进一步解析数据,返回不同的格式。在这个过程中, dataproxy.php 这个代理还可以验证参数的有效性,过滤不合法的参数等等。一旦掌握了这个方法,你只要有一个代理,稍作改动即可支持 JSONP ,这样你各个服务器的页面里都可以使用 Ajax 来从 A 获取数据了。
img_title1": “多云”, // ? 可能是天气图标对应的 title “img_title2”: “多云”, // ? 可能是天气图标对应的 title “img_title3”: “晴”, // ? 可能是天气图标对应的 title “img_title4”: “多云”, // ? 可能是天气图标对应的 title “img_title5”: “雷阵雨”, // ? 可能是天气图标对应的 title “img_title6”: “小雨”, // ? 可能是天气图标对应的 title “img_title7”: “多云”, // ? 可能是天气图标对应的 title “img_title8”: “多云”, // ? 可能是天气图标对应的 title “img_title9”: “晴”, // ? 可能是天气图标对应的 title “img_title10”: “晴”, // ? 可能是天气图标对应的 title “img_title11”: “晴”, // ? 可能是天气图标对应的 title “img_title12”: “晴”, // ? 可能是天气图标对应的 title
不是对应的图标,是描述,两个一组。 比如:1,2表示当天“多云转晴“;9,10表示第五天一天都是"晴";
03.“img2”:“0”,
04.“img3”:“0”,
05.“img4”:“99”,
06.“img5”:“1”,
07.“img6”:“4”,
08.“img7”:“4”,
09.“img8”:“99”,
10.“img9”:“1”,
11.“img10”:“2”,
12.“img11”:“4”,
13.“img12”:“99”,
我的理解是每天分夜晚和白天两段,所以6天就有12个,依次是当天夜晚、白天,第二天夜晚、白天…… “img1”: “n2.gif”, “img2”: “d0.gif”, 这里就很明确了,n即night,d即day
我知道前面的是代表白天图片编号,但是后面的99到底代表什么意思呢?如果和你说的是对的,代表的是空图片,那么夜晚的图片我怎么去获取?
获取城市代码的API http://www.weather.com.cn/data/list3/city.xml好像失效了,以前能返回 01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,10|山西,11|陕西,12|山东,13|新疆,14|西藏,15|青海,16|甘肃,17|宁夏,18|河南,19|江苏,20|湖北,21|浙江,22|安徽,23|福建,24|江西,25|湖南,26|贵州,27|四川,28|广东,29|云南,30|广西,31|海南,32|香港,33|澳门,34|台湾
现在没有内容,请问还有其它API可以替换吗?
获取城市代码的API http://www.weather.com.cn/data/list3/city.xml好像失效了,以前能返回 01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,10|山西,11|陕西,12|山东,13|新疆,14|西藏,15|青海,16|甘肃,17|宁夏,18|河南,19|江苏,20|湖北,21|浙江,22|安徽,23|福建,24|江西,25|湖南,26|贵州,27|四川,28|广东,29|云南,30|广西,31|海南,32|香港,33|澳门,34|台湾
现在没有内容,请问还有其它API可以替换吗?
获取城市代码的API http://www.weather.com.cn/data/list3/city.xml好像失效了,以前能返回 01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,10|山西,11|陕西,12|山东,13|新疆,14|西藏,15|青海,16|甘肃,17|宁夏,18|河南,19|江苏,20|湖北,21|浙江,22|安徽,23|福建,24|江西,25|湖南,26|贵州,27|四川,28|广东,29|云南,30|广西,31|海南,32|香港,33|澳门,34|台湾
现在没有内容,请问还有其它API可以替换吗?