今天闲来无事,搞点没啥用的东西.最近天气大热,突然想搞个天气API玩玩.
在网上一番查找发现了几个免费的天气API
1.和风天气API 点击直达
免费可调用,需要注册.
2.免费天气API接口-看云 点击直达
本人没有使用该API,但是从描述文档上看,依旧是需要注册的.
3.心知天气 点击直达
同样需要注册,才能调用.
API这里找已经找好了,那么就开始花里胡哨吧.
1.和风天气注册及API查看
官网即可注册.
登录之后点击"应用管理"---->“创建应用”
选择免费开发板版[本人穷逼,玩玩而已,白嫖怪]
由于这里免费版只能创建一个应用所以,写了下面简单步骤.正常填写一下就好,基本没啥问题.
注册完成之后就可以去阅读一下API的调用规则了. 点击直达
关于请求地址,参数以及返回数据,文档中有详细描述以及用例,这里不多说了.
2.基于原生Servlet进行简单搭建一个web项目
使用Idea创建项目,项目,目录如下:
3.使用HttpClient向API发起请求
注意这里url中的key值为,注册之后在管理控制台中添加应用之后才能获取到的key.
// 定义一个CloseableHttpClient
CloseableHttpClient build = HttpClientBuilder.create().build();
// 定义天气接口Api的Url
String url = "https://devapi.heweather.net/v7/weather/now?location=121.4012,31.0449&key=your_key";
// 定义请求
HttpGet httpGet = new HttpGet(url);
// 获取查询结果
res = build.execute(httpGet);
4.得到服务器响应结果
拿到响应结果了,那么数据就有了,剩下的就是怎么将数据展示出来了.
// 获取到响应状态
int code = res.getCode();
// 请求成功
if (code == 200){
HttpEntity responseEntity = res.getEntity();
String res = "";
try{
res = EntityUtils.toString(responseEntity);
} catch (ParseException e) {
e.printStackTrace();
}
}
5.将响应结果转为Java Bean对象
//字符串转换为JSONObject类型
JSONObject jsonObject = JSON.parseObject(res);
WeatherQueryResultByLocationAndNow object = JSONObject.toJavaObject(jsonObject, WeatherQueryResultByLocationAndNow.class);
6.向前端页面响应结果
//对象存入域对象
request.setAttribute("object",object);
//服务器内部跳转
request.getRequestDispatcher("weather_info.jsp").forward(request,response);
7.前台页面展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>服务请求成功:</p>
<p>最近更新时间:</p>${object.updateTime}
<p>天气信息:</p>
<c:forEach items="${object.now}" var="m">
<p>${m.key} : ${m.value}</p>
</c:forEach>
</body>
</html>
简单的结果展示:
至此,全部完工!
附:
GetWeatherServlet.java
package cc.myoga.weather;
import cc.myoga.bean.WeatherQueryResultByLocationAndNow;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.core5.http.HttpEntity;
import org.apache.hc.core5.http.ParseException;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 获取天气信息的Servlet
*/
@WebServlet(name = "GetWeatherServlet", urlPatterns = "/GetWeatherServlet")
public class GetWeatherServlet extends HttpServlet {
// 定义一个CloseableHttpClient
CloseableHttpClient build = null;
// 定义响应接收对象
CloseableHttpResponse res = null;
@Override
public void init() throws ServletException {
super.init();
//初始化对象
build = HttpClientBuilder.create().build();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
// 定义天气接口Api的Url
String url = "https://devapi.heweather.net/v7/weather/now?location=121.4012,31.0449&key=your_key";
// 定义请求
HttpGet httpGet = new HttpGet(url);
// 获取查询结果
res = build.execute(httpGet);
// 获取到响应状态
int code = res.getCode();
// 请求成功
if (code == 200){
HttpEntity responseEntity = res.getEntity();
String res = "";
try {
res = EntityUtils.toString(responseEntity);
JSONObject jsonObject = JSON.parseObject(res);
WeatherQueryResultByLocationAndNow object = JSONObject.toJavaObject(jsonObject, WeatherQueryResultByLocationAndNow.class);
request.setAttribute("object",object);
request.getRequestDispatcher("weather_info.jsp").forward(request,response);
} catch (ParseException e) {
e.printStackTrace();
}
}else {
response.getWriter().write("600:请求出错");
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
this.doPost(request, response);
}
}
WeatherQueryResultByLocationAndNow.java
package cc.myoga.bean;
import java.util.Date;
import java.util.HashMap;
/**
* 2020/8/19 9:32
*
* @author:xingxiaoq
*/
public class WeatherQueryResultByLocationAndNow {
private String code;
private String updateTime;
private String fxLink;
private HashMap<String,String[]> refer;
private HashMap<String,String> now;
public WeatherQueryResultByLocationAndNow() {
}
@Override
public String toString() {
return "WeatherQueryResultByLocationAndNow{" +
"code='" + code + '\'' +
", updateTime=" + updateTime +
", fxLink='" + fxLink + '\'' +
", refer=" + refer +
", now=" + now +
'}';
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getFxLink() {
return fxLink;
}
public void setFxLink(String fxLink) {
this.fxLink = fxLink;
}
public HashMap<String, String[]> getRefer() {
return refer;
}
public void setRefer(HashMap<String, String[]> refer) {
this.refer = refer;
}
public HashMap<String, String> getNow() {
return now;
}
public void setNow(HashMap<String, String> now) {
this.now = now;
}
}
更多推荐