YiKeYunApiUtils.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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.URL;
  9. import java.nio.charset.StandardCharsets;
  10. import java.util.HashMap;
  11. import java.util.Map;
  12. @Slf4j
  13. public class YiKeYunApiUtils {
  14. private static final String API_YIKEYUN_APPID = "97543277";
  15. private static final String API_YIKEYUN_APPSECRET = "PXd7GE2j";
  16. /**
  17. * 根据城市adcode获取天气信息, 易客云 api
  18. * api doc <a href="http://tianqiapi.com/index/doc?version=day"></a>
  19. * @param adcode
  20. * @return
  21. */
  22. public static Map<String, String> getTodayWeatherByAdcode(String adcode) {
  23. 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);
  24. Map<String, String> map = new HashMap<>();
  25. try {
  26. URL url = new URL(getUrl);
  27. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  28. String res;
  29. StringBuilder sb = new StringBuilder();
  30. while ((res = in.readLine()) != null) {
  31. sb.append(res.trim());
  32. }
  33. log.info("获取当天天气 ======= sb.toString():" + sb);
  34. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  35. map.put("temp", jsonData.get("tem").toString());
  36. map.put("weather", jsonData.get("wea").toString());
  37. map.put("high", jsonData.get("tem_day").toString());
  38. map.put("low", jsonData.get("tem_night").toString());
  39. map.put("windLevel", jsonData.get("win_speed").toString());
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. return null;
  43. }
  44. return map;
  45. }
  46. /**
  47. * 根据城市id获取天气信息, 易客云 api
  48. * @param cityId
  49. * @return
  50. */
  51. public static Map<String, String> getTodayWeatherByCityId(String cityId) {
  52. 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);
  53. Map<String, String> map = new HashMap<>();
  54. try {
  55. URL url = new URL(getUrl);
  56. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  57. String res;
  58. StringBuilder sb = new StringBuilder();
  59. while ((res = in.readLine()) != null) {
  60. sb.append(res.trim());
  61. }
  62. log.info("获取当天天气 ======= sb.toString():" + sb);
  63. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  64. map.put("temp", jsonData.get("tem").toString());
  65. map.put("weather", jsonData.get("wea").toString());
  66. map.put("high", jsonData.get("tem_day").toString());
  67. map.put("low", jsonData.get("tem_night").toString());
  68. map.put("windLevel", jsonData.get("win_speed").toString());
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. return null;
  72. }
  73. return map;
  74. }
  75. /**
  76. * 根据城市id获取天气信息, 易客云 api
  77. * @param cityId
  78. * @return
  79. */
  80. public static Map<String, Map<String, String>> getHistoryWeather(String cityId, Integer year, Integer month) {
  81. 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);
  82. Map<String, Map<String, String>> map = new HashMap<>();
  83. try {
  84. URL url = new URL(getUrl);
  85. BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8));
  86. String res;
  87. StringBuilder sb = new StringBuilder();
  88. while ((res = in.readLine()) != null) {
  89. sb.append(res.trim());
  90. }
  91. log.info("获取当天天气 ======= sb.toString():" + sb);
  92. JSONObject jsonData = JSONObject.parseObject(sb.toString());
  93. JSONArray list = jsonData.getJSONArray("list");
  94. list.forEach(item -> {
  95. Map<String, String> data = new HashMap<>();
  96. JSONObject itemObj = (JSONObject) item;
  97. data.put("weather", itemObj.getString("wea_day"));
  98. data.put("low", itemObj.getString("tem_night"));
  99. data.put("high", itemObj.getString("tem_day"));
  100. data.put("windLevel", itemObj.getString("win_speed"));
  101. String date = itemObj.getString("date");
  102. // 将 yyyy-MM-dd 转化为 yyyy年MM月dd日
  103. String dateFormat = date.replace("-", "年");
  104. dateFormat = dateFormat.replace("-", "月") + "日";
  105. map.put(dateFormat, data);
  106. });
  107. } catch (IOException e) {
  108. e.printStackTrace();
  109. return null;
  110. }
  111. return map;
  112. }
  113. }