和风天气API接口调用

今天闲来无事,搞点没啥用的东西.最近天气大热,突然想搞个天气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;
    }
}

  • 6
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值