Java: read weather info from openweathermap.org

 

/**
 * encoding: utf-8
 * 版权所有 2023 ©涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * # Author    : geovindu,Geovin Du 涂聚文.
 * # IDE       : IntelliJ IDEA 2023.1 Java 17
 * # Datetime  : 2023 - 2023/12/15 - 14:09
 * # User      : geovindu
 * # Product   : IntelliJ IDEA
 * # Project   : EssentialAlgorithms
 * # File      : Weather.java
 * # explain   : 学习  类
 **/

package Model;

/**
 * 天气情况
 */
public class Weather{
    public int id;
    public String main;
    /**
     * 天气
     */
    public String description;
    /**
     * icon id 天气图标
     */
    public String icon;
}

  

/**
 * encoding: utf-8
 * 版权所有 2023 ©涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * # Author    : geovindu,Geovin Du 涂聚文.
 * # IDE       : IntelliJ IDEA 2023.1 Java 17
 * # Datetime  : 2023 - 2023/12/15 - 14:08
 * # User      : geovindu
 * # Product   : IntelliJ IDEA
 * # Project   : EssentialAlgorithms
 * # File      : Root.java
 * # explain   : 学习  类
 **/

package Model;

import java.util.*;
import java.util.Arrays;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * 天气主体实体类
 */
public class WeatherInfo{
    /**
     * 地球经纬度类
     */
    public Coord coord;
    /**
     *
     */
    public ArrayList<Weather> weather;
    public String base;
    public Main main;
    public int visibility;
    /**
     * 风
     */
    public Wind wind;
    public Clouds clouds;
    public int dt;
    public Sys sys;
    public int timezone;
    public int id;
    public String name;
    public int cod;
}

  

/**
 * encoding: utf-8
 * 版权所有 2023 ©涂聚文有限公司
 * 许可信息查看:
 * 描述:
 * # Author    : geovindu,Geovin Du 涂聚文.
 * # IDE       : IntelliJ IDEA 2023.1 Java 17
 * # Datetime  : 2023 - 2023/12/15 - 15:36
 * # User      : geovindu
 * # Product   : IntelliJ IDEA
 * # Project   : EssentialAlgorithms
 * # File      : openWeatherMap.java
 * # explain   : 学习  类
 **/

package BLL;


import java.io.UnsupportedEncodingException;
import java.io.IOException;
import java.io.BufferedReader;

import com.fasterxml.jackson.databind.ObjectMapper;  //jackson-annotations-2.16.0
import com.fasterxml.jackson.annotation.JsonProperty;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;

import java.net.http.*;
import java.net.*;
import java.net.HttpURLConnection;
import java.net.URL;
import Model.WeatherInfo;


public class openWeatherMap {



    private static String key="geovindu";

    /**
     * 天气实体
     * @param city 城市ID
     * @param lng  语言类型
     * @return
     */
    public WeatherInfo getObject(String city,String lng)
   {

       try {

           //String city="1795565";
           //String key="576316985a97678b603b2a15a8f16285";
           //String lng="zh_cn";

           URL url = new URL(String.format("http://api.openweathermap.org/data/2.5/weather?id=%s&appid=%s&lang=%s",city,key,lng)); //${lastname}
           HttpURLConnection response = (HttpURLConnection) url.openConnection();
           response.setRequestMethod("GET");
           response.setRequestProperty("User-Agent","Mozilla/5.0");
           response.setRequestProperty("Content-Type", "application/json");
           response.setRequestProperty("Accept", "application/json");
           response.setDoOutput(true);
           try(BufferedReader br = new BufferedReader(
                   new InputStreamReader(response.getInputStream(), "utf-8"))) {
               StringBuilder strdata = new StringBuilder();
               String responseLine = null;
               while ((responseLine = br.readLine()) != null) {
                   strdata.append(responseLine.trim());
               }

               String myJsonString=strdata.toString();
               //System.out.println(myJsonString);
               ObjectMapper om = new ObjectMapper();
               WeatherInfo root = om.readValue(myJsonString, WeatherInfo.class);

               return  root;
           }

       }
       catch(Exception e)
       {
           System.out.println(e);
           return null;
       }
   }

    /**
     * 天气实体
     * @param city 城市ID
     * @return
     */
    public WeatherInfo getObject(String city)
    {

        try {

            //String city="1795565";

            String lng="zh_cn";

            URL url = new URL(String.format("http://api.openweathermap.org/data/2.5/weather?id=%s&appid=%s&lang=%s",city,key,lng)); //${lastname}
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("GET");
            con.setRequestProperty("User-Agent","Mozilla/5.0");
            con.setRequestProperty("Content-Type", "application/json");
            con.setRequestProperty("Accept", "application/json");
            con.setDoOutput(true);
            try(BufferedReader br = new BufferedReader(
                    new InputStreamReader(con.getInputStream(), "utf-8"))) {
                StringBuilder response = new StringBuilder();
                String responseLine = null;
                while ((responseLine = br.readLine()) != null) {
                    response.append(responseLine.trim());
                }

                String myJsonString=response.toString();
                //System.out.println(myJsonString);
                ObjectMapper om = new ObjectMapper();
                WeatherInfo root = om.readValue(myJsonString, WeatherInfo.class);
                //System.out.println("天气:"+root.weather.get(0).description);
                //System.out.println("温度:"+root.main.temp);
                return  root;
            }

        }
        catch(Exception e)
        {
            System.out.println(e);
            return null;
        }
    }

}

  

調用:

        BLL.openWeatherMap weatherMap=new openWeatherMap();
        WeatherInfo geovindu=weatherMap.getObject("1795565");
        System.out.println("城市:"+ geovindu.name);
        System.out.println("湿度:"+geovindu.main.humidity + '%');
        System.out.println("天气:"+geovindu.weather.get(0).description);
        System.out.println("日出:"+TimeHelper.gettime(geovindu.sys.sunrise));
        System.out.println("日落:"+TimeHelper.gettime(geovindu.sys.sunset));
        System.out.println("温度:"+TimeHelper.getKTC(geovindu.main.temp));
        System.out.println("最低温度:"+TimeHelper.getKTC(geovindu.main.temp_min));
        System.out.println("最高温度:"+TimeHelper.getKTC(geovindu.main.temp_max));

  

輸出:

 

posted @ 2025-01-27 17:58  ®Geovin Du Dream Park™  阅读(15)  评论(0)    收藏  举报