java获取天气信息

java获取天气信息

  • 注册后获取API Key
java 复制代码
https://www.visualcrossing.com/
  • 引入依赖
java 复制代码
<dependencies>
    <!-- HTTP 请求 -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>

    <!-- CSV 解析 -->
    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>5.5.2</version>
    </dependency>

    <!-- Excel 生成 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.2</version>
    </dependency>
</dependencies>
  • demo
java 复制代码
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;

import com.opencsv.CSVReader;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class RainfallFetcher {
    public static void main(String[] args) throws Exception {
        String apiKey = "RM3T8MSZBZL4H6E7TAXQYZ6MW";
        // 使用坐标:纬度36.8556,经度114.5030,逗号必须URL编码成%2C
        String location = "36.8556%2C114.5030";

        String startDate = "2024-06-16";
        String endDate = "2025-06-16";

        String urlStr = String.format(
            "https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline/%s/%s/%s?unitGroup=metric&elements=datetime,precip&include=days&key=%s&contentType=csv",
            location, startDate, endDate, apiKey);

        System.out.println("请求URL: " + urlStr);

        try (
            InputStream inputStream = new URL(urlStr).openStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
            CSVReader csvReader = new CSVReader(inputStreamReader);
            Workbook workbook = new XSSFWorkbook();
            FileOutputStream fileOut = new FileOutputStream("Shahe_Rain_Over_5mm.xlsx")
        ) {
            String[] header = csvReader.readNext();  // 读取表头 ["datetime", "precip"]
            Sheet sheet = workbook.createSheet("降雨≥5mm");
            Row headerRow = sheet.createRow(0);
            for (int i = 0; i < header.length; i++) {
                headerRow.createCell(i).setCellValue(header[i]);
            }

            int rowIndex = 1;
            String[] line;
            while ((line = csvReader.readNext()) != null) {
                double precip = Double.parseDouble(line[1]);
                if (precip >= 5.0) {
                    Row row = sheet.createRow(rowIndex++);
                    row.createCell(0).setCellValue(line[0]);
                    row.createCell(1).setCellValue(precip);
                }
            }
            workbook.write(fileOut);
            System.out.println("导出完成,共找到 " + (rowIndex - 1) + " 天降雨≥5mm。");
        }
    }
}

通过java代码可以直接获取到csv文件。不过我使用的是将打印出来的完整请求地址,放入到postman中,使用postman来进行调用获取返回值

相关推荐
d***95628 分钟前
springboot接入deepseek深度求索 java
java·spring boot·后端
CoderYanger27 分钟前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
洞窝技术35 分钟前
Redis 4.0 升级至 5.0 实施手册
java·redis
无代码专家1 小时前
设备巡检数字化解决方案:构建高效闭环管理体系
java·大数据·人工智能
tanxiaomi1 小时前
Redisson分布式锁 和 乐观锁的使用场景
java·分布式·mysql·面试
零匠学堂20251 小时前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
小杨快跑~1 小时前
从装饰者到桥接再到工厂:模式组合的艺术
java·开发语言·设计模式
饕餮争锋1 小时前
Spring内置的Bean作用域介绍
java·后端·spring
却话巴山夜雨时i1 小时前
394. 字符串解码【中等】
java·数据结构·算法·leetcode
张人大 Renda Zhang2 小时前
Java 虚拟线程 Virtual Thread:让“每请求一线程”在高并发时代复活
java·jvm·后端·spring·架构·web·虚拟线程