高德天气服务api

时间:2025-03-10 10:42:16
@Slf4j public class AmapUtil { private static final RestTemplate REST_TEMPLATE = new RestTemplate(); private static final String AMAP_KEY; private static final String INFO = "OK"; private static final String ADCODE = "adcode"; private static final String INF = "info"; private static final Integer ZERO = 0; private static final String IP_URL = "/v3/ip"; private static final String GEO_URL = "/v3/geocode/geo"; private static final String WEATHER_URL = "/v3/weather/weatherInfo"; static { Map<String, Object> commonYml = LoadYml.getCommonYml(""); log.info("加载amap配置 {}", DmMapperUtil.writeValueAsString(commonYml)); assert commonYml != null; AMAP_KEY = String.valueOf(commonYml.get("")); } /** * 通过ip获取城市代码 * * @param ip ip地址 * @return 返回值 */ @SuppressWarnings("rawtypes") private static String getAdcodeByIp(String ip) { String format = String.format("%s?key=%s&ip=%s", IP_URL, AMAP_KEY, ip); log.info("高德获取adcode;请求url:{},请求人:{}",format, StpUtil.getLoginIdAsLong()); ResponseEntity<String> responseEntity = REST_TEMPLATE.getForEntity(format, String.class); String body = responseEntity.getBody(); if (responseEntity.getStatusCode().isError()) { log.error("高德通过ip获取adcode时的返回值:{}",responseEntity); throw new BizException(ResultCode.WEATHER_IPLOCATIONADCODE_FAIL); } Map map = DmMapperUtil.readValue(body, Map.class); if (map.get(ADCODE) instanceof List) { throw new BizException(ResultCode.WEATHER_IPLOCATIONADCODE_FAIL); } return (String) map.get(ADCODE); } /** * 通过ip获取城市代码 * 通过ip获取城市天气信息 * * @param ip ip地址 * @param extensions 实况天气或者预报天气 * @return 返回值 */ @SuppressWarnings("rawtypes") public static Map getWeatherByIp(String ip ,String extensions) { String format = String.format("%s?key=%s&city=%s&extensions=%s", WEATHER_URL, AMAP_KEY, getAdcodeByIp(ip),extensions); log.info("高德获取天气信息;请求url:{},请求人:{}",format, StpUtil.getLoginIdAsLong()); ResponseEntity<String> responseEntity = REST_TEMPLATE.getForEntity(format, String.class); if (responseEntity.getStatusCode().isError()) { log.error("高德通过ip获取天气时的返回值:{}",responseEntity); throw new BizException(ResultCode.WEATHER_IPLOCATIONADCODE_FAIL); } String body = responseEntity.getBody(); return DmMapperUtil.readValue(body, Map.class); } /** * 通过地址名称和城市获取区域编码 * * @param address 结构化地址信息:省份+城市+区县+城镇+乡村+街道 * @param city 城市 * @return 返回值 */ @SuppressWarnings("all") public static String getAdcodeByAddress(String address, String city) { String format = String.format("%s?key=%s&address=%s&city=%s", GEO_URL, AMAP_KEY, address,city); log.info("高德获取adcode;请求url:{},请求人:{}",format, StpUtil.getLoginIdAsLong()); ResponseEntity<String> responseEntity = REST_TEMPLATE.getForEntity(format, String.class); if (responseEntity.getStatusCode().isError()) { log.error("高德通过地址获取adcode时的返回值:{}",responseEntity); throw new BizException(ResultCode.WEATHER_GEOLOCATIONADCODE_FAIL); } String body = responseEntity.getBody(); Map map = DmMapperUtil.readValue(body, Map.class); if (!map.get(INF).equals(INFO)) { throw new BizException(ResultCode.WEATHER_GEOLOCATIONADCODE_FAIL); } List<Map> geocodes = (List<Map>) map.get("geocodes"); return geocodes.get(ZERO).get(ADCODE).toString(); } /** * 通过地址名称和城市获取区域编码 * 通过地址名称和城市获取区域天气信息 * * @param address 结构化地址信息:省份+城市+区县+城镇+乡村+街道 * @param city 城市 * @param extensions 实况天气或者预报天气 * @return 返回值 */ @SuppressWarnings("rawtypes") public static Map getWeatherByAddress(String address, String city,String extensions) { String format = String.format("%s?key=%s&city=%s&extensions=%s", WEATHER_URL, AMAP_KEY, getAdcodeByAddress(address,city),extensions); log.info("高德获取天气信息;请求url:{},请求人:{}",format, StpUtil.getLoginIdAsLong()); ResponseEntity<String> responseEntity = REST_TEMPLATE.getForEntity(format, String.class); if (responseEntity.getStatusCode().isError()) { throw new BizException(ResultCode.WEATHER_GEOLOCATIONADCODE_FAIL); } String body = responseEntity.getBody(); return DmMapperUtil.readValue(body,Map.class); }

相关文章