admin管理员组文章数量:1794759
Java获取天气情况的方式
说明
经过搜集和参考网上的相关资料,Java获取天气情况数据的通用步骤如下:
- 调用天气接口api;
- 解析返回的XML 或 JSON数据;
这里我并不去用代码实现一个Demo,而是记录一下思路,以后有需求便可以不需要再去调研了。
调用天气接口 API调用方式,无非就是根据城市名称或者城市代码获取到接口返回的XML 或 JSON数据,以下几种天气接口方式可以参考使用。
方式一:wthrcdn接口
根据城市名称获取天气信:wthrcdn.etouch/weather_mini?city=城市中文名 根据城市ID获取天气信:wthrcdn.etouch/weather_mini?citykey=城市code 获取城市列表信:yiyingcanfeng.github.io/data/2019-03-13-cn_weather_citylist.json example:wthrcdn.etouch/weather_mini?city=合肥
这种方式返回的是JSON格式的数据,状态为1000代表接口调用成功!
{ "data":{ "yesterday":{ "date":"21日星期一", "high":"高温 10℃", "fx":"南风", "low":"低温 -4℃", "fl":"<![CDATA[1级]]>", "type":"霾" }, "city":"合肥", "forecast":[ { "date":"22日星期二", "high":"高温 10℃", "fengli":"<![CDATA[2级]]>", "low":"低温 -1℃", "fengxiang":"东南风", "type":"多云" }, { "date":"23日星期三", "high":"高温 10℃", "fengli":"<![CDATA[2级]]>", "low":"低温 -1℃", "fengxiang":"西北风", "type":"阴" }, { "date":"24日星期四", "high":"高温 10℃", "fengli":"<![CDATA[2级]]>", "low":"低温 -1℃", "fengxiang":"北风", "type":"多云" }, { "date":"25日星期五", "high":"高温 10℃", "fengli":"<![CDATA[3级]]>", "low":"低温 1℃", "fengxiang":"东风", "type":"多云" }, { "date":"26日星期六", "high":"高温 9℃", "fengli":"<![CDATA[2级]]>", "low":"低温 0℃", "fengxiang":"东风", "type":"阴" } ], "ganmao":"感冒高发期,尽量避免外出,外出戴口罩防护。", "wendu":"-1" }, "status":1000, "desc":"OK" }方式二:城市天气预报WEB服务接口(www.webxml/zh_cn/index.aspx)
天气信API:ws.webxml/WebServices/WeatherWS.asmx 具体使用方式参考:接口示例、接口帮助文档、服务说明等,这种方式返回的是XML格式的数据。
example:
获得中国省份、直辖市、地区和与之对应的ID:ws.webxml/WebServices/WeatherWS.asmx/getRegionProvince 根据上面的ID获得支持的城市/地区名称和与之对应的ID:ws.webxml/WebServices/WeatherWS.asmx?op=getSupportCityDataset 获得支持的城市/地区名称和与之对应的ID:ws.webxml/WebServices/WeatherWS.asmx?op=getSupportCityString
获得天气预报数据:ws.webxml/WebServices/WeatherWS.asmx?op=getWeather
以武汉为例:
<?xml version="1.0" encoding="UTF-8"?> - <ArrayOfString xmlns="WebXml/" xmlns:xsd="www.w3/2001/XMLSchema" xmlns:xsi="www.w3/2001/XMLSchema-instance"> <string>湖北</string> <string>武汉</string> <string>57494</string> <string>57494.jpg</string> <string>2020-12-22 11:32:08</string> <string>-3℃/5℃</string> <string>12月22日 多云转晴</string> <string>无持续风向微风</string> <string>1.gif</string> <string>1.gif</string> <string>今日天气实况:气温:3℃;风向/风力:西南风 3级;湿度:50%;空气质量:较差;紫外线强度:中等</string> <string>穿衣指数:天气较冷,建议着冬服。 感冒指数:户外寒冷,避免感冒。 运动指数:天气较好,无雨水困扰,但考虑气温较低,适当运动。 洗车指数:较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。 晾晒指数:天气不错,适宜晾晒。赶紧把久未见阳光的衣物搬出来吸收一下太阳的味道吧! 旅游指数:多云,同时有微风相伴,但温度较低,天气冷,请若外出请注意防寒保暖。 路况指数:天气较好,路面比较干燥,路况较好。 空气污染指数:气象条件较不利于空气污染物稀释、扩散和清除,请适当减少室外活动时间。 紫外线指数:属中等强度紫外线辐射天气,外出时建议涂擦SPF高于15、PA+的防晒护肤品,戴帽子、太阳镜。</string> <string>0℃/9℃</string> <string>12月23日 多云</string> <string>无持续风向微风</string> <string>2.gif</string> <string>7.gif</string> <string>-1℃/5℃</string> <string>12月24日 多云转小雨</string> <string>无持续风向微风</string> <string>9.gif</string> <string>7.gif</string> <string>武汉市位于江汉平原东部,长江中游与长江、汉水交汇处。东经113°41′-115°05′,北纬29°58′-31°22′。武汉市地理位置优越,长江及其最大支流汉江交汇于此,将武汉市区天然分成汉口、汉阳和武昌三镇,武汉是我国水陆交通枢纽,控长江中游之咽喉,扼南北交通之要冲,素有“九省通衢”之称,现全市货运吞吐量达亿吨以上。优越的地理位置,成为历代兵家争夺的战略要地。三国时,武汉东湖附近曾是刘备、孙权、曹操进行军事、政治活动的场所,现在留下的有刘备郊天台、吴王庙、曹操庙、洪山宝塔等古建筑。武汉现已发展为中国中部地区工业、金融、商业、科学、文化教育中心。武汉市属亚热带湿润季风气候,雨量充沛、日照充足,四季分明。总体气候环境良好,近几年30年来,年均降雨量1269毫米,且多集中在6-8月。年均气温15.8℃-17.5℃,年无霜期一般为211天-272天,年日照总时数1810小时-2100小时。景观:武当山、长江三峡、神农架等。</string> </ArrayOfString>方式三:中国天气网接口(www.weather/)
根据城市ID获取天气信:www.weather/data/sk/城市code.html example:www.weather/data/sk/101220101.html
这种方式返回的是JSON格式的数据,获取到的天气状况数据比较少,不推荐使用!
{ "weatherinfo":{ "city":"合肥", "cityid":"101220101", "temp":"20.5", "WD":"东北风", "WS":"小于3级", "SD":"98%", "AP":"1001.8hPa", "njd":"暂无实况", "WSE":"<3", "time":"17:50", "sm":"3.6", "isRadar":"1", "Radar":"JC_RADAR_AZ9551_JB" } }方式四:sojson(www.sojson/blog/305.html)
这个网站很良心,关于如何调用、遇到的问题等都有详细的说明和答疑; 这种方式和第一种本质是一样的,使用的CDN缓存更新天气数据; 方式五:高德开放平台天气查询接口(lbs.amap/api/webservice/guide/api/weatherinfo/)
天气查询是一个简单的HTTP接口,根据用户输入的adcode,查询目标区域当前/未来的天气情况; 使用开放平台的API需要申请一个Key(申请”web服务 API”的密钥); 天气查询API服务地址、请求参数、返回数据结构介绍的很清楚。 example:restapi.amap/v3/weather/weatherInfo?city=110101&key=<用户key>
方式六:其他开放平台天气查询接口
如百度地图开放平台:lbsyun.baidu/index.php?title=car/api/weather
解析返回的XML 或 JSON数据的方式1、如果使用的是SpringBoot,借助restTemplate调用REST风格的API接口:(restTemplate封装了HttpClient并进行http通信)
String weatherUrl = "restapi.amap/v3/weather/weatherInfo?city=110101&key=自己的key"; // restTemplate请求目标url并得到响应内容 ResponseEntity<String> weatherEntity = restTemplate.getForEntity(weatherUrl, String.class); // 响应的正文内容 String weatherBody = weatherEntity.getBody(); // 转JSONObject JSONObject weatherObject = JSONObject.parseObject(weatherBody);2、也可以使用java包下的URL、及IO流进行http通信和对象的反序列化。
3、也可以使用HttpClient对象进行http请求,并将得到的响应数据进行转Java对象处理。
版权声明:本文标题:Java获取天气情况的方式 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686929240a119311.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论