Java获取天气情况的方式

2023-05-16

说明

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

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

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

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

方式一:wthrcdn接口

根据城市名称获取天气信息:http://wthrcdn.etouch.cn/weather_mini?city=城市中文名
根据城市ID获取天气信息:http://wthrcdn.etouch.cn/weather_mini?citykey=城市code
获取城市列表信息:https://yiyingcanfeng.github.io/data/2019-03-13-cn_weather_citylist.json
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)

天气信息API:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx
具体使用方式参考:接口示例、接口帮助文档、服务说明等,这种方式返回的是XML格式的数据。

example:

获得中国省份、直辖市、地区和与之对应的ID:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx/getRegionProvince
根据上面的ID获得支持的城市/地区名称和与之对应的ID:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityDataset
获得支持的城市/地区名称和与之对应的ID:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getSupportCityString

获得天气预报数据:http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?op=getWeather

以武汉为例:

<?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/)

根据城市ID获取天气信息:http://www.weather.com.cn/data/sk/城市code.html
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>

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

如百度地图开放平台:http://lbsyun.baidu.com/index.php?title=car/api/weather

解析返回的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对象处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java获取天气情况的方式 的相关文章

  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • 什么是“非阻塞”并发?它与普通并发有何不同?

    什么是 非阻塞 并发 它与使用线程的普通并发有何不同 为什么不在所有需要并发的场景中都使用非阻塞并发呢 使用非阻塞并发有开销吗 我听说Java中可以实现非阻塞并发 我们是否应该在特定场景下使用此功能 将这些方法之一与集合一起使用是否有区别或
  • 如何制作具有两个索引的 Map?

    我在java中有一张这样的地图 Map
  • JCombobox 字符串项(可见)和整数键(固有)

    我有一个数据库模式 它将作为 JTable 列显示在 JCombobox 中以选择名称 但我希望将 ID 字段插入 作为外键 到另一个表中 通常 在下拉列表中选择一个项目 将所选项目带到组合框的显示区域 我想要做的是 当选择组合框中的任何项
  • Junit测试中LocalDateTime反序列化的问题

    我有问题LocalDateTime反序列化Junit测试 我有简单的REST API返回一些DTO目的 当我呼叫端点时 响应没有问题 它是正确的 然后我尝试编写单元测试 得到MvcResult并使用ObjectMapper将其转换为我的DT
  • 使android listview布局可滚动

    我有一个 xml 文件 其布局为 ASCII 形式 ImageView TextView List
  • Java 中内存高效的稀疏数组

    关于时间高效的稀疏数组存在一些问题 但我正在寻找内存效率 我需要相当于List
  • Spring Security登录返回404

    我目前正在使用 Spring 框架开发我的博客 我正在实现 Spring Security 用于登录目的 一切都按预期进行 直到我提交始终返回 404 代码的登录凭据 这是我的 web xml 代码e
  • 公共领域有哪些替代方案?

    我正在用 java 编写一个游戏 正如问题标题建议的那样 我在类中使用公共字段 暂且 据我所知 公共领域很糟糕 我有一些理解其中的原因 但如果有人能澄清为什么你不应该使用它们 那将不胜感激 问题是 从我所看到的来看 这似乎是合乎逻辑的 是使
  • 字节流和字符流

    请解释一下什么是字节流和字符流 这些究竟意味着什么 Microsoft Word 文档是面向字节的还是面向字符的 Thanks 流是一种顺序访问文件的方式 字节流逐字节访问文件 字节流适用于任何类型的文件 但不太适合文本文件 例如 如果文件
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • JList 类型不采用参数类型

    当我尝试编译一些代码时 我不断收到这些错误 CCC java 21 type javax swing JList does not take parameters JList
  • 如何使用JSqlParser向sql添加where条件?

    我想用JSqlParser向sql添加where条件 例如 Before select from test table where a 1 group by c After select from test table where a 1
  • Android中计算两个时间之间的差异

    我有两个字符串变量 例如 StartTime 和 EndTime 我需要通过用 StartTime 减去 EndTime 来计算 TotalTime StartTime和EndTime的格式如下 StartTime 08 00 AM End
  • 当键位于父类中时,如何将一对多集合映射到连接的子类

    我想将一对多集合映射到子类 但集合的键是父类的属性 目前我正在映射 AbstractFoo Foo 和 Bar 类 如下所示
  • 无法验证 serde:org.openx.data.jsonserde.jsonserde

    我编写了这个查询来在配置单元上创建一个表 我的数据最初是 json 格式 所以我已经下载并构建了 serde 并添加了它运行所需的所有 jar 但我收到以下错误 FAILED Execution Error return code 1 fr
  • Web 服务返回 java.lang.reflect.InitationTargetException

    我在向 java web 服务发出请求时收到上述消息 我们最初创建了一个 Java 控制台应用程序并手动提交了一个 xml 文件 当将其作为 Java 应用程序运行时 将使用 System out println 成功创建并显示响应 我们通
  • 在Java中将32bpp图像转换为16bpp图像

    如何使用 Java 库将 32bpp 图像 ARGB 转换为 16bpp 图像 ARGB 出于我的好奇 在像素级别 这种转换有什么作用 如果我有一个保存像素值 包含所有通道 的 int 值 那么在转换发生后该 int 会有什么不同 32 位
  • java 更新进度条

    我有一个 JFrame 和以下组件 JButton jButton1 Progress Bar ProgressBar 及其公共静态 JLabel 状态及其公共静态 单击按钮时会执行不同的语句 我想在每个语句后更新我的进度条 这是我的代码

随机推荐

  • 二分图多重匹配——小结

    二分图的重匹配 xff0c 说白了就说一对多的匹配 还是匈牙利算法 xff0c 一般都是给出两个集合 xff0c 然后让你对这两个集合进行匹配 xff0c 但是其中一个集合是可以多次匹配的 xff0c 但是匹配的次数是有限的 xff08 假
  • C.Garland(DP)

    题目链接 xff1a C Garland 题意 给你了一个序列 xff0c 包含n个数 xff0c 这个序列是由1 n数字构成 xff0c 但是题目给你的这个序列并不完整 xff0c 让你去补完整 xff0c 那些输入的值为0的位置的就是让
  • P1908 逆序对(离散化)

    洛谷P1908 逆序对 逆序对就不用解释了 xff0c 题上也说的很清楚 那我分别用归并排序和树状数组来解决一下这道题目 归并排序 我们都知道 xff0c 归并排序是通过把大区间一直分 xff0c 分成小区间 xff0c 然后小区间排序好了
  • Codeforces Round #618 (Div. 2)

    太菜了 xff0c 也只能补补题了 A Non zero 这道题瞎弄一下就过了 xff0c 数0的个数 xff0c 把0全变成1 xff0c 然后再判断现在和是不是0 xff0c 和是0的话就再加上1 span class token ma
  • HDU 1025最长递增子序列(二分法)

    最长递增子序列 xff08 二分 xff09 HDU1025 https www felix021 com blog read php 1587 找最长递增子序列 xff0c 以前一般用DP的方法找 xff0c 因为理解简单 xff0c 实
  • Codeforces Round #658 (Div. 2)

    比赛链接 xff1a https codeforces com contest 1382 A Common Subsequence 题意 给你两组数 xff0c 问你有没有相同 的书 xff0c 有的话 xff0c 输出最短的那组 xff0
  • mysql学习笔记之数据库

    我的mysql学习参考于github文章 数据库 xff1a 高效的存储和处理数据的介质 xff08 比如磁盘和内存 xff09 xff0c 又根据介质的不同 xff0c 分为关系数据库和非关系数据 关系数据库特点 xff1a 1 xff0
  • Python_pytorch (三)分解网络模型

    python pytorch 小土堆pytotch学习视频链接 from的是一个个的包 xff08 package import 的是一个个的py文件 file py 所使用的一般是文件中的类 class 第一步实例化所使用的类 然后调用类
  • Python_pytorch(四)网络搭建

    搭建架构 span class token keyword import span torch span class token keyword import span torchvision span class token keywor
  • Python_pytorch(五)模型训练

    反向传播 Loss Function span class token keyword import span torchvision span class token keyword from span torch span class
  • 【计蒜客】泥塑课C++

    泥塑课 描述 小米是一个幼儿园老师 xff0c 每学期的泥塑课上 xff0c 她都会给每个学生发不超过 250 立方厘米的等量橡皮泥 xff0c 教大家做泥塑 在上课过程中 xff0c 她发现每个班都恰好有一个小朋友会去抢另一个小朋友的橡皮
  • linux无法粘贴文件

    无粘贴功能的主要原因是无权限复制 xff0c 所以解决方案是 xff1a 打开终端 xff0c 输入 xff1a sudo nautilus 那么就会打开一个有管理员权限的文件夹资源器 xff0c 现在右键就有粘贴功能了
  • Zookeeper详解(三)——开源客户端curator

    开源客户端curator true re de curator是Netflix公司开源的一个zookeeper客户端 xff0c 后捐献给apache xff0c curator框架在zookeeper原生API接口上进行了包装 xff0c
  • mysql 修改字段类型

    修改字段类型 xff1a span class token keyword alter span span class token keyword table span 表名 span class token keyword modify
  • 【python】字符串(二)

    今天我们来学习如何判断字符串格式的内容 xff0c 针对基础判断 文章目录 一 基础知识二 例题 xff08 一 xff09 找元音 xff08 二 xff09 判断电话号码合法 一 基础知识 我们先来看看一般会用到那些知识点 xff1a
  • CentOS7 个性化

    CentOS美化 前言一 上图看效果原生桌面效果图美化后的效果图 二 使用步骤1 安装相关的包2 调整主题和字体 总结 前言 咳咳咳 xff5e 无论什么系统 xff0c 美化是必不可少的 xff0c 可以没用 xff0c 但不能没有 xf
  • freeswitch 1.10版本 centos7安装

    文章目录 简介安装使用ODBC连接mysql可能出现的问题 简介 FreeSWITCH 是一个电话的软交换解决方案 xff0c 包括一个软电话和软交换机用以提供语音和聊天的产品驱动 FreeSWITCH 可以用作交换机引擎 PBX 多媒体网
  • Airsim_API

    AirSim API 参考自知乎大佬https www zhihu com column multiUAV 讲的非常好 xff01 无人机姿态角 pitch是俯仰角 xff0c 是 点头 yaw是偏航角 xff0c 是 摇头 roll是旋转
  • JWT详解

    JWT详解 什么是JWTJWT能做什么JWT的认证流程JWT认证的优势JWT结构 1 Header 2 Payload 3 Signature Java中使用JWT实际开发中的应用 Springboot 43 Spring Security
  • Java获取天气情况的方式

    说明 经过搜集和参考网上的相关资料 xff0c Java获取天气情况数据的通用步骤如下 xff1a 调用天气接口api xff1b 解析返回的XML 或 JSON数据 xff1b 这里我并不去用代码实现一个Demo xff0c 而是记录一下