【记录】Java获取天气情况的方式

寒冬时节,看到路边电子大屏上实时显示城市的天气信息,于是很好奇是怎么实现的,用Java的方式实现思路有哪些呢,基于此想法记录一下。

说明

经过搜集和参考网上的相关资料,Java获取天气情况数据的通用步骤如下:

  • 调用天气接口api;
  • 解析返回的XML 或 JSON数据;

这里我并不去用代码实现一个Demo,而是记录一下思路,以后有需求便可以不需要再去调研了。

调用天气接口

API调用方式,无非就是根据城市名称或者城市代码获取到接口返回的XML 或 JSON数据,以下几种天气接口方式可以参考使用。

方式一:wthrcdn接口

example:http://wthrcdn.etouch.cn/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服务接口(http://www.webxml.com.cn/zh_cn/index.aspx

具体使用方式参考:接口示例、接口帮助文档、服务说明等,这种方式返回的是XML格式的数据。

example:

<?xml version="1.0" encoding="UTF-8"?> 
- 
<ArrayOfString xmlns="http://WebXml.com.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsi="http://www.w3.org/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> 

方式三:中国天气网接口(http://www.weather.com.cn/

example:http://www.weather.com.cn/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(https://www.sojson.com/blog/305.html

  • 这个网站很良心,关于如何调用、遇到的问题等都有详细的说明和答疑;
  • 这种方式和第一种本质是一样的,使用的CDN缓存更新天气数据;

方式五:高德开放平台天气查询接口(https://lbs.amap.com/api/webservice/guide/api/weatherinfo/

  • 天气查询是一个简单的HTTP接口,根据用户输入的adcode,查询目标区域当前/未来的天气情况;
  • 使用开放平台的API需要申请一个Key(申请”web服务 API”的密钥);
  • 天气查询API服务地址、请求参数、返回数据结构介绍的很清楚。

example:https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=<用户key>

方式六:其他开放平台天气查询接口

 

解析返回的XML 或 JSON数据的方式

1、如果使用的是SpringBoot,借助restTemplate调用REST风格的API接口:(restTemplate封装了HttpClient并进行http通信)

String weatherUrl = "https://restapi.amap.com/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.net包下的URL、及IO流进行http通信和对象的反序列化。

3、也可以使用HttpClient对象进行http请求,并将得到的响应数据进行转Java对象处理。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要通过Java获取天气气象图标,可以使用以下步骤: 1. 首先需要选择一个可靠的天气API供应商,例如心知天气API、高德天气API等。这些API供应商提供了获取天气数据的接口,并且可以返回包含气象图标的JSON或XML格式的数据。 2. 在Java中,可以使用网络请求库,如HttpClient或OkHttp,发送GET或POST请求到天气API的接口地址,并将返回的天气数据保存下来。 3. 在获取到的天气数据中,可能会有一个字段或属性包含了气象图标的URL。这个URL可以是一个包含气象图标的图片的地址,可以直接使用。 4. 使用Java的图像处理库,如ImageIO,可以通过URL读取、下载并保存获取到的气象图标。可以将图标保存为本地文件,以便以后使用。 5. 所以,在Java代码中,你可以编写一个函数或方法,接收一个地理位置参数,并使用该位置参数在天气API中获取该地区的天气数据。 6. 解析返回的天气数据,提取出气象图标的URL,并使用图像处理库将图标保存到本地。 7. 最后,你可以使用Java图形界面库,如Swing或JavaFX,将获取到的气象图标显示在界面上,或者在控制台中打印出来。 需要注意的是,获取天气气象图标需要网络连接,并且要确保天气API供应商的接口地址、参数和数据格式的正确性。此外,还需要处理可能出现的错误和异常情况,例如网络连接失败、无法获取数据等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值