package com.tobacco.project.mvc.common;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.zip.GZIPInputStream;
/**
* @date : 2023/12/15 14:05
*/
public class WeatherData {
//高德地图开发服务 https://console.amap.com/dev/index
public static String getWeatherByGaoDe(){
String targetUrl="https://restapi.amap.com/v3/weather/weatherInfo";
String city = "查询地址编码";
String key = "网站注册,使用自己的key";
try {
// 编码参数值
String encodedParam1 = URLEncoder.encode(city, StandardCharsets.UTF_8.toString());
String encodedParam2 = URLEncoder.encode(key, StandardCharsets.UTF_8.toString());
// 构建带有参数的URL
String queryString = "?city=" + encodedParam1 + "&key=" + encodedParam2;
URL url = new URL(targetUrl + queryString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
// 检查响应编码是否为Gzip
String encoding = connection.getContentEncoding();
InputStream inputStream = connection.getInputStream();
Reader reader;
if ("gzip".equalsIgnoreCase(encoding)) {
// 解压缩Gzip响应
inputStream = new GZIPInputStream(inputStream);
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
} else {
reader = new BufferedReader(new InputStreamReader(inputStream));
}
// 读取响应数据并解析JSON
StringBuilder content = new StringBuilder();
char[] buffer = new char[1024];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {
content.append(buffer, 0, bytesRead);
}
reader.close();
// 解析JSON数据
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(content.toString());
// 在这里可以对JSON数据进行处理或访问特定字段
return rootNode.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//和风天气开发服务 https://dev.qweather.com/
public static String getWeatherByHeFeng() {
String targetUrl = "https://devapi.qweather.com/v7/weather/now";
String location = "查询地址编码";
String key = "网站注册,使用自己的key";
try {
// 编码参数值
String encodedParam1 = URLEncoder.encode(location, StandardCharsets.UTF_8.toString());
String encodedParam2 = URLEncoder.encode(key, StandardCharsets.UTF_8.toString());
// 构建带有参数的URL
String queryString = "?location=" + encodedParam1 + "&key=" + encodedParam2;
URL url = new URL(targetUrl + queryString);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setDoInput(true);
connection.connect();
// 检查响应编码是否为Gzip
String encoding = connection.getContentEncoding();
InputStream inputStream = connection.getInputStream();
Reader reader;
if ("gzip".equalsIgnoreCase(encoding)) {
// 解压缩Gzip响应
inputStream = new GZIPInputStream(inputStream);
reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
} else {
reader = new BufferedReader(new InputStreamReader(inputStream));
}
// 读取响应数据并解析JSON
StringBuilder content = new StringBuilder();
char[] buffer = new char[1024];
int bytesRead;
while ((bytesRead = reader.read(buffer)) != -1) {
content.append(buffer, 0, bytesRead);
}
reader.close();
// 解析JSON数据
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(content.toString());
// 在这里可以对JSON数据进行处理或访问特定字段
return rootNode.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
天气预报数据获取java代码(风和天气、高德地图)
在IT行业中,获取实时或历史天气预报数据是许多应用程序的核心需求,例如智能家居系统、交通管理、农业分析等。本主题将详细介绍如何使用Java语言来获取天气预报数据,特别是通过"风和天气"以及"高德地图"这两个服务提供商。本文将深入探讨相关技术细节和步骤,以便开发者可以有效地集成到自己的项目中。 我们要了解“风和天气”和“高德地图”的API服务。"风和天气"是一家提供全球气象数据的公司,提供了丰富的API接口供开发者调用,包括实时天气、历史天气、空气质量等。而"高德地图"作为知名的地图服务提供商,也提供了天气查询功能,结合其强大的地理定位能力,能够提供精准的地点天气信息。 1. **使用Java调用API** 在Java中,我们通常使用HTTP客户端库如Apache HttpClient或OkHttp来发送HTTP请求。获取天气预报数据的过程通常是向API提供一个特定的URL,该URL包含了你的API密钥和所需参数。例如,向"风和天气"API发送GET请求,需要在URL中附带地区编码和API密钥。 2. **处理API响应** API返回的数据通常为JSON格式,我们需要使用JSON解析库如Jackson或Gson来解析数据。解析后的数据可以被转化为Java对象,方便进一步处理和分析。 3. **地区编码** 提供的Excel文件包含了各个地区的编码,这在调用API时非常关键。你需要读取这个Excel文件,使用Java的Apache POI库或者JExcelApi来解析,获取到对应地区的编码,然后用这些编码作为查询参数。 4. **高德地图API集成** 高德地图的天气API可能需要用户的位置信息,因此可能需要使用其地图API来获取经纬度,然后根据这些坐标查询天气。这个过程可能涉及到地图的逆地理编码服务,也需要处理API调用的授权和限制。 5. **数据存储与分析** 获取到的天气预报数据可以存储在数据库中,如MySQL或MongoDB,便于后续的数据分析。Java有丰富的数据库操作库,如JDBC,MyBatis或Hibernate,可以帮助我们轻松地进行数据存储。 6. **异常处理和错误恢复** 在实际开发中,需要考虑网络异常、API调用超时、API限速等问题。通过使用try-catch语句和重试机制,可以提高程序的健壮性。 7. **安全性与合规性** 在使用第三方API时,确保遵循其使用条款和隐私政策,不要滥用API,以免导致账号被封禁。同时,对API密钥进行妥善管理,避免暴露在源代码中。 8. **测试与部署** 对代码进行单元测试和集成测试,确保功能的正确性。部署时,可以考虑使用Docker容器化技术,以简化部署流程并保证环境一致性。 以上是获取天气预报数据的基本步骤和相关知识点。通过掌握这些知识,开发者可以创建一个稳定、高效的天气预报数据获取系统,无论是用于个人项目还是商业应用。在实际开发过程中,还要不断学习和适应新的技术和最佳实践,以提升代码质量和用户体验。
- 1
- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 粉丝: 0
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 橙色大气风格的时尚男女服装商城网站源码下载.zip
- 橙色大气风格的水果美食餐饮网站模板.zip
- PSO-Transformer分类 Matlab代码 基于粒子群优化算法(PSO)优化Transformer的数据分类预测(可以更为单、多变量时序预测 回归,前私我),Matlab代码,可直接运行,适
- 基于ssm的网上系统调查的开发源码(java毕业设计完整源码).zip
- git开源项目hospital information system(医疗信息就诊系统)
- 马铃薯清洗去皮一体机sw20可编辑全套技术资料100%好用.zip
- 基于ssm的壁纸网站设计与实现源码(java毕业设计完整源码+LW).zip
- MATLAB 雷达信号处理程序源码及仿真代码 仿真: 一、调频连续波雷达信号仿真 二、毫米波雷达模型在环仿真实例 三、几种典型干扰对脉压雷达影响的仿真 四、雷达 CFAR 恒虚警检测仿真 五、雷达
- 基于ssm的社区流浪动物救助领养系统的设计与开发源码(java毕业设计完整源码+LW).zip
- HelloWorld.vue
- 基于ssm的中文学习系统的设计与实现源码(java毕业设计完整源码+LW).zip
- B04.七自由度车辆动力学模型验证(魔术轮胎模型,B03基础上建模) 1.软件: MATLAB 2018以上;CarSim 2020.0 2.介绍: 基于魔术轮胎模型和车身动力学公式,搭建7DOF车辆
- 基于ssm的学生宿舍管理系统设计与实现源码(java毕业设计完整源码+LW).zip
- 独家CPO-Transformer-LSTM分类 Matlab代码 基于冠豪猪优化算法优化Transformer结合长短期记忆神经网络(LSTM)的数据分类预测(可以更为单、多变量时序预测 回归
- 龙门桁架机械手搬运拆袋sw20可编辑全套技术资料100%好用.zip
- 《Python程序设计》项目实战之网络爬虫.ppt