因为最近在做一个项目,涉及一个小模块——推送天气。根据城市名去找天气的一些信息,比如说,高低温度,实时温度,天气状况,湿度,空气质量AQI等等。
反复找了好多天气API,最后发现小米的API挺不错的,是json格式的数据,方便读取数据。
http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=
比如说:深圳的天气代码为101280601
在浏览器上访问http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101280601
如果出现乱码,相信你应该知道怎么解决!
访问之后,我们拿到如下所示的数据:
相信聪明的你知道怎么看这些数据,转换成如下:
拿到这样的json格式的数据,那就好处理了。
先写一个方法:
public static byte[] readInputStream(InputStream inputStream) throws IOException {
byte[] buffer = new byte[1024];
int len = 0;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
return bos.toByteArray();
}
再访问API调取数据,直接读取就行:
URL url = new URL(“http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101280601");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream inputStream = conn.getInputStream(); // 通过输入流获得网站数据
byte[] getData = readInputStream(inputStream); // 获得网站的二进制数据
String data = new String(getData, “utf-8”);
System.out.println(“从网页上获取的json:” + data);
JSONObject jsonObject01 = JSONObject.fromObject(data);
JSONObject jsonObject02 = JSONObject.fromObject(jsonObject01.getJSONObject(“realtime”));
System.out.println(“湿度:” + jsonObject02.getString(“SD”));
System.out.println(“天气:” + jsonObject02.getString(“weather”));
JSONObject jsonObject03 = JSONObject.fromObject(jsonObject01.getJSONObject(“today”));
System.out.println(“高温:” + jsonObject03.getDouble(“tempMax”));
System.out.println(“低温:” + jsonObject03.getDouble(“tempMin”));
JSONObject jsonObject04 = JSONObject.fromObject(jsonObject01.getJSONObject(“aqi”));
System.out.println(“空气质量:” + jsonObject04.getInt(“aqi”));
这就可以得到自己想读取的数据了。
评论加载中