首先需要考虑的一个问题就是,我们如何才能得到全国省市县的数据信息,以及如何才能获取到每个城市的天气信息。很幸运,现在网上有不少免费的天气预报接口可以实现上述功能,如新浪天气、雅虎天气等,这里我们准备使用中国天气网提供的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|台湾
可以看到,北京的代号是01,上海的代号是02,不同省份之间以逗号分隔,省份名称和省级代号之间以单竖线分隔。那么如何才能知道某个省内有哪些城市呢?其实也很简单,比如江苏的省级代号是19,访问如下地址即可:
http://www.weather.com.cn/data/list3/city19.xml
也就是说,只需要将省级代号添加到city的后面就行了,现在服务器返回的数据如下:
1901|
南京,1902|无锡,1903|镇江,1904|苏州,1905|南通,1906|扬州,1907|盐城,1908|徐州,1909|淮安,1910|连云港,1911|常州,1912|泰州,1913|宿迁
这样我们就得到江苏省内所有城市的信息了,可以看到,现在返回的数据格式和刚才查看省份信息时返回的数据格式是一样的。相信此时你已经可以举一反三了,比如说苏州的市级代号是1904,那么想要知道苏州市下又有哪些县的时候,只需访问如下地址:
http://www.weather.com.cn/data/list3/city1904.xml
这次服务器返回的数据如下:
190401|
苏州,190402|常熟,190403|张家港,190404|昆山,190405|吴县东山,190406|吴县,190407|吴江,190408|太仓
通过这种方式,我们就能把全国所有的省、市、县都罗列出来了。那么解决了全国省市县数据的获取,我们又怎样才能查看到具体的天气信息呢?这就必须找到某个地区对应的天气代号。比如说昆山的县级代号是190404,那么访问如下地址:
http://www.weather.com.cn/data/list3/city190404.xml
这时服务器返回的数据非常简短:
190404|101190404
其中,后半部分的
101190404
就是昆山所对应的天气代号了。这个时候再去访问查询天气接口,将相应的天气代号填入即可,接口地址如下:
http://www.weather.com.cn/data/cityinfo/101190404.html
这样,服务器就会把昆山当前的天气信息以JSON格式返回给我们了,如下所示:
{"weatherinfo":
{"city":"昆山","cityid":"101190404","temp1":"21℃","temp2":"9℃",
"weather":"多云转小雨","img1":"d1.gif","img2":"n7.gif","ptime":"11:00"}
}
其中city表示城市名,cityid表示城市对应的天气代号,temp1和temp2表示气温是几度到几度,weather表示今日天气信息的描述,img1和 img2表示今日天气对应的图片,ptime表示天气发布的时间。