经过几个月的Android学习,自己先做一个App检验一下学习的基础知识怎么样,偶然在网上看到一些天气Api,所以自己也想实现以下,本文主要讲解在开发天气预报App第一步——怎么样获取天气预报App?
一、现有的比较好的天气数据Api(免费的)
1、百度天气Api:http://apistore.baidu.com/apiworks/servicedetail/478.html
2、新浪天气Api:http://weather.news.sina.com.cn/weather/
3、中国气象局数据开发平台:http://openweather.weather.com.cn/(我用的就是这个)
还有很多其它的天气预报数据接口,我只看了这3个,它们都差不多,都是根据你需要查询的城市,再返回JSon格式的天气预报数据。
比如中国气象局数据开放平台(SmartWeatherAPI):
使用规范:
请求方式: http get
接口组成: 由固定 URL 加 5 个不同的参数组成,完整 URL 需客户
端经过固定方式加密后使用。
数据返回: json
完整 URL:
固定 URL: http://open.weather.com.cn/data/
输入参数:
参数名称 | 参数含义 | 参数样例 |
---|---|---|
areaid | 区域 id | 单区域:101010100;多区域:101010100/101010200 |
type | 数据类型 | 指数:index_f(基础)、index_v(常规) 3天常规预报(24 小时):forecast_f(基础)、forecast_v (常规) |
date | 客户端日期 | 按照格式 yyyyMMddHHmm 获取客户端当前时间 |
appid | 固定分配的型号标识 | xx: 1234567890 传递参数时:截取 appid 的前 6 位生成公钥时:取完整的 appid |
key | 令牌 | 由公钥(public_key)和私钥(private_key)通过固定算法加密生成 |
其中的key=”.urlencode($key) 是根据用户在中国气象数据开放平台注册之后分配的key,进行加密之后得到的一串码文,以此来进行数据请求。
输入示例:
http://open.weather.com.cn/data/?areaid=101010100&type=forecast_f&date=201212010741&appid=123456&key=hPZf1%2F5Ag%2F4JS2A%2BcYmpj5Yv2YA%3D
其中的key就是通过加密之后得到码文。发送请求得到返回json格式数据:
|
|
对用参数含义:
天气情况表:
其它的一些内容可在气象局提供的帮助文档中找到。
2、获取天气预报数据思路
根据http请求返回得到的天气预报数据都是一些代码,具体含义不能直接得到,所以思路是将这些信息添加到一个数据库中,根据得到的天气代码去查询数据库,最后得到具体的天气情况。
2.1、获得省-市-县信息
我们要得到天气预报,先要知道我们先要查询的城市的编码,全国城市编码都是统一的,在中国气象数据开放平台也可以下载到一个包含全国所有省-市-县的编码表(excel格式),我们需要通过代码将全国的城市编码读入到数据库中(不是一次性读入,是根据用户点击的“省”)。
当开启APP时,程序读取excel表,先将所有的省份编码存入到数据库中,当用户点击对应的省份时,先根据省份的编码查询数据库,若数据库中有该省份下的城市编码,则直接读取,否则就去读取excel表,根据省份的编码获取对应的所有城市的编码,以此循环,只有当用户点击完所有的省份时,数据库中才会保存全国城市的信息编码。
2.2、分析编码
例如浙江杭州萧山的编码101210102
前三位101是固定码,全国所有的城市编码前三位都是101;
第4位和第5位表示的是省份的编码,即21表示的是浙江省;
第6、7位表示的是城市编码,即01表示的是浙江省的杭州市;
第8、9位表示的县(或者区)编码,即01表示浙江省杭州市萧山区。
当然也有特殊的省份,比如北京、上海等直辖市的编码,因为它们下面没有市,所以它们的编码最后2位都是00。
2.3、获取天气预报数据信息
首先根据气象数据开放平台分配的AppId和Private_Key,以及选择的城市代码,通过加密得到http请求的加密文:
|
|
通过以上demo可以获得加密文str,再根据上述的请求URL格式:
获取json格式数据,再解析json数据。
|
|
将获取的天气预报信息编码存入到SharePreferences中
3、基本功能模块设计
后续添加