聚合数据官网https://www.juhe.cn/
个人认证以后申请天气api(有免费的测试接口,每天可以请求100次数据)
返回的数据时json格式,需要有自己的APPKEY,(Key在个人中心 我的接口)
需要在maven中导入
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
下面是java代码示例:
package com.jian8.juc.test;
import net.sf.json.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class JuheDemo {
public static final String DEF_CHATSET = "UTF-8";
public static final int DEF_CONN_TIMEOUT = 30000;
public static final int DEF_READ_TIMEOUT = 30000;
public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
//配置您申请的KEY
public static final String APPKEY ="这里写的是你自己的APPKEY";
//1.根据城市查询天气
public static void getRequest1(){
String result =null;
String url ="http://op.juhe.cn/onebox/weather/query";//请求接口地址
Map params = new HashMap();//请求参数
params.put("cityname","上海");//要查询的城市,如:温州、上海、北京
params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
params.put("dtype","json");//返回数据的格式,xml或json,默认json
try {
result =net(url, params, "GET");
JSONObject object = JSONObject.fromObject(result);
if(object.getInt("error_code")==0){
System.out.println(object.get("result"));
}else{
System.out.println(object.get("error_code")+":"+object.get("reason"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param strUrl 请求地址
* @param params 请求参数
* @param method 请求方法
* @return 网络请求字符串
* @throws Exception
*/
public static String net(String strUrl, Map params,String method) throws Exception {
HttpURLConnection conn = null;
BufferedReader reader = null;
String rs = null;
try {
StringBuffer sb = new StringBuffer();
if(method==null || method.equals("GET")){
strUrl = strUrl+"?"+urlencode(params);
}
URL url = new URL(strUrl);
conn = (HttpURLConnection) url.openConnection();
if(method==null || method.equals("GET")){
conn.setRequestMethod("GET");
}else{
conn.setRequestMethod("POST");
conn.setDoOutput(true);
}
conn.setRequestProperty("User-agent", userAgent);
conn.setUseCaches(false);
conn.setConnectTimeout(DEF_CONN_TIMEOUT);
conn.setReadTimeout(DEF_READ_TIMEOUT);
conn.setInstanceFollowRedirects(false);
conn.connect();
if (params!= null && method.equals("POST")) {
try {
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(urlencode(params));
} catch (Exception e) {
e.printStackTrace();
}
}
InputStream is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sb.append(strRead);
}
rs = sb.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
if (conn != null) {
conn.disconnect();
}
}
return rs;
}
//将map型转为请求参数型
public static String urlencode(Map<String,String> data) {
StringBuilder sb = new StringBuilder();
for (Map.Entry i : data.entrySet()) {
try {
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return sb.toString();
}
public static void main(String[] args) {
getRequest1();
}
}
返回的数据:
{
"data": {
"realtime": {
"city_code": "101020100",
"city_name": "上海",
"date": "2019-10-18",
"time": "11:00:00",
"week": "5",
"moon": "九月二十",
"dataUptime": 1571366649,
"weather": {
"temperature": "20",
"humidity": "58",
"info": "多云",
"img": "01"
},
"wind": {
"direct": "东风",
"power": "3级",
"offset": "",
"windspeed": ""
}
},
"life": {
"date": "2019-10-18",
"info": {
"kongtiao": ["较少开启", "您将感到很舒适,一般不需要开启空调。"],
"guomin": ["易发", "天气条件易诱发过敏,风力较大,易过敏人群应减少外出,外出穿长衣长裤并佩戴好眼镜和口罩,外出归来时及时清洁手和口鼻,注意防风。"],
"shushidu": ["舒适", "白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。"],
"chuanyi": ["较舒适", "建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"],
"diaoyu": ["较适宜", "较适合垂钓,但风力稍大,会对垂钓产生一定的影响。"],
"ganmao": ["较易发", "虽然温度适宜但风力较大,仍较易发生感冒,体质较弱的朋友请注意适当防护。"],
"ziwaixian": ["弱", "紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"],
"xiche": ["较不宜", "较不宜洗车,未来一天无雨,风力较大,如果执意擦洗汽车,要做好蒙上污垢的心理准备。"],
"yundong": ["较适宜", "天气较好,但因风力稍强,户外可选择对风力要求不高的运动,推荐您进行室内运动。"],
"daisan": ["不带伞", "天气较好,不会降水,因此您可放心出门,无须带雨伞。"]
}
},
"weather": [{
"date": "2019-10-18",
"info": {
"dawn": ["1", "多云", "17", "持续无风向", "3-5级", "17:22"],
"day": ["1", "多云", "23", "北风", "微风", "05:57"],
"night": ["0", "晴", "16", "北风", "微风", "17:21"]
},
"week": "五",
"nongli": "九月二十"
}, {
"date": "2019-10-19",
"info": {
"dawn": ["0", "晴", "16", "北风", "微风", "17:21"],
"day": ["1", "多云", "22", "北风", "微风", "05:58"],
"night": ["1", "多云", "16", "北风", "微风", "17:19"]
},
"week": "六",
"nongli": "九月廿一"
}, {
"date": "2019-10-20",
"info": {
"dawn": ["1", "多云", "16", "北风", "微风", "17:19"],
"day": ["1", "多云", "24", "东北风", "微风", "05:59"],
"night": ["1", "多云", "17", "东北风", "微风", "17:18"]
},
"week": "日",
"nongli": "九月廿二"
}, {
"date": "2019-10-21",
"info": {
"dawn": ["1", "多云", "17", "东北风", "微风", "17:18"],
"day": ["1", "多云", "24", "东北风", "3-5级", "06:00"],
"night": ["1", "多云", "17", "北风", "微风", "17:17"]
},
"week": "一",
"nongli": "九月廿三"
}, {
"date": "2019-10-22",
"info": {
"dawn": ["1", "多云", "17", "北风", "微风", "17:17"],
"day": ["2", "阴", "24", "东北风", "3-5级", "06:00"],
"night": ["1", "多云", "18", "东北风", "微风", "17:16"]
},
"week": "二",
"nongli": "九月廿四"
}],
"f3h": {
"temperature": [{
"jg": "20191018110000",
"jb": "20"
}, {
"jg": "20191018140000",
"jb": "22"
}, {
"jg": "20191018170000",
"jb": "21"
}, {
"jg": "20191018200000",
"jb": "18"
}, {
"jg": "20191018230000",
"jb": "17"
}, {
"jg": "20191019020000",
"jb": "16"
}, {
"jg": "20191019050000",
"jb": "16"
}, {
"jg": "20191019080000",
"jb": "19"
}, {
"jg": "20191019110000",
"jb": "22"
}],
"precipitation": [{
"jg": "20191018110000",
"jf": "0"
}, {
"jg": "20191018140000",
"jf": "0"
}, {
"jg": "20191018170000",
"jf": "0"
}, {
"jg": "20191018200000",
"jf": "0"
}, {
"jg": "20191018230000",
"jf": "0"
}, {
"jg": "20191019020000",
"jf": "0"
}, {
"jg": "20191019050000",
"jf": "0"
}, {
"jg": "20191019080000",
"jf": "0"
}, {
"jg": "20191019110000",
"jf": "0"
}]
},
"pm25": {
"pm25": {
"level": 1,
"quality": "优",
"des": "空气很棒,快出门呼吸新鲜空气吧。",
"curPm": "27",
"pm25": "14",
"pm10": "27",
"pub_time": 1571364000,
"city_code": "101020100"
},
"cityName": "上海",
"key": "上海",
"dateTime": "2019年10月18日10时"
},
"jingqu": "",
"jingqutq": "",
"date": "",
"isForeign": "0",
"partner": {
"title_word": "全国",
"show_url": "tianqi.so.com",
"base_url": "http://www.so.com/link?url=http%3A%2F%2Ftianqi.so.com%2Fweather%2F101020100&q=&ts=1571367923&t=d7abf88290b9a8a1b2421cfc278333b"
}
}
}