前阵子项目中遇到了需要使用接口查询天气接口,之前以为很难,后面发现贼简单,话不多说直接上代码
// 文字转译 设置时间超时
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";
Appkey 配置 Appkey 一定是要最真实的
@Value("${forecast.appkey}")
private String APPKEY;
下面是逻辑代码
public AjaxJson findForecast(String cityname) {
// 先定义一个结果
String result =null;
String url ="http://apis.juhe.cn/simpleWeather/query";//请求接口地址
Map params = new HashMap();//请求参数
params.put("city",cityname);//要查询的城市,如:温州、上海、北京
params.put("key",APPKEY);//应用APPKEY(应用详细页查询)
params.put("dtype","");//返回数据的格式,xml或json,默认json
try {
result =net(url, params, "GET");
} catch (Exception e) {
e.printStackTrace();
}
return AjaxJson.success().put("成功",result);
}
private String net(String strUrl, Map params, String method) throws Exception{
// Object cityname = params.get("city");
// System.out.println(cityname);
HttpURLConnection conn = null;
BufferedReader reader = null;
String rs = null;
try {
StringBuffer sb = new StringBuffer();
if(method==null || method.equals("GET")){
strUrl = strUrl+"?"+urlencode(params);
// System.out.println(strUrl);
}
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;
}
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();
}
}
以下是运行结果
{
"msg": "操作成功",
"code": 200,
"成功": "{\"reason\":\"查询成功!\",\"result\":{\"city\":\"成都\",\"realtime\":{\"temperature\":\"6\",\"humidity\":\"93\",\"info\":\"阴\",\"wid\":\"02\",\"direct\":\"北风\",\"power\":\"2级\",\"aqi\":\"45\"},\"future\":[{\"date\":\"2020-12-03\",\"temperature\":\"4\\/6℃\",\"weather\":\"小雨转阴\",\"wid\":{\"day\":\"07\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-04\",\"temperature\":\"4\\/6℃\",\"weather\":\"阴\",\"wid\":{\"day\":\"02\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-05\",\"temperature\":\"4\\/7℃\",\"weather\":\"阴\",\"wid\":{\"day\":\"02\",\"night\":\"02\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-06\",\"temperature\":\"5\\/8℃\",\"weather\":\"小雨\",\"wid\":{\"day\":\"07\",\"night\":\"07\"},\"direct\":\"持续无风向\"},{\"date\":\"2020-12-07\",\"temperature\":\"5\\/9℃\",\"weather\":\"小雨\",\"wid\":{\"day\":\"07\",\"night\":\"07\"},\"direct\":\"持续无风向\"}]},\"error_code\":0}",
"success": true
}