中国天气网API

来源:互联网 发布:linux arm 启动代码 编辑:程序博客网 时间:2024/04/29 11:58

源地址:http://blog.mynook.info/2012/08/18/weather-com-cn-api.html


上次做飞信天气预报的时候简单搜索了一下中国天气网的 API ,当然是没有官方文档的,最初是谁挖掘出来的也不可考了。刚才在增加新功能的时候又顺手搜了一下相关资料,发现这个 API 还真不简单。中国天气网有三个 API 适用与不同场合的使用。

http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下。

[javascript] view plaincopyprint?
  1. {  
  2.     "weatherinfo": {  
  3.         "city""哈尔滨"// 城市中文名  
  4.         "city_en""haerbin"// 城市英文名  
  5.         "date_y""2012年8月18日"// 发布日期  
  6.         "date"""// ?  
  7.         "week""星期六"// 周信息  
  8.         "fchh""18"// ?  
  9.         "cityid""101050101"// 城市ID  
  10.         "temp1""18℃~26℃"// 今日气温  
  11.         "temp2""17℃~29℃"// 明日气温  
  12.         "temp3""18℃~23℃"// 第三日气温  
  13.         "temp4""13℃~24℃"// 第四日气温  
  14.         "temp5""15℃~31℃"// 第五日气温  
  15.         "temp6""14℃~32℃"// 第六日气温  
  16.         "tempF1""64.4℉~78.8℉"// 今日气温(华氏)  
  17.         "tempF2""62.6℉~84.2℉"// 明日气温(华氏)  
  18.         "tempF3""64.4℉~73.4℉"// 第三日气温(华氏)  
  19.         "tempF4""55.4℉~75.2℉"// 第四日气温(华氏)  
  20.         "tempF5""59℉~87.8℉"// 第五日气温(华氏)  
  21.         "tempF6""57.2℉~89.6℉"// 第六日气温(华氏)  
  22.         "weather1""多云"// 今日天气  
  23.         "weather2""晴转多云"// 明日天气  
  24.         "weather3""雷阵雨转小雨"// 第三日天气  
  25.         "weather4""多云"// 第四日天气  
  26.         "weather5""晴"// 第五日天气  
  27.         "weather6""晴"// 第六日天气  
  28.         "img1""1"// ? 可能是天气图标编号  
  29.         "img2""99"// ? 可能是天气图标编号  
  30.         "img3""0"// ? 可能是天气图标编号  
  31.         "img4""1"// ? 可能是天气图标编号  
  32.         "img5""4"// ? 可能是天气图标编号  
  33.         "img6""7"// ? 可能是天气图标编号  
  34.         "img7""1"// ? 可能是天气图标编号  
  35.         "img8""99"// ? 可能是天气图标编号  
  36.         "img9""0"// ? 可能是天气图标编号  
  37.         "img10""99"// ? 可能是天气图标编号  
  38.         "img11""0"// ? 可能是天气图标编号  
  39.         "img12""99"// ? 可能是天气图标编号  
  40.         "img_single""1"// ? 可能是天气图标编号  
  41.         "img_title1""多云"// ? 可能是天气图标对应的 title  
  42.         "img_title2""多云"// ? 可能是天气图标对应的 title  
  43.         "img_title3""晴"// ? 可能是天气图标对应的 title  
  44.         "img_title4""多云"// ? 可能是天气图标对应的 title  
  45.         "img_title5""雷阵雨"// ? 可能是天气图标对应的 title  
  46.         "img_title6""小雨"// ? 可能是天气图标对应的 title  
  47.         "img_title7""多云"// ? 可能是天气图标对应的 title  
  48.         "img_title8""多云"// ? 可能是天气图标对应的 title  
  49.         "img_title9""晴"// ? 可能是天气图标对应的 title  
  50.         "img_title10""晴"// ? 可能是天气图标对应的 title  
  51.         "img_title11""晴"// ? 可能是天气图标对应的 title  
  52.         "img_title12""晴"// ? 可能是天气图标对应的 title  
  53.         "img_title_single""多云"// ? 可能是天气图标对应的 title  
  54.         "wind1""西南风小于3级转西风3-4级"// 今日风向风力信息  
  55.         "wind2""西风小于3级转西南风3-4级"// 明日风向风力信息  
  56.         "wind3""西南风小于3级转3-4级"// 第三日风向风力信息  
  57.         "wind4""西南风小于3级转3-4级"// 第四日风向风力信息  
  58.         "wind5""西南风小于3级转3-4级"// 第五日风向风力信息  
  59.         "wind6""西南风小于3级转3-4级"// 第六日风向风力信息  
  60.         "fx1""西南风"// ?   
  61.         "fx2""西风"// ?   
  62.         "fl1""小于3级转3-4级"// 今日风力信息  
  63.         "fl2""小于3级转3-4级"// 明日风力信息  
  64.         "fl3""小于3级转3-4级"// 第三日风力信息  
  65.         "fl4""小于3级转3-4级"// 第四日风力信息  
  66.         "fl5""小于3级转3-4级"// 第五日风力信息  
  67.         "fl6""小于3级转3-4级"// 第六日风力信息  
  68.         "index""热",  
  69.         "index_d""天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。",  
  70.         "index48""炎热",  
  71.         "index48_d""天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。",  
  72.         "index_uv""中等"// 紫外线信息  
  73.         "index48_uv""弱"// ? 48 小时紫外线信息  
  74.         "index_xc""较适宜"// ?   
  75.         "index_tr""适宜"// ? 旅游指数  
  76.         "index_co""舒适"// ? 舒适指数  
  77.         "st1""25",  
  78.         "st2""17",  
  79.         "st3""28",  
  80.         "st4""19",  
  81.         "st5""18",  
  82.         "st6""16",  
  83.         "index_cl""较适宜"// ? 晨练指数  
  84.         "index_ls""适宜"// ? 晾晒指数  
  85.         "index_ag""极易发"  
  86.     }  
  87. }  

上面这个就是我现在在用的,返回的数据最全面,也是绝大多数博客中都会介绍的。另外还有两个接口比较简洁。

http://www.weather.com.cn/data/sk/101010100.html 这个接口返回的数据是实况数据,像下面这样的。

[javascript] view plaincopyprint?
  1. {  
  2.     "weatherinfo": {  
  3.         "city""北京"// 城市中文名  
  4.         "cityid""101010100"// 城市 ID  
  5.         "temp""24"// 温度  
  6.         "WD""西南风"// 风向  
  7.         "WS""1级"// 风力  
  8.         "SD""92%"// 湿度  
  9.         "WSE""1"// ?   
  10.         "time""19:15"// ? 发布时间  
  11.         "isRadar""1"// ?   
  12.         "Radar""JC_RADAR_AZ9010_JB" // ?雷达编号  
  13.     }  
  14. }  

还有一个接口http://www.weather.com.cn/data/cityinfo/101010100.html 这个接口返回的数据如下。

[javascript] view plaincopyprint?
  1. {  
  2.     "weatherinfo": {  
  3.         "city""北京"// 城市中文名  
  4.         "cityid""101010100"// 城市 ID  
  5.         "temp1""22℃"// ?   
  6.         "temp2""31℃"// ?   
  7.         "weather""阴转晴"// 天气  
  8.         "img1""n2.gif"// ? 天气图标编号  
  9.         "img2""d0.gif"// ? 天气图标编号  
  10.         "ptime""18:00" // 发布时间  
  11.     }  
  12. }  
另外中国天气网还有一个根据 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.gifhttp://m.weather.com.cn/img/b0.gifhttp://www.weather.com.cn/m/i/weatherpic/29x20/d0.gifhttp://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,在此对接口的挖掘者和分享者表示感谢!也感谢读者朋友的反馈。

    

1. XML接口
http://flash.weather.com.cn/wmaps/xml/china.xml
这个是全国天气的根节点,列出所有的省,其中的pyName字段是各个省XML的文件名,比如北京的是beijing,那就意味着北京的XML地址为
http://flash.weather.com.cn/wmaps/xml/beijing.xml
一个省的天气,其中列出该省各个市的数据,北京就列出各个区。
tmp1是最低温低,tmp2是最高温度,url非常重要,我们一会儿再说。state1和state2是神马转神马,每个数代表一个天气现象。天气现象非常多,我本想全部分析出来,后来直接放弃了这个想法。因为我看到了一个城市的天气现象的编码是26...我现在知道的有0.晴 1.多云 2.阴 6.雨夹雪 7.小雨 8.中雨 13.阵雪 14.小雪
其中后来发现知道这个没用,这个数字的主要作用是检索图片的!!!

2. 图片接口
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
这个图就是天气现象0(晴)的图片,其他天气现象的图片依此类推。c打头的图片是20*20像素的,b打头的是50*46像素的,d打头的是反白的图标,29*20像素,n打头的是夜间反白图标,29*20像素,注意这里的文件名是两位数字!
也许还有更多的图标,等待大家发掘啦~

3. JSON接口
真没想到~居然有JSON接口~JSON在iPhone上分析起来要比XML简单很多
http://m.weather.com.cn/data/101010200.html
这个是北京的JSON数据,那个HTML的名字是根据上文XML中的url得到的。这个JSON中包含了实时数据、7天天气预报、气象指数等丰富的数据

0 0
原创粉丝点击