中国天气网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 这个接口返回的格式如下。
- {
- "weatherinfo": {
- "city": "哈尔滨", // 城市中文名
- "city_en": "haerbin", // 城市英文名
- "date_y": "2012年8月18日", // 发布日期
- "date": "", // ?
- "week": "星期六", // 周信息
- "fchh": "18", // ?
- "cityid": "101050101", // 城市ID
- "temp1": "18℃~26℃", // 今日气温
- "temp2": "17℃~29℃", // 明日气温
- "temp3": "18℃~23℃", // 第三日气温
- "temp4": "13℃~24℃", // 第四日气温
- "temp5": "15℃~31℃", // 第五日气温
- "temp6": "14℃~32℃", // 第六日气温
- "tempF1": "64.4℉~78.8℉", // 今日气温(华氏)
- "tempF2": "62.6℉~84.2℉", // 明日气温(华氏)
- "tempF3": "64.4℉~73.4℉", // 第三日气温(华氏)
- "tempF4": "55.4℉~75.2℉", // 第四日气温(华氏)
- "tempF5": "59℉~87.8℉", // 第五日气温(华氏)
- "tempF6": "57.2℉~89.6℉", // 第六日气温(华氏)
- "weather1": "多云", // 今日天气
- "weather2": "晴转多云", // 明日天气
- "weather3": "雷阵雨转小雨", // 第三日天气
- "weather4": "多云", // 第四日天气
- "weather5": "晴", // 第五日天气
- "weather6": "晴", // 第六日天气
- "img1": "1", // ? 可能是天气图标编号
- "img2": "99", // ? 可能是天气图标编号
- "img3": "0", // ? 可能是天气图标编号
- "img4": "1", // ? 可能是天气图标编号
- "img5": "4", // ? 可能是天气图标编号
- "img6": "7", // ? 可能是天气图标编号
- "img7": "1", // ? 可能是天气图标编号
- "img8": "99", // ? 可能是天气图标编号
- "img9": "0", // ? 可能是天气图标编号
- "img10": "99", // ? 可能是天气图标编号
- "img11": "0", // ? 可能是天气图标编号
- "img12": "99", // ? 可能是天气图标编号
- "img_single": "1", // ? 可能是天气图标编号
- "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
- "img_title_single": "多云", // ? 可能是天气图标对应的 title
- "wind1": "西南风小于3级转西风3-4级", // 今日风向风力信息
- "wind2": "西风小于3级转西南风3-4级", // 明日风向风力信息
- "wind3": "西南风小于3级转3-4级", // 第三日风向风力信息
- "wind4": "西南风小于3级转3-4级", // 第四日风向风力信息
- "wind5": "西南风小于3级转3-4级", // 第五日风向风力信息
- "wind6": "西南风小于3级转3-4级", // 第六日风向风力信息
- "fx1": "西南风", // ?
- "fx2": "西风", // ?
- "fl1": "小于3级转3-4级", // 今日风力信息
- "fl2": "小于3级转3-4级", // 明日风力信息
- "fl3": "小于3级转3-4级", // 第三日风力信息
- "fl4": "小于3级转3-4级", // 第四日风力信息
- "fl5": "小于3级转3-4级", // 第五日风力信息
- "fl6": "小于3级转3-4级", // 第六日风力信息
- "index": "热",
- "index_d": "天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。",
- "index48": "炎热",
- "index48_d": "天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。",
- "index_uv": "中等", // 紫外线信息
- "index48_uv": "弱", // ? 48 小时紫外线信息
- "index_xc": "较适宜", // ?
- "index_tr": "适宜", // ? 旅游指数
- "index_co": "舒适", // ? 舒适指数
- "st1": "25",
- "st2": "17",
- "st3": "28",
- "st4": "19",
- "st5": "18",
- "st6": "16",
- "index_cl": "较适宜", // ? 晨练指数
- "index_ls": "适宜", // ? 晾晒指数
- "index_ag": "极易发"
- }
- }
{ "weatherinfo": { "city": "哈尔滨", // 城市中文名 "city_en": "haerbin", // 城市英文名 "date_y": "2012年8月18日", // 发布日期 "date": "", // ? "week": "星期六", // 周信息 "fchh": "18", // ? "cityid": "101050101", // 城市ID "temp1": "18℃~26℃", // 今日气温 "temp2": "17℃~29℃", // 明日气温 "temp3": "18℃~23℃", // 第三日气温 "temp4": "13℃~24℃", // 第四日气温 "temp5": "15℃~31℃", // 第五日气温 "temp6": "14℃~32℃", // 第六日气温 "tempF1": "64.4℉~78.8℉", // 今日气温(华氏) "tempF2": "62.6℉~84.2℉", // 明日气温(华氏) "tempF3": "64.4℉~73.4℉", // 第三日气温(华氏) "tempF4": "55.4℉~75.2℉", // 第四日气温(华氏) "tempF5": "59℉~87.8℉", // 第五日气温(华氏) "tempF6": "57.2℉~89.6℉", // 第六日气温(华氏) "weather1": "多云", // 今日天气 "weather2": "晴转多云", // 明日天气 "weather3": "雷阵雨转小雨", // 第三日天气 "weather4": "多云", // 第四日天气 "weather5": "晴", // 第五日天气 "weather6": "晴", // 第六日天气 "img1": "1", // ? 可能是天气图标编号 "img2": "99", // ? 可能是天气图标编号 "img3": "0", // ? 可能是天气图标编号 "img4": "1", // ? 可能是天气图标编号 "img5": "4", // ? 可能是天气图标编号 "img6": "7", // ? 可能是天气图标编号 "img7": "1", // ? 可能是天气图标编号 "img8": "99", // ? 可能是天气图标编号 "img9": "0", // ? 可能是天气图标编号 "img10": "99", // ? 可能是天气图标编号 "img11": "0", // ? 可能是天气图标编号 "img12": "99", // ? 可能是天气图标编号 "img_single": "1", // ? 可能是天气图标编号 "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 "img_title_single": "多云", // ? 可能是天气图标对应的 title "wind1": "西南风小于3级转西风3-4级", // 今日风向风力信息 "wind2": "西风小于3级转西南风3-4级", // 明日风向风力信息 "wind3": "西南风小于3级转3-4级", // 第三日风向风力信息 "wind4": "西南风小于3级转3-4级", // 第四日风向风力信息 "wind5": "西南风小于3级转3-4级", // 第五日风向风力信息 "wind6": "西南风小于3级转3-4级", // 第六日风向风力信息 "fx1": "西南风", // ? "fx2": "西风", // ? "fl1": "小于3级转3-4级", // 今日风力信息 "fl2": "小于3级转3-4级", // 明日风力信息 "fl3": "小于3级转3-4级", // 第三日风力信息 "fl4": "小于3级转3-4级", // 第四日风力信息 "fl5": "小于3级转3-4级", // 第五日风力信息 "fl6": "小于3级转3-4级", // 第六日风力信息 "index": "热", "index_d": "天气较热,建议着短裙、短裤、短套装、T恤等夏季服装。年老体弱者宜着长袖衬衫和单裤。", "index48": "炎热", "index48_d": "天气炎热,建议着短衫、短裙、短裤、薄型T恤衫、敞领短袖棉衫等清凉夏季服装。", "index_uv": "中等", // 紫外线信息 "index48_uv": "弱", // ? 48 小时紫外线信息 "index_xc": "较适宜", // ? "index_tr": "适宜", // ? 旅游指数 "index_co": "舒适", // ? 舒适指数 "st1": "25", "st2": "17", "st3": "28", "st4": "19", "st5": "18", "st6": "16", "index_cl": "较适宜", // ? 晨练指数 "index_ls": "适宜", // ? 晾晒指数 "index_ag": "极易发" }}
上面这个就是我现在在用的,返回的数据最全面,也是绝大多数博客中都会介绍的。另外还有两个接口比较简洁。
http://www.weather.com.cn/data/sk/101010100.html 这个接口返回的数据是实况数据,像下面这样的。
- {
- "weatherinfo": {
- "city": "北京", // 城市中文名
- "cityid": "101010100", // 城市 ID
- "temp": "24", // 温度
- "WD": "西南风", // 风向
- "WS": "1级", // 风力
- "SD": "92%", // 湿度
- "WSE": "1", // ?
- "time": "19:15", // ? 发布时间
- "isRadar": "1", // ?
- "Radar": "JC_RADAR_AZ9010_JB" // ?雷达编号
- }
- }
{ "weatherinfo": { "city": "北京", // 城市中文名 "cityid": "101010100", // 城市 ID "temp": "24", // 温度 "WD": "西南风", // 风向 "WS": "1级", // 风力 "SD": "92%", // 湿度 "WSE": "1", // ? "time": "19:15", // ? 发布时间 "isRadar": "1", // ? "Radar": "JC_RADAR_AZ9010_JB" // ?雷达编号 }}
还有一个接口http://www.weather.com.cn/data/cityinfo/101010100.html 这个接口返回的数据如下。
- {
- "weatherinfo": {
- "city": "北京", // 城市中文名
- "cityid": "101010100", // 城市 ID
- "temp1": "22℃", // ?
- "temp2": "31℃", // ?
- "weather": "阴转晴", // 天气
- "img1": "n2.gif", // ? 天气图标编号
- "img2": "d0.gif", // ? 天气图标编号
- "ptime": "18:00" // 发布时间
- }
- }
{ "weatherinfo": { "city": "北京", // 城市中文名 "cityid": "101010100", // 城市 ID "temp1": "22℃", // ? "temp2": "31℃", // ? "weather": "阴转晴", // 天气 "img1": "n2.gif", // ? 天气图标编号 "img2": "d0.gif", // ? 天气图标编号 "ptime": "18:00" // 发布时间 }}另外中国天气网还有一个根据 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,在此对接口的挖掘者和分享者表示感谢!也感谢读者朋友的反馈。
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天天气预报、气象指数等丰富的数据
- 中国天气网API
- 中国天气网API
- 中国天气网API
- 中国天气网API
- 中国天气网API
- 中国天气网 API
- 中国天气网免费天气API
- 关于中国天气网API
- 中国天气网API(2014.11)
- 中国天气网api接口
- 中国天气网API接口
- 中国天气网天气API参数详细解释说明
- 【汇总】中国天气网提供的天气开发api接口
- android中国天气网api获取天气信息并解析
- java 调用中国天气网API
- 中国天气网api(json格式)
- 中国天气网免费天气预报接口API
- PHP 天气预报API 中国天气网
- BW中DSO的分类及应用
- C++编程规范之30:避免重载&&,||或,(逗号)
- java数据结构-HashMap
- Android Animation之frame animation
- java的几种对象(PO,VO,DAO,BO,POJO)解释
- 中国天气网API
- 39 java 方法重载 (1)
- R-$和@符号的意义
- java_客户端防表单重复提交和服务器端session防表单重复提交
- 解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 108:
- 大数据处理方法总结(转载)
- java 类加载器
- 堆实现
- GFellow Project