YiKeYunApiUtils.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package org.springblade.common.utils;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import lombok.extern.slf4j.Slf4j;
  5. import java.io.BufferedReader;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.net.ConnectException;
  9. import java.net.URL;
  10. import java.nio.charset.StandardCharsets;
  11. import java.util.HashMap;
  12. import java.util.Map;
  13. @Slf4j
  14. public class YiKeYunApiUtils {
  15. private static final String API_YIKEYUN_APPID = "97543277";
  16. private static final String API_YIKEYUN_APPSECRET = "PXd7GE2j";
  17. public static Map<String, String> getTodayWeatherByAdcodeTry(String adcode) {
  18. for (int i = 0; i < 3; i++) {
  19. try {
  20. return getTodayWeatherByAdcode(adcode);
  21. } catch (IOException e) {
  22. // 重试
  23. try {
  24. Thread.sleep(500);
  25. } catch (InterruptedException ex) {
  26. e.printStackTrace();
  27. }
  28. } catch (Exception e) {
  29. e.printStackTrace();
  30. return null;
  31. }
  32. }
  33. return null;
  34. }
  35. /**
  36. * 根据城市adcode获取天气信息, 易客云 api
  37. * api doc <a href="http://tianqiapi.com/index/doc?version=day"></a>
  38. * @param adcode
  39. * @return
  40. */
  41. public static Map<String, String> getTodayWeatherByAdcode(String adcode) throws IOException {
  42. String getUrl = String.format("http://v1.yiketianqi.com/free/day?appid=%s&appsecret=%s&unescape=1&adcode=%s", API_YIKEYUN_APPID, API_YIKEYUN_APPSECRET, adcode);
  43. Map<String, String> map = new HashMap<>();
  44. URL url = new URL(getUrl);
  45. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  46. String res;
  47. StringBuilder sb = new StringBuilder();
  48. while ((res = in.readLine()) != null) {
  49. sb.append(res.trim());
  50. }
  51. log.info("获取当天天气 ======= sb.toString():" + sb);
  52. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  53. map.put("temp", jsonData.get("tem").toString());
  54. map.put("weather", jsonData.get("wea").toString());
  55. map.put("high", jsonData.get("tem_day").toString());
  56. map.put("low", jsonData.get("tem_night").toString());
  57. map.put("windLevel", jsonData.get("win_speed").toString());
  58. map.put("nums", jsonData.getInteger("nums").toString());
  59. return map;
  60. }
  61. /**
  62. * 根据城市id获取天气信息, 易客云 api
  63. * @param cityId
  64. * @return
  65. */
  66. public static Map<String, String> getTodayWeatherByCityId(String cityId) {
  67. String getUrl = String.format("http://v1.yiketianqi.com/free/day?appid=%s&appsecret=%s&unescape=1&cityid=%s", API_YIKEYUN_APPID, API_YIKEYUN_APPSECRET, cityId);
  68. Map<String, String> map = new HashMap<>();
  69. try {
  70. URL url = new URL(getUrl);
  71. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  72. String res;
  73. StringBuilder sb = new StringBuilder();
  74. while ((res = in.readLine()) != null) {
  75. sb.append(res.trim());
  76. }
  77. log.info("获取当天天气 ======= sb.toString():" + sb);
  78. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  79. map.put("temp", jsonData.get("tem").toString());
  80. map.put("weather", jsonData.get("wea").toString());
  81. map.put("high", jsonData.get("tem_day").toString());
  82. map.put("low", jsonData.get("tem_night").toString());
  83. map.put("windLevel", jsonData.get("win_speed").toString());
  84. } catch (IOException e) {
  85. e.printStackTrace();
  86. return null;
  87. }
  88. return map;
  89. }
  90. /**
  91. * 根据城市id获取天气信息, 易客云 api
  92. * @param cityId
  93. * @return
  94. */
  95. public static Map<String, Map<String, String>> getHistoryWeather(String cityId, Integer year, Integer month) {
  96. String getUrl = String.format("http://gfeljm.tianqiapi.com/free/history?appid=%s&appsecret=%s&cityid=%s&year=%d&month=%d", API_YIKEYUN_APPID, API_YIKEYUN_APPSECRET, cityId, year, month);
  97. Map<String, Map<String, String>> map = new HashMap<>();
  98. try {
  99. URL url = new URL(getUrl);
  100. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  101. String res;
  102. StringBuilder sb = new StringBuilder();
  103. while ((res = in.readLine()) != null) {
  104. sb.append(res.trim());
  105. }
  106. log.info("获取当天天气 ======= sb.toString():" + sb);
  107. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  108. map.put("nums", new HashMap<String, String>(){{
  109. put("nums", jsonData.getInteger("nums").toString());
  110. }});
  111. JSONArray list = jsonData.getJSONArray("list");
  112. list.forEach(item -> {
  113. Map<String, String> data = new HashMap<>();
  114. JSONObject itemObj = (JSONObject) item;
  115. data.put("weather", itemObj.getString("wea_day"));
  116. data.put("low", itemObj.getString("tem_night"));
  117. data.put("high", itemObj.getString("tem_day"));
  118. data.put("windLevel", itemObj.getString("win_speed"));
  119. String date = itemObj.getString("date");
  120. // 将 yyyy-MM-dd 转化为 yyyy年MM月dd日
  121. String dateFormat = date.replaceFirst("-", "年");
  122. dateFormat = dateFormat.replaceFirst("-", "月") + "日";
  123. map.put(dateFormat, data);
  124. });
  125. } catch (Exception e) {
  126. e.printStackTrace();
  127. return null;
  128. }
  129. return map;
  130. }
  131. /**
  132. * 易客 国内LBS逆地理编码服务 (区县级) 每日免费500次
  133. * 根据经纬度坐标解析地址详情
  134. */
  135. public static Map<String, String> getPosition(String LatitudeAndLongitude) throws IOException {
  136. String getUrl = String.format("http://apia.yikeapi.com/geocode?appid=%s&appsecret=%s&output=json&location=", API_YIKEYUN_APPID, API_YIKEYUN_APPSECRET, LatitudeAndLongitude);
  137. URL url = new URL(getUrl);
  138. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  139. String res;
  140. StringBuilder sb = new StringBuilder("");
  141. while ((res = in.readLine()) != null) {
  142. sb.append(res.trim());
  143. }
  144. log.info("获取经纬度坐标地址 ======= sb.toString():" + sb);
  145. Map<String, String> map = new HashMap<>();
  146. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  147. map.put("nums", jsonData.get("nums").toString());
  148. JSONObject regeocode = (JSONObject) jsonData.get("regeocode");
  149. JSONObject addressComponent = (JSONObject) regeocode.get("addressComponent");
  150. map.put("province", addressComponent.get("province").toString());
  151. map.put("city", addressComponent.get("city").toString());
  152. map.put("district", addressComponent.get("district").toString());
  153. map.put("adcode", addressComponent.get("adcode").toString());
  154. return map;
  155. }
  156. }