Java 基于百度 API 实现海外城市实时天气获取
海外天气数据获取面临国内接口覆盖不足及商业成本高痛点。本方案基于百度地图开放平台海外天气 API,采用 Java 原生开发构建轻量工具类。支持通过海外城市行政区划编码和经纬度坐标两种模式检索实时天气、预报及预警信息。方案无需额外依赖,兼容 SpringBoot 等项目,适用于物流、文旅及物联网监控等场景,有效解决海外气象数据集成难题。

海外天气数据获取面临国内接口覆盖不足及商业成本高痛点。本方案基于百度地图开放平台海外天气 API,采用 Java 原生开发构建轻量工具类。支持通过海外城市行政区划编码和经纬度坐标两种模式检索实时天气、预报及预警信息。方案无需额外依赖,兼容 SpringBoot 等项目,适用于物流、文旅及物联网监控等场景,有效解决海外气象数据集成难题。

随着互联网全球化、跨境业务常态化以及 GIS 地理信息系统的广泛普及,海外城市实时气象数据成为众多后端业务系统、物联网平台、跨境服务应用的核心基础数据支撑。在跨境文旅与出行服务领域,海外出行 APP、国际机票酒店预订平台需要实时展示目的地城市的天气状况;在国际物流与跨境电商场景中,物流调度系统、海外仓储管理平台需要依托海外天气数据预判运输延误;在 GIS 地理信息与物联网行业,海外站点监控、跨境水利监测等业务离不开精准的经纬度对应天气数据。

对于 Java 后端开发者而言,快速搭建一套轻量、稳定的海外天气获取服务,既能满足业务刚需,也能完善系统的基础数据能力。
尽管国内天气接口资源丰富,但放眼海外气象数据获取领域,市面上的服务普遍存在诸多短板:
针对以上痛点,本方案选择百度地图开放平台海外天气 API 作为数据来源,结合 Java 原生开发,打造一套零额外依赖、轻量易集成、支持双模式查询的海外天气获取工具。
百度海外天气 API 属于百度地图开放平台,采用 HTTPS 协议,支持 GET 请求方式。核心支持海外城市行政区编码和经纬度坐标两种查询方式。
| 参数名 | 数据类型 | 必选 | 默认值 | 描述信息 |
|---|---|---|---|---|
| district_id | string | 否 | 无 | 海外城市行政区划编码,和 location 二选一 |
| location | double | 否 | 无 | 经纬度,经度在前纬度在后,逗号分隔。支持类型:bd09mc/bd09ll/wgs84/gcj02 |
| ak | string | 是 | 无 | 开发者密钥,可在 API 控制台申请获得 |
| data_type | string | 是 | 无 | 请求数据类型。有 now/fc/index/alert/fc_hour/all |
| output | string | 否 | json | 返回格式,目前支持 json/xml |
| language | string | 否 | cn | 语言类型。cn/en,分别表示中文和英文 |
| coordtype | string | 否 | wgs84 | 支持类型:wgs84/bd09ll/bd09mc/gcj02 |
注意:如果 district_id 和 location 同时传,默认以 district_id 为准。
接口请求成功后返回标准 JSON 格式数据,关键参数分为三大模块:
为了简化 HTTP 请求流程,避免引入 HttpClient、OkHttp 等第三方依赖,本文使用 UniHttp 工具类。核心代码如下:
package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.HttpApi;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
/**
* -百度海外天气服务
*/
@HttpApi(url = "https://api.map.baidu.com/weather_abroad/v1")
public interface BaiduWeatherAbroadService {
/**
* -通过行政区划代码查询实时天气信息及未来 7 天天气预报。
* @param district_id 海外城市行政区划编码
* @param location 经纬度,经度在前纬度在后,逗号分隔
* @param ak 开发者密钥
* @param data_type 请求数据类型
* @param output 返回格式
* @param language 语言类型
* @param coordtype 坐标类型
* @return
*/
@GetHttpInterface("/")
public HttpResponse<String> query(@QueryPar("district_id") String district_id,
@QueryPar("location") String location,
@QueryPar("ak") String ak,
@QueryPar("data_type") String data_type,
@QueryPar("output") String output,
@QueryPar("language") String language,
@QueryPar("coordtype") String coordtype);
}
封装专属天气查询工具类,整合两种查询方式,将 AK 和接口地址抽离为演示示例。这里使用 Junit 的测试集成方式进行演示。
package com.yelang.project.unihttp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.google.gson.Gson;
import com.yelang.project.meteorology.domain.BdWeatherDTO;
import com.yelang.project.meteorology.domain.WeatherInfoDTO;
import com.yelang.project.thridinterface.BaiduWeatherAbroadService;
/**
* - 百度海外天气测试类
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaiduWeatherAbroadServiceCase {
private static final String BAIDU_DEFAULT_AK = "yourak";
private static final String DATA_TYPE = "all";
private static final String OUTPUT = "json";
private static final String LANGUAGE = "cn";
private static final String COORDTYPE = "wgs84";
@Autowired
private BaiduWeatherAbroadService bdWeatherAbroadService;
/**
* - 根据行政区代号查询外国天气
*/
@Test
public void queryBydistrictId() {
String district_id = "IRN10001001001"; // 德黑兰
HttpResponse<String> result = bdWeatherAbroadService.query(district_id, null, BAIDU_DEFAULT_AK, DATA_TYPE, OUTPUT, LANGUAGE, COORDTYPE);
System.out.println(result.getBodyResult());
Gson gson = new Gson();
BdWeatherDTO bdWeatherInfo = gson.fromJson(result.getBodyResult(), BdWeatherDTO.class);
WeatherInfoDTO bdResult = bdWeatherInfo.getResult();
System.out.println(bdResult.getWeatherNow());
System.out.println(bdResult.getAlerts());
System.out.println(bdResult.getIndexes());
System.out.println(bdResult.getForecasts());
System.out.println(bdResult.getForecastHours());
}
/**
* - 根据经纬度查外国天气
*/
@Test
public void queryLocation() {
String location = "35.03705894,31.73021175"; // 以色列
HttpResponse<String> result = bdWeatherAbroadService.query(null, location, BAIDU_DEFAULT_AK, DATA_TYPE, OUTPUT, LANGUAGE, COORDTYPE);
System.out.println(result.getBodyResult());
Gson gson = new Gson();
BdWeatherDTO bdWeatherInfo = gson.fromJson(result.getBodyResult(), BdWeatherDTO.class);
WeatherInfoDTO bdResult = bdWeatherInfo.getResult();
System.out.println(bdResult.getWeatherNow());
System.out.println(bdResult.getAlerts());
System.out.println(bdResult.getIndexes());
System.out.println(bdResult.getForecasts());
System.out.println(bdResult.getForecastHours());
}
}
该查询方式适合固定海外城市、业务系统配置化查询场景。海外城市的行政区划 id 百度提供了完整的列表,大家下载到本地即可,这里以伊朗首都德黑兰为例。

测试效果:传入德黑兰对应行政区编码:IRN10001001001,控制台成功返回德黑兰城市名称、实时气温、湿度、风向、天气状况、数据更新时间等完整信息。

该模式是 GIS 地理信息系统、全球点位监控场景的核心适配方式,无需提前知晓城市名称,只需传入目标点位的经纬度坐标。

测试效果:传入耶路撒冷经纬度坐标(35.03705894,31.73021175),接口快速定位对应城市,返回完整气象数据,完美适配地图点位气象叠加、跨境设备监控等专业化需求,解决了传统接口不支持 GIS 坐标查询的痛点,实用性强。

以上为方案主要内容。本篇实战文章围绕 Java 后端开发者的实际业务痛点,完整落地了基于百度天气 API 的海外城市实时天气获取功能。
整体而言,这套 Java 海外天气获取方案,平衡了开发成本、接入难度和实用性,精准解决了跨境业务、GIS 系统中海外气象数据获取的核心痛点。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online