最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中獲取實(shí)時氣象信息的3種方法

 更新時間:2025年06月11日 10:47:03   作者:碼嘍Plus  
隨著互聯(lián)網(wǎng)的發(fā)展,越來越多的應(yīng)用程序需要獲取實(shí)時的天氣信息來為用戶提供更好的服務(wù),這篇文章主要介紹了Java中獲取實(shí)時氣象信息的3種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

在Java中獲取實(shí)時氣象信息,可以通過調(diào)用氣象API(如Open-Meteo、OpenWeatherMap等)實(shí)現(xiàn)。

方法1:使用 HttpClient(Java 11+)調(diào)用Open-Meteo API

Open-Meteo是一個免費(fèi)的天氣API,無需API密鑰即可使用。

public static void main(String[] args) {
        double latitude = 39.9042;  // 北京緯度
        double longitude = 116.4074; // 北京經(jīng)度

        String apiUrl = String.format(
            "https://api.open-meteo.com/v1/forecast?latitude=%.4f&longitude=%.4f&current_weather=true",
            latitude, longitude
        );

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(apiUrl))
                .build();

        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            ObjectMapper mapper = new ObjectMapper();
            JsonNode rootNode = mapper.readTree(response.body());

            // 解析當(dāng)前天氣數(shù)據(jù)
            JsonNode currentWeather = rootNode.path("current_weather");
            double temperature = currentWeather.path("temperature").asDouble();
            double windspeed = currentWeather.path("windspeed").asDouble();
            int windDirection = currentWeather.path("winddirection").asInt();

            System.out.println("當(dāng)前溫度: " + temperature + "°C");
            System.out.println("風(fēng)速: " + windspeed + " km/h");
            System.out.println("風(fēng)向: " + windDirection + "°");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

輸出示例: 

當(dāng)前溫度: 25.3°C
風(fēng)速: 12.5 km/h
風(fēng)向: 180°

方法2:使用 OkHttp 調(diào)用OpenWeatherMap API 

OpenWeatherMap提供更詳細(xì)的天氣數(shù)據(jù),但需要API密鑰(免費(fèi)注冊) 

使用到的依賴

<dependency>
    <groupId>com.squareup.okhttp3</groupId>
    <artifactId>okhttp</artifactId>
    <version>4.10.0</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>
public static void main(String[] args) {
        String apiKey = "YOUR_API_KEY"; // 替換為你的API密鑰
        String city = "Beijing";
        String apiUrl = "https://api.openweathermap.org/data/2.5/weather?q=" + city + "&appid=" + apiKey + "&units=metric";

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(apiUrl)
                .build();

        try {
            Response response = client.newCall(request).execute();
            String responseBody = response.body().string();
            ObjectMapper mapper = new ObjectMapper();
            JsonNode rootNode = mapper.readTree(responseBody);

            // 解析天氣數(shù)據(jù)
            double temperature = rootNode.path("main").path("temp").asDouble();
            double humidity = rootNode.path("main").path("humidity").asDouble();
            String weatherDesc = rootNode.path("weather").get(0).path("description").asText();

            System.out.println("當(dāng)前溫度: " + temperature + "°C");
            System.out.println("濕度: " + humidity + "%");
            System.out.println("天氣狀況: " + weatherDesc);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 輸出示例:

當(dāng)前溫度: 26.5°C
濕度: 65%
天氣狀況: 多云

方法3:使用 Spring WebClient 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
public class WeatherService {
    private final WebClient webClient;

    public WeatherService() {
        this.webClient = WebClient.create("https://api.open-meteo.com");
    }

    public Mono<String> getCurrentWeather(double latitude, double longitude) {
        return webClient.get()
                .uri(uriBuilder -> uriBuilder
                        .path("/v1/forecast")
                        .queryParam("latitude", latitude)
                        .queryParam("longitude", longitude)
                        .queryParam("current_weather", true)
                        .build())
                .retrieve()
                .bodyToMono(String.class);
    }

    public static void main(String[] args) {
        WeatherService service = new WeatherService();
        service.getCurrentWeather(39.9042, 116.4074)
                .subscribe(System.out::println);
    }
}

輸出示例: 

{
  "latitude": 39.9042,
  "longitude": 116.4074,
  "current_weather": {
    "temperature": 25.3,
    "windspeed": 12.5,
    "winddirection": 180
  }
}

總結(jié)

方法適用場景是否需要API密鑰推薦指數(shù)
Open-Meteo免費(fèi)、簡單、全球數(shù)據(jù)? 不需要????
OpenWeatherMap更詳細(xì)數(shù)據(jù),但需注冊? 需要???
Spring WebClientSpring Boot項(xiàng)目,異步支持視API而定????

到此這篇關(guān)于Java中獲取實(shí)時氣象信息的3種方法的文章就介紹到這了,更多相關(guān)Java獲取實(shí)時氣象信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JDK13的新特性之AppCDS詳解

    JDK13的新特性之AppCDS詳解

    AppCDS的全稱是Application Class-Data Sharing。主要是用來在不同的JVM中共享Class-Data信息,從而提升應(yīng)用程序的啟動速度。這篇文章主要介紹了JDK13的新特性:AppCDS詳解,需要的朋友可以參考下
    2020-05-05
  • 解決idea中yml文件圖標(biāo)問題及自動提示失效的情況

    解決idea中yml文件圖標(biāo)問題及自動提示失效的情況

    這篇文章主要介紹了解決idea中yml文件圖標(biāo)問題及自動提示失效的情況,具有很好的價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • CyclicBarrier線程同步共享變量底層原理示例解析

    CyclicBarrier線程同步共享變量底層原理示例解析

    這篇文章主要為大家介紹了CyclicBarrier線程同步共享變量底層原理示例解析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java實(shí)現(xiàn)最小生成樹算法詳解

    Java實(shí)現(xiàn)最小生成樹算法詳解

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)最小生成樹算法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-04-04
  • Java?中的?getDeclaredFields()使用與原理解析

    Java?中的?getDeclaredFields()使用與原理解析

    在Java反射機(jī)制中,getDeclaredFields()用于獲取類的所有字段,包括私有字段,通過反射,可以在運(yùn)行時動態(tài)地獲取類的信息并操作其成員,本文詳細(xì)介紹了getDeclaredFields()的使用方法、工作原理以及最佳實(shí)踐,涵蓋了反射的基本概念、使用場景和注意事項(xiàng),感興趣的朋友一起看看吧
    2025-01-01
  • Java實(shí)現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    Java實(shí)現(xiàn)解析zip壓縮包并獲取文件內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)頁面上傳一個源碼壓縮包,后端將壓縮包解壓,并獲取每個文件中的內(nèi)容,感興趣的可以動手嘗試一下
    2022-07-07
  • Java實(shí)現(xiàn)簡單的模板渲染

    Java實(shí)現(xiàn)簡單的模板渲染

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單的模板渲染的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法

    今天小編就為大家分享一篇關(guān)于通過反射注解批量插入數(shù)據(jù)到DB的實(shí)現(xiàn)方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 一步步教你JAVA如何優(yōu)化Elastic?Search

    一步步教你JAVA如何優(yōu)化Elastic?Search

    想要榨干Java操作Elasticsearch的所有性能潛力?本指南將一步步教你如何優(yōu)化Java與Elasticsearch的交互!從此,提升ES查詢速度、降低資源消耗不再是難題,趕快一起來探索Java?Elasticsearch優(yōu)化的秘訣吧!
    2024-01-01
  • 使用@Slf4j注解,log.info()無法使用問題

    使用@Slf4j注解,log.info()無法使用問題

    在使用Lombok的@Slf4j注解打印日志時遇到問題,通過降低Lombok版本(從1.18.x降至1.16.10)解決了問題
    2024-12-12

最新評論

祁门县| 阿拉善左旗| 沈阳市| 鄱阳县| 蓬安县| 万载县| 舟山市| 白水县| 页游| 罗江县| 长岛县| 开鲁县| 新邵县| 高平市| 荥经县| 巴东县| 延边| 平湖市| 嘉鱼县| 扎囊县| 太仆寺旗| 三亚市| 墨竹工卡县| 洛川县| 吴旗县| 富宁县| 谢通门县| 牟定县| 敦煌市| 灵寿县| 巍山| 甘孜| 灵武市| 汶川县| 屯留县| 金沙县| 安福县| 探索| 巫溪县| 乡宁县| 定日县|