java天气预报免费接口api_免费天气API,可以获取全国范围五天内的天气预报(含完整Demo)…

java天气预报免费接口api_免费天气API,可以获取全国范围五天内的天气预报(含完整Demo)…用 Java 的方式封装了一个天气的接口 查询了好多 要么是要收费的 要么需要使用官方的密匙 Key 总不能项目上线了还要告诉运维记得换个 key 吧 想想就就得不现实 1 接口介绍所以 小编列举了几个网站 供大家使用 不需要 key 完全免费 绝无后顾之忧 首先 当然是 国国家气象局 中天气预报提供的接口 总共三个 http www weather com cn data sk ht

用Java的方式封装了一个天气的接口,查询了好多,要么是要收费的,要么需要使用官方的密匙Key。

总不能项目上线了还要告诉运维记得换个key吧,想想就就得不现实。

1、接口介绍

所以,小编列举了几个网站,供大家使用,不需要key,完全免费,绝无后顾之忧:

首先,当然是【国国家气象局】中天气预报提供的接口,总共三个:

http://www.weather.com.cn/data/sk/101010100.html;

http://www.weather.com.cn/data/cityinfo/101010100.html;

http://m.weather.com.cn/data/101010100.html;(已停用!!)

注意:

上面url中的“”是城市代码,这里指代“北京”的城市代码。只需要改变城市代码,就可以得到所在城市的天气信息。其中,最详细的信息来自第三个接口,但是该接口已经停用了。

第一个,第二个目前可用,但是查询的信息并不全,也不支持未来几天的天气预报等信息。

但是,实际业务中我们有必要检索一个天气数据既全面,有支持未来几天预告的API。

所以,再推荐几个来自【万年历】的天气预报查询接口,总结两个:

http://wthrcdn.etouch.cn/weather_mini?city=北京;

http://www.sojson.com/open/api/weather/json.shtml?city=北京;

这两个接口还有一个明显的优势:不需要维护城市代码,可以使用城市名称进行天气查询,非常nice。

第二个天气API详情介绍在 API 中心:http://www.sojson.com/api/weather.html ,该接口经常发生变化,若无法访问请访问官网查看最新地址。

所以,小编写一下【万年历】的第一个接口【wthrcdn.etouch.cn】的Demo:

2、使用方法

天气实体类:WeatherInfo

public class WeatherInfo {

private String date; //时间

private String week; //星期

private String lunar; //农历时间

private String cityname; //城市名

private String weather; //天气

private String temp; //当前温度

private String highTemp; //最低温度

private String lowTemp; //当前温度

private String tips; //小提示

… (省略get,set,toString方法)

}

天气工具类:WeatherUtil

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.zip.GZIPInputStream;

import net.sf.json.JSONArray;

import net.sf.json.JSONObject;

/

* @author :tjm

* 通过get请求向网站:http://wthrcdn.etouch.cn/weather_mini 获取某个 城市的天气状况数据,数据格式是Json

* @date :Created in 2020/3/9 13:55

*

*/

public class WeatherUtils {

private static String weatherUrl = “http://wthrcdn.etouch.cn/weather_mini?city=”;

/

* 通过城市名称获取该城市的天气信息

*/

public static String GetWeatherData(String cityname) {

StringBuilder sb = new StringBuilder();

BufferedReader reader = null;

try {

URL url = new URL(weatherUrl + cityname);

URLConnection conn = url.openConnection();

InputStream is = conn.getInputStream();

GZIPInputStream gzin = new GZIPInputStream(is);

// 设置读取流的编码格式,自定义编码

InputStreamReader isr = new InputStreamReader(gzin, “utf-8”);

reader = new BufferedReader(isr);

String line = null;

while((line = reader.readLine()) != null){

sb.append(line + ” “);

}

reader.close();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return sb.toString();

}

/

* 将JSON格式数据进行解析 ,返回一个weather对象

*/

public static WeatherInfo GetWeather(String weatherInfobyJson){

JSONObject dataOfJson = JSONObject.fromObject(weatherInfobyJson); // json天气数据

if(dataOfJson.getInt(“status”) != 1000){

return null;

}

// 创建WeatherInfo对象,提取所需的天气信息

WeatherInfo weatherInfo = new WeatherInfo();

// 获取当前日期:日期、星期

Calendar cal = Calendar.getInstance(); // Calendar类的实例化

SimpleDateFormat sdf1 = new SimpleDateFormat(“yyyy年MM月dd日”); // 时间的格式化

weatherInfo.setDate(sdf1.format(cal.getTime())); // 时间

SimpleDateFormat sdf2 = new SimpleDateFormat(“EEEE”);

weatherInfo.setWeek(sdf2.format(cal.getTime())); // 星期

// 从json数据中提取数据:城市、温度、小提醒

dataOfJson = JSONObject.fromObject(dataOfJson.getString(“data”));

weatherInfo.setCityname(dataOfJson.getString(“city”)); // 城市

weatherInfo.setTemp(dataOfJson.getString(“wendu”)); // 温度

weatherInfo.setTips(dataOfJson.getString(“ganmao”)); // 小提示

// 获取今天的天气预报信息:最高温度、最低温度、天气

JSONArray forecast = dataOfJson.getJSONArray(“forecast”);

JSONObject result = forecast.getJSONObject(0);

weatherInfo.setHighTemp(result.getString(“high”).substring(2)); // 最高气温

weatherInfo.setLowTemp(result.getString(“low”).substring(2)); // 最低气温

weatherInfo.setWeather(result.getString(“type”)); // 天气

return weatherInfo;

}

}

测试代码:test

public class Test {

public static void main(String[] args){

String info = WeatherUtils.GetWeatherData(“天津”);

System.out.println(“1.预测结果:” + info); // 全部天气数据,含预测

WeatherInfo weatherinfo = WeatherUtils.GetWeather(info);

System.out.println(“2.今天天气:” + weatherinfo.toString()); // 当天天气数据

}

}

结果:

1.预测结果:

{

“data”: {

“yesterday”: {

“date”: “9日星期一”,

“high”: “高温 8℃”,

“fx”: “东北风”,

“low”: “低温 1℃”,

“fl”: “”,

“type”: “小雨”

},

“city”: “天津”,

“forecast”: [

{

“date”: “10日星期二”,

“high”: “高温 13℃”,

“fengli”: “”,

“low”: “低温 3℃”,

“fengxiang”: “西北风”,

“type”: “晴”

},

{

“date”: “11日星期三”,

“high”: “高温 16℃”,

“fengli”: “”,

“low”: “低温 4℃”,

“fengxiang”: “西南风”,

“type”: “晴”

},

{

“date”: “12日星期四”,

“high”: “高温 16℃”,

“fengli”: “”,

“low”: “低温 2℃”,

“fengxiang”: “东北风”,

“type”: “多云”

},

{

“date”: “13日星期五”,

“high”: “高温 8℃”,

“fengli”: “”,

“low”: “低温 0℃”,

“fengxiang”: “北风”,

“type”: “多云”

},

{

“date”: “14日星期六”,

“high”: “高温 10℃”,

“fengli”: “”,

“low”: “低温 2℃”,

“fengxiang”: “西北风”,

“type”: “晴”

}

],

“ganmao”: “天冷风大且昼夜温差也很大,易发生感冒,请注意适当增减衣服。”,

“wendu”: “9”

},

“status”: 1000,

“desc”: “OK”

}

2.今天天气:

WeatherInfo{date=’2020年03月10日’, week=星期二, lunar=’null’, cityname=’天津’, weather=’晴’, temp=’9′, highTemp=’ 13℃’, lowTemp=’ 3℃’, tips=’天冷风大且昼夜温差也很大,易发生感冒,请注意适当增减衣服。’}

注意:

预测结果:是该API获取的全部数据,包含昨天,今天,以及未来4天的天气情况;

今天天气:是从预测结果JSON数据中取出来,封装成对象的数据,在data.forecast下的第一条记录中。

更多精彩,请关注我的”今日头条号”:Java云笔记

随时随地,让你拥有最新,最便捷的掌上云服务

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/175999.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:54
下一篇 2026年3月26日 下午10:55


相关推荐

  • acwing-246. 区间最大公约数(线段树+gcd)[通俗易懂]

    acwing-246. 区间最大公约数(线段树+gcd)[通俗易懂]给定一个长度为 N 的数列 A,以及 M 条指令,每条指令可能是以下两种之一:C l r d,表示把 A[l],A[l+1],…,A[r] 都加上 d。Q l r,表示询问 A[l],A[l+1],…,A[r] 的最大公约数(GCD)。对于每个询问,输出一个整数表示答案。输入格式第一行两个整数 N,M。第二行 N 个整数 A[i]。接下来 M 行表示 M 条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围N≤500000,M≤1

    2022年8月9日
    10
  • TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]

    TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]作用可以让我们看到IP数据报从1台主机传到另一台主机所经过的路由。比Ping程序看到更多东西优势不是所有路由器都支持RR选项。所以有些路由器上会出现不记录IP的现象。Traceroute不需要路由器具备任何特殊的功能RR选项的数据报的目的Ping服务器(主机)会将接受到的RR清单Copy回去。然后再加上回去的IP清单。这样就是X2。这会收到一些限制IP首部的空间有限,不能存放太多的IP…

    2022年6月20日
    29
  • python主函数怎么写_python主方法怎么写

    python主函数怎么写_python主方法怎么写在 python 中写主方法的方法 首先使用 def 定义一个函数 然后输入 if name main 命令 即完成了主方法的创建 可在该命令下打印出函数值 刚入门的 python 的同学可能尚未接触过 python 主函数的编写 其实 python 添加主函数入口可以保证模块执行的独立性又不影响模块被其他模块引用 import 主函数的编写 defmain passif n

    2026年3月26日
    3
  • 真封神之天尊地魔引擎修改系列教程

    真封神之天尊地魔引擎修改系列教程真封神引擎技术研究QQ交流群:157754180真封神之天尊地魔SF引擎研修目录:本套教程分为三个部分:客户端部分、服务端部分  、以及引擎部分!引擎部分:1.真封神GC去MD5教程      2.引擎修改之突破仓库金钱上限20亿                           3.引擎修改之多次转职            

    2022年7月24日
    40
  • countdowntimer_TIMESTAMPDIFF

    countdowntimer_TIMESTAMPDIFF需求:加载某一个界面,在页面中待5秒后再关闭效果图如下:设置了一个点击事件,当文字显示为Skipactivity时,点击跳转界面。代码及介绍如下图:核心功能代码如下Android自带的CountDownTimer这个工具类,也是通过Handler和子线程来实现的。//倒计时工具类CountDownTimer//CountDownTimer的构造方法有两个参数…

    2026年1月18日
    4
  • IO编程

    IO编程是什么?    IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。    比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫O

    2022年4月27日
    56

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号