前言:天气预报第三方免费Api整理
高德
官方文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo
功能:
优点是个人认证用户有每日30万的使用额度
百度
官方文档:https://lbs.baidu.com/faq/api?title=webapi/weather/base
功能:
和风天气
官方文档:https://dev.qweather.com/docs/api/weather/weather-hourly-forecast/
功能:
和风天气的Web API默认采用Gzip进行压缩,这将极大的减少网络流量,加快请求,同时也是需要我们处理一下的。
注意:支持24小时天气预报,但他的24小时不包含当前时间,可以从高德天气预报获取实时天气预报,两者拼接起来,并移除和风天气返回的最后一位,保持24小时
天气网
网址:http://tqw9.com/
接口地址:http://tqw9.com/weather/liaoyuan_xian_40/
详解:http://tqw9.com/weather/ 为网址 liaoyuan为城市的英文名字 xian 查询城市的拼音 后面的数字为查询的天数
没有调用接口 返回的是html 我们将对应的html 通过程序解析出需要的内容
功能:
- 未来5天,10天,15天,20天,25天,30天,35天,40天的天气预报
我们可以直接查询40天的天气预报,然后从数据列表中拿到我们需要天数的天气预报
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| public String getWeatherReportDaysByCityUrl(String cityUrl) { String url = "http://tqw9.com/weather/" + cityUrl + "_40/"; List<DayWeatherVO> ModelVOS = new ArrayList<>(); try { Document doc = Jsoup.connect(url).get(); Elements leftBoxes = doc.select("body"); if (leftBoxes.size() >= 1) { Element leftBox = leftBoxes.first(); Elements panels = leftBox.select(".panel"); if (panels.size() >= 2) { Element secondPanel = panels.get(1); Elements rows = secondPanel.select("table#yubao tbody tr"); for (Element row : rows) { Elements columns = row.select("td"); String dateOne = columns.get(0).text(); String weatherForecast = columns.get(2).text(); String temperature = columns.get(3).text(); String windDirection = columns.get(4).text(); String windForce = columns.get(5).text(); DayWeatherVO modelVO = new DayWeatherVO(); SimpleDateFormat originalFormat = new SimpleDateFormat("MM月dd日 E"); try { Date date = originalFormat.parse(dateOne); Calendar currentCalendar = Calendar.getInstance(); int currentYear = currentCalendar.get(Calendar.YEAR); Calendar targetCalendar = Calendar.getInstance(); targetCalendar.setTime(date); targetCalendar.set(Calendar.YEAR, currentYear); SimpleDateFormat targetDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = targetDateFormat.format(targetCalendar.getTime()); modelVO.setDate(formattedDate); SimpleDateFormat targetDayFormat = new SimpleDateFormat("E"); String formattedDay = targetDayFormat.format(date); modelVO.setWeek(formattedDay); } catch (ParseException e) { e.printStackTrace(); } String[] tempArray = temperature.split("℃~"); String minTempStr = tempArray[0]; String maxTempStr = tempArray[1]; modelVO.setTemDay(minTempStr); modelVO.setWeatherForecast(weatherForecast); modelVO.setTemNight(maxTempStr.replaceAll("℃", "")); modelVO.setWin(windDirection); modelVO.setWinSpeed(convertToSymbol(windForce)); ModelVOS.add(modelVO); } } } return JSON.toJSONString(ModelVOS); } catch (IOException e) { e.printStackTrace(); } return null; }
public static String convertToSymbol(String input) { String symbol = ""; String[] parts = input.split("\\d+"); if (parts.length > 1) { String comparison = parts[0].trim(); String number = input.replace(comparison, "").replaceAll("\\D", "").trim(); if ("小于".equals(comparison)) { symbol = "<" + number; } else if ("大于".equals(comparison)) { symbol = ">" + number; } } return symbol; }
|