转载于 http://blog.mynook.info/2012/08/18/weather-com-cn-api.html
上次做飞信天气预报的时候简单搜索了一下中国天气网的 API ,当然是没有官方文档的,最初是谁挖掘出来的也不可考了。刚才在增加新功能的时候又顺手搜了一下相关资料,发现这个 API 还真不简单。中国天气网有三个 API 适用于不同场合的使用。
http://m.weather.com.cn/data/101050101.html 这个接口返回的格式如下。
1 2 3 4 5 6 7 8 9 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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | { "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 这个接口返回的数据是实况数据,像下面这样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "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/html/radar/雷达图编号.shtml } } |
还有一个接口http://www.weather.com.cn/data/cityinfo/101010100.html 这个接口返回的数据如下。
1 2 3 4 5 6 7 8 9 10 11 12 | { "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 这个接口获得的。返回数据如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?xml version="1.0"?> <sktq id="101050101" ptime="13-08-02 16:00" city="哈尔滨"> <qw h="16" wd="30" fx="190" fl="2" js="0" sd="64"/> <qw h="15" wd="30" fx="203" fl="3" js="0" sd="61"/> <qw h="14" wd="30" fx="174" fl="3" js="0" sd="63"/> <qw h="13" wd="30" fx="179" fl="3" js="0" sd="62"/> <qw h="12" wd="29" fx="162" fl="3" js="0" sd="66"/> <qw h="11" wd="29" fx="214" fl="2" js="0" sd="66"/> <qw h="10" wd="28" fx="214" fl="2" js="0" sd="70"/> <qw h="09" wd="28" fx="220" fl="2" js="0" sd="70"/> <qw h="08" wd="26" fx="178" fl="2" js="0" sd="75"/> <qw h="07" wd="25" fx="145" fl="1" js="0" sd="76"/> <qw h="06" wd="24" fx="171" fl="1" js="0" sd="79"/> <qw h="05" wd="24" fx="131" fl="2" js="0" sd="79"/> <qw h="04" wd="24" fx="146" fl="2" js="0" sd="77"/> <qw h="03" wd="24" fx="163" fl="2" js="0" sd="75"/> <qw h="02" wd="24" fx="126" fl="2" js="0" sd="84"/> <qw h="01" wd="24" fx="127" fl="1" js="0" sd="81"/> <qw h="00" wd="25" fx="137" fl="2" js="0" sd="78"/> <qw h="23" wd="25" fx="99" fl="2" js="0" sd="78"/> <qw h="22" wd="25" fx="140" fl="2" js="0" sd="76"/> <qw h="21" wd="26" fx="133" fl="2" js="0" sd="78"/> <qw h="20" wd="27" fx="149" fl="1" js="0" sd="71"/> <qw h="19" wd="28" fx="187" fl="2" js="0" sd="67"/> <qw h="18" wd="29" fx="161" fl="2" js="0" sd="59"/> <qw h="17" wd="30" fx="138" fl="2" js="0" sd="60"/> <qw h="16" wd="30" fx="130" fl="3" js="0" sd="57"/> </sktq> |
稍作解析: 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 。
全国各城市代码如下:
北京:101010100朝阳:101010300顺义:101010400怀柔:101010500通州:101010600昌平:101010700延庆:101010800丰台:101010900石景山:101011000大兴:101011100房山:101011200密云:101011300门头沟:101011400平谷:101011500八达岭:101011600佛爷顶:101011700汤河口:101011800密云上甸子:101011900斋堂:101012000霞云岭:101012100北京城区:101012200海淀:101010200天津:101030100宝坻:101030300东丽:101030400西青:101030500北辰:101030600蓟县:101031400汉沽:101030800静海:101030900津南:101031000塘沽:101031100大港:101031200武清:101030200宁河:101030700上海:101020100宝山:101020300嘉定:101020500南汇:101020600浦东:101021300青浦:101020800松江:101020900奉贤:101021000崇明:101021100徐家汇:101021200闵行:101020200金山:101020700石家庄:101090101张家口:101090301承德:101090402唐山:101090501秦皇岛:101091101沧州:101090701衡水:101090801邢台:101090901邯郸:101091001保定:101090201廊坊:101090601郑州:101180101新乡:101180301许昌:101180401平顶山:101180501信阳:101180601南阳:101180701开封:101180801洛阳:101180901商丘:101181001焦作:101181101鹤壁:101181201濮阳:101181301周口:101181401漯河:101181501驻马店:101181601三门峡:101181701济源:101181801安阳:101180201合肥:101220101芜湖:101220301淮南:101220401马鞍山:101220501安庆:101220601宿州:101220701阜阳:101220801亳州:101220901黄山:101221001滁州:101221101淮北:101221201铜陵:101221301宣城:101221401六安:101221501巢湖:101221601池州:101221701蚌埠:101220201杭州:101210101舟山:101211101湖州:101210201嘉兴:101210301金华:101210901绍兴:101210501台州:101210601温州:101210701丽水:101210801衢州:101211001宁波:101210401重庆:101040100合川:101040300南川:101040400江津:101040500万盛:101040600渝北:101040700北碚:101040800巴南:101040900长寿:101041000黔江:101041100万州天城:101041200万州龙宝:101041300涪陵:101041400开县:101041500城口:101041600云阳:101041700巫溪:101041800奉节:101041900巫山:101042000潼南:101042100垫江:101042200梁平:101042300忠县:101042400石柱:101042500大足:101042600荣昌:101042700铜梁:101042800璧山:101042900丰都:101043000武隆:101043100彭水:101043200綦江:101043300酉阳:101043400秀山:101043600沙坪坝:101043700永川:101040200福州:101230101泉州:101230501漳州:101230601龙岩:101230701晋江:101230509南平:101230901厦门:101230201宁德:101230301莆田:101230401三明:101230801兰州:101160101平凉:101160301庆阳:101160401武威:101160501金昌:101160601嘉峪关:101161401酒泉:101160801天水:101160901武都:101161001临夏:101161101合作:101161201白银:101161301定西:101160201张掖:101160701广州:101280101惠州:101280301梅州:101280401汕头:101280501深圳:101280601珠海:101280701佛山:101280800肇庆:101280901湛江:101281001江门:101281101河源:101281201清远:101281301云浮:101281401潮州:101281501东莞:101281601中山:101281701阳江:101281801揭阳:101281901茂名:101282001汕尾:101282101韶关:101280201南宁:101300101柳州:101300301来宾:101300401桂林:101300501梧州:101300601防城港:101301401贵港:101300801玉林:101300901百色:101301001钦州:101301101河池:101301201北海:101301301崇左:101300201贺州:101300701贵阳:101260101安顺:101260301都匀:101260401兴义:101260906铜仁:101260601毕节:101260701六盘水:101260801遵义:101260201凯里:101260501昆明:101290101红河:101290301文山:101290601玉溪:101290701楚雄:101290801普洱:101290901昭通:101291001临沧:101291101怒江:101291201香格里拉:101291301丽江:101291401德宏:101291501景洪:101291601大理:101290201曲靖:101290401保山:101290501呼和浩特:101080101乌海:101080301集宁:101080401通辽:101080501阿拉善左旗:101081201鄂尔多斯:101080701临河:101080801锡林浩特:101080901呼伦贝尔:101081000乌兰浩特:101081101包头:101080201赤峰:101080601南昌:101240101上饶:101240301抚州:101240401宜春:101240501鹰潭:101241101赣州:101240701景德镇:101240801萍乡:101240901新余:101241001九江:101240201吉安:101240601武汉:101200101黄冈:101200501荆州:101200801宜昌:101200901恩施:101201001十堰:101201101神农架:101201201随州:101201301荆门:101201401天门:101201501仙桃:101201601潜江:101201701襄樊:101200201鄂州:101200301孝感:101200401黄石:101200601咸宁:101200701成都:101270101自贡:101270301绵阳:101270401南充:101270501达州:101270601遂宁:101270701广安:101270801巴中:101270901泸州:101271001宜宾:101271101内江:101271201资阳:101271301乐山:101271401眉山:101271501凉山:101271601雅安:101271701甘孜:101271801阿坝:101271901德阳:101272001广元:101272101攀枝花:101270201银川:101170101中卫:101170501固原:101170401石嘴山:101170201吴忠:101170301西宁:101150101黄南:101150301海北:101150801果洛:101150501玉树:101150601海西:101150701海东:101150201海南:101150401济南:101120101潍坊:101120601临沂:101120901菏泽:101121001滨州:101121101东营:101121201威海:101121301枣庄:101121401日照:101121501莱芜:101121601聊城:101121701青岛:101120201淄博:101120301德州:101120401烟台:101120501济宁:101120701泰安:101120801西安:101110101延安:101110300榆林:101110401铜川:101111001商洛:101110601安康:101110701汉中:101110801宝鸡:101110901咸阳:101110200渭南:101110501太原:101100101临汾:101100701运城:101100801朔州:101100901忻州:101101001长治:101100501大同:101100201阳泉:101100301晋中:101100401晋城:101100601吕梁:101101100乌鲁木齐:101130101石河子:101130301昌吉:101130401吐鲁番:101130501库尔勒:101130601阿拉尔:101130701阿克苏:101130801喀什:101130901伊宁:101131001塔城:101131101哈密:101131201和田:101131301阿勒泰:101131401阿图什:101131501博乐:101131601克拉玛依:101130201拉萨:101140101山南:101140301阿里:101140701昌都:101140501那曲:101140601日喀则:101140201林芝:101140401台北县:101340101高雄:101340201台中:101340401海口:101310101三亚:101310201东方:101310202临高:101310203澄迈:101310204儋州:101310205昌江:101310206白沙:101310207琼中:101310208定安:101310209屯昌:101310210琼海:101310211文昌:101310212保亭:101310214万宁:101310215陵水:101310216西沙:101310217南沙岛:101310220乐东:101310221五指山:101310222琼山:101310102长沙:101250101株洲:101250301衡阳:101250401郴州:101250501常德:101250601益阳:101250700娄底:101250801邵阳:101250901岳阳:101251001张家界:101251101怀化:101251201黔阳:101251301永州:101251401吉首:101251501湘潭:101250201南京:101190101镇江:101190301苏州:101190401南通:101190501扬州:101190601宿迁:101191301徐州:101190801淮安:101190901连云港:101191001常州:101191101泰州:101191201无锡:101190201盐城:101190701哈尔滨:101050101牡丹江:101050301佳木斯:101050401绥化:101050501黑河:101050601双鸭山:101051301伊春:101050801大庆:101050901七台河:101051002鸡西:101051101鹤岗:101051201齐齐哈尔:101050201大兴安岭:101050701长春:101060101延吉:101060301四平:101060401白山:101060901白城:101060601辽源:101060701松原:101060801吉林:101060201通化:101060501沈阳:101070101鞍山:101070301抚顺:101070401本溪:101070501丹东:101070601葫芦岛:101071401营口:101070801阜新:101070901辽阳:101071001铁岭:101071101朝阳:101071201盘锦:101071301大连:101070201锦州:101070701
本次更新的内容都来自于 http://g.kehou.com/t1033317914.html,在此对接口的挖掘者和分享者表示感谢!也感谢读者朋友的反馈。