用Java代码获取中央气象局的天气预报数据

版权声明:数据版权归中央气象局所有,仅供学习交流之用。本文内容若有侵权,请联系我删除~

文章目录

  • 用Java代码获取中央气象局的天气预报数据
    • 1 获取相关接口
    • 2 省份获取接口数据
    • 3 城市获取接口数据
    • 4 城市天气预报获取接口数据
    • 5 使用Java代码提取数据

1 获取相关接口

通过解析html页面后,发现有如下3个接口:

  • 省份获取:http://www.nmc.cn/rest/province
  • 城市获取:http://www.nmc.cn/rest/province/{省份代码}
  • 城市天气预报获取:http://www.nmc.cn/rest/weather?stationid={城市代码}

2 省份获取接口数据

接口:http://www.nmc.cn/rest/province 【测试一下】

返回数据:

[{"code":"ABJ","name":"北京市","url":"/publish/forecast/ABJ.html"},{"code":"ATJ","name":"天津市","url":"/publish/forecast/ATJ.html"},{"code":"AHE","name":"河北省","url":"/publish/forecast/AHE.html"},{"code":"ASC","name":"四川省","url":"/publish/forecast/ASC.html"},......{"code":"ATW","name":"台湾省","url":"/publish/forecast/ATW.html"}
]

注意:这里的code键的值为城市获取的参数,如四川的参数为:ASC

3 城市获取接口数据

接口:http://www.nmc.cn/rest/province/ASC【测试一下】

[{"code":"56294","province":"四川省","city":"成都","url":"/publish/forecast/ASC/chengdu.html"},{"code":"56171","province":"四川省","city":"阿坝","url":"/publish/forecast/ASC/aba.html"},......{"code":"56498","province":"四川省","city":"筠连","url":"/publish/forecast/ASC/yunlian.html"}
]

注意:这里的城市包括各市的区县,比如上面展示的筠连就是四川省宜宾市的辖县,这里code键的值就是访问城市天气数据接口的参数。

4 城市天气预报获取接口数据

接口:http://www.nmc.cn/rest/weather?stationid=56294【测试一下】

{"msg":"success",
"code":0,
"data":{"real":{"station":{"code":"56294","province":"四川省","city":"成都","url":"/publish/forecast/ASC/chengdu.html"},"publish_time":"2020-07-26 22:25","weather":{"temperature":24.9,"temperatureDiff":2.2,"airpressure":948.0,"humidity":81.0,"rain":0.0,"rcomfort":74,"icomfort":1,"info":"-","img":"9999","feelst":24.9},"wind":{"direct":"无持续风向","power":"微风","speed":""},"warn":{"alert":"9999","pic":"9999","province":"9999","city":"9999","url":"9999","issuecontent":"9999","fmeans":"9999","signaltype":"9999","signallevel":"9999","pic2":"9999"}},"predict":{"station":{"code":"56294","province":"四川省","city":"成都","url":"/publish/forecast/ASC/chengdu.html"},"publish_time":"2020-07-26 20:00","detail":[{"date":"2020-07-26","pt":"2020-07-26 20:00", "day":{"weather":{"info":"9999","img":"9999","temperature":"9999"},"wind":{"direct":"9999","power":"9999"}},"night":{"weather":{"info":"晴","img":"0","temperature":"22"},"wind":{"direct":"无持续风向","power":"微风"}}},{"date":"2020-07-27","pt":"2020-07-26 20:00","day":{"weather":{"info":"晴","img":"0","temperature":"34"},"wind":{"direct":"无持续风向","power":"微风"}},"night":{"weather":{"info":"晴","img":"0","temperature":"23"},"wind":{"direct":"无持续风向","power":"微风"}}},......{"date":"2020-08-01","pt":"2020-07-26 20:00","day":{"weather":{"info":"阵雨","img":"3","temperature":"30"},"wind":{"direct":"无持续风向","power":"微风"}},"night":{"weather":{"info":"阴","img":"2","temperature":"23"},"wind":{"direct":"无持续风向","power":"微风"}}}]},"air":{"forecasttime":"2020-07-26 21:00","aqi":65,"aq":2,"text":"良","aqiCode":"99052;99054;99055"},"tempchart":[{"time":"2020/07/19","max_temp":34.8,"min_temp":20.0,"day_img":"9999","day_text":"9999","night_img":"9999","night_text":"9999"},{"time":"2020/07/20","max_temp":29.4,"min_temp":23.8,"day_img":"9999","day_text":"9999","night_img":"9999","night_text":"9999"},{"time":"2020/07/21","max_temp":25.8,"min_temp":21.3,"day_img":"9999","day_text":"9999","night_img":"9999","night_text":"9999"},......{"time":"2020/07/30","max_temp":26.7,"min_temp":22.5,"day_img":"10","day_text":"暴雨","night_img":"2","night_text":"阴"},{"time":"2020/07/31","max_temp":29.0,"min_temp":22.8,"day_img":"7","day_text":"小雨","night_img":"2","night_text":"阴"},{"time":"2020/08/01","max_temp":30.7,"min_temp":23.2,"day_img":"3","day_text":"阵雨","night_img":"2","night_text":"阴"}],"passedchart":[{"rain1h":0.0,"rain24h":9999.0,"rain12h":9999.0,"rain6h":9999.0,"temperature":25.4,"tempDiff":"","humidity":76.0,"pressure":948.0,"windDirection":0.0,"windSpeed":0.0,"time":"2020-07-26 22:00"},{"rain1h":0.0,"rain24h":9999.0,"rain12h":9999.0,"rain6h":9999.0,"temperature":27.1,"tempDiff":"","humidity":70.0,"pressure":947.0,"windDirection":0.0,"windSpeed":0.0,"time":"2020-07-26 21:00"},{"rain1h":0.0,"rain24h":9999.0,"rain12h":9999.0,"rain6h":9999.0,"temperature":30.5,"tempDiff":"","humidity":55.0,"pressure":947.0,"windDirection":0.0,"windSpeed":0.0,"time":"2020-07-26 20:00"},...],"climate":{"time":"1981年-2010年","month":[{"month":1,"maxTemp":9.1,"minTemp":2.6,"precipitation":8.7},{"month":2,"maxTemp":11.4,"minTemp":4.8,"precipitation":12.4},...{"month":12,"maxTemp":10.3,"minTemp":4.1,"precipitation":6.0}]},"radar":{"title":"成都","image":"/product/2020/07/26/RDCP/SEVP_AOC_RDCP_SLDAS_EBREF_AZ9280_L88_PI_20200726144200000.PNG?v=1595774905591","url":"/publish/radar/si-chuan/cheng-du.htm"}}
}

注意:过期的数据值都为9999。

5 使用Java代码提取数据

这里用四川省成都市预报数据的tempchart键为例。获取步骤如下:

  1. 使用URL类打开链接
  2. 使用字节流读取数据
  3. 使用字符流将读取字节流中的数据
  4. 将字符流数据以字符的形式保存到StringBuilder字符构造类中
  5. 使用fastjson将StringBuilder保存的字符数据转换成json对象
  6. 使用fastjson中相关的方法提取需要的数据

Java代码:

public void getValue() {String url = "http://www.nmc.cn/rest/weather?stationid=56294";StringBuilder sb = new StringBuilder();//获取拼接读取到的json字符try {URL u = new URL(url);URLConnection con = u.openConnection();//字节输入流读取json数据,并将编码格式设置为utf8InputStreamReader in = new InputStreamReader(con.getInputStream(),StandardCharsets.UTF_8);//字符流读取输入流的数据BufferedReader br = new BufferedReader(in);String inputLine;//循环中间量while ((inputLine = br.readLine()) != null) {sb.append(inputLine);}br.close();in.close();} catch (IOException e) {e.printStackTrace();}//将字符串转换为json对象JSONObject json = JSON.parseObject(sb.toString());// System.out.println(json);//获取data键的值,值为json格式,所以可以转换为json对象JSONObject data = json.getJSONObject("data");// System.out.println(data);//data键中的tempchar键的值是一个数组,所以使用JSONArray对象接收值JSONArray tempchart = data.getJSONArray("tempchart");// System.out.println(tempchart);//一共14条数据,过去7天和未来7天,这里只取未来7天数据。for (int i = 0; i < tempchart.size() - 7; i++) {JSONObject temp = tempchart.getJSONObject(i + 7);System.out.println("日期:" + temp.getString("time"));System.out.println("最高气温:" + temp.getString("max_temp"));System.out.println("最低气温:" + temp.getString("min_temp"));System.out.println("------------华丽的分割线-------------");}
}

运行结果:

日期:2020/07/27
最高气温:33.6
最低气温:23.0
------------华丽的分割线-------------
日期:2020/07/28
最高气温:34.7
最低气温:24.2
------------华丽的分割线-------------
日期:2020/07/29
最高气温:31.0
最低气温:22.1
------------华丽的分割线-------------
日期:2020/07/30
最高气温:26.7
最低气温:22.5
------------华丽的分割线-------------
日期:2020/07/31
最高气温:29.0
最低气温:22.8
------------华丽的分割线-------------
日期:2020/08/01
最高气温:30.7
最低气温:23.2
------------华丽的分割线-------------
日期:2020/08/02
最高气温:34.7
最低气温:24.0
------------华丽的分割线-------------

注意:

  • 根据返回值的格式一步一步获取想要的数据
  • 通过每次获取的结果,可以清楚的看出返回值的格式。

从天气预报网页API获取天气预报数据相关推荐

  1. Python小工具——通过API获取天气预报

    Python通过API获取天气预报 闲来无事,用Python实现了一个小工具,通过实现API来获取当前的天气预报. 获取API的key 在阿凡达数据上查找天气预报相关的API,注册申请可获得一个key ...

  2. 如何使用 Yahoo! Finance stock API 获取股票数据

    本站曾介绍过,通过代码添加雅虎财经的股票走势图到自己网站的方法(添加美国股市 ,添加沪深股市 ),调用的是一张图片.今天在德馨 网站,看到了从雅虎财经频道获取股票数据的API(Yahoo! Finan ...

  3. 用python读取股票价格_雅虎API获取股票数据--Python

    好久不学Python,计划用Tkinter写一个利用雅虎免费股票查询API的可视化程序 Yahoo股票报价API 获取实时数据 请求url:http://finance.yahoo.com/d/quo ...

  4. 【Power Automate系列教程】利用API获取JSON数据定时每日自动写入List

    利用API获取JSON数据定时每日自动写入List 在知识星球的后台有个看数据的界面: 通过简单的抓包可以看到是个json数据,那么就有了想法! 获取到请求的api,发现规律: https://api ...

  5. python tushare获取股票数据_Python 金融: TuShare API 获取股票数据 (1)

    多多教Python 金融 是我为金融同行,自由职业投资人 做的一个专栏.这里包含了我自己作为量化交易员,在做研究时所用到的Python技巧和实用案例.这个栏目专业性会比较强:本人29岁,量化工作5年的 ...

  6. 在树莓派上使用 PowerShell 调用 Azure 上的 .NET Core API 获取疫情数据

    点击上方蓝字关注"汪宇杰博客" 导语 最近因为疫情被关在家里,做了个无聊成就:我们将在树莓派上用 PowerShell 调用 Azure 上的一个 .NET Core 写的 API ...

  7. 进阶1·调用高德API获取交通数据(多个URL访问,字典提取,while无限循环下的程序间断运行)

    调用高德开放API获取实时交通数据 想法及思路 现在大型网站都提供了好多开放API,根据这些开放API可以做一些比较有趣的东西,本次调用高德开放api实时获取你想知道的道路拥堵状况 工具及技术: Py ...

  8. 不通过twitter API获取Twitter数据的方法

    不通过twitter API调用Twitter数据 前言 1.Python库的导入 2.网络问题的解决 2.1.可能遇到的错误 2.1.1.Cannot Connect to host twitter ...

  9. 微信小程序获取云服务器数据,微信小程序云开发服务端数据库API 获取集合数据...

    Collection.get / Query.get 获取集合数据,或获取根据查询条件筛选后的集合数据. 如果没有指定 limit,则默认最多取 20 条记录. 如果没有指定 skip,则默认从第 0 ...

最新文章

  1. Tesla T4视频编码性能分析
  2. HadoopHA集群搭建
  3. OKExChain生态项目KSwap完成50万美元种子轮融资
  4. 关于批量导入数据以及调优的一些总结
  5. pthread_cleanup_push()/pthread_cleanup_pop()的详解
  6. python代码测试 vim_使用tmux+vim发送测试代码行的键绑定?
  7. 为什么我创建了一个计算机用户名 再打开计算机时 我打不开以前的文件,电脑中office文件无法打开的三种解决方法...
  8. Idea查看 破解码
  9. Navicat数据库查询时字体
  10. python编程软件开发_Python编程-绑定方法、软件开发
  11. JS:打字游戏_键盘事件监听
  12. 审稿意见回复信英文模板和语料总结
  13. JSON.parse和JSON.stringify
  14. 闭包,何为闭包?如何解决闭包? (最全面解释)
  15. Java violate变量
  16. 爬取通过ajax动态加载的页面(实时监控华尔街见闻资讯与快讯)
  17. 使用jquery.fly插件实现添加购物车抛物动画
  18. 抖音账号矩阵系统源码/矩阵霸屏系统搭建部署/源码
  19. 《程序员之禅》一一10.10 淡泊宁静
  20. 语法基础——PHP语法基础

热门文章

  1. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)
  2. 表面纹理:粗糙度Roughness,波纹度waviness和间距spacing
  3. 计算机网络如何计算有效ip地址个数,知道IP和子网掩码,如何计算可用IP数量和可用的IP地址?...
  4. 分享8个有趣的python小玩具
  5. 2013年第四届蓝桥杯国赛试题及详解(Java本科B组)
  6. 替代Windows文件服务器,windows文件服务器替代
  7. SpringBoot关于JPA中关于查询findOne和findById
  8. 【快应用】小程序转快应用如何退出整个快应用
  9. 正在为首次使用计算机做准备黑屏,Windows 10首次启动时意外重启计算机或遇到错误的解决方案...
  10. sql server 2008创建修改sa用户密码