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

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

但是,实际业务中我们有必要检索一个天气数据既全面,有支持未来几天预告的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": "<![CDATA[4-5级]]>",
            "type": "小雨"
        },
        "city": "天津",
        "forecast": [
            {
                "date": "10日星期二",
                "high": "高温 13℃",
                "fengli": "<![CDATA[4-5级]]>",
                "low": "低温 3℃",
                "fengxiang": "西北风",
                "type": "晴"
            },
            {
                "date": "11日星期三",
                "high": "高温 16℃",
                "fengli": "<![CDATA[4-5级]]>",
                "low": "低温 4℃",
                "fengxiang": "西南风",
                "type": "晴"
            },
            {
                "date": "12日星期四",
                "high": "高温 16℃",
                "fengli": "<![CDATA[4-5级]]>",
                "low": "低温 2℃",
                "fengxiang": "东北风",
                "type": "多云"
            },
            {
                "date": "13日星期五",
                "high": "高温 8℃",
                "fengli": "<![CDATA[3-4级]]>",
                "low": "低温 0℃",
                "fengxiang": "北风",
                "type": "多云"
            },
            {
                "date": "14日星期六",
                "high": "高温 10℃",
                "fengli": "<![CDATA[4-5级]]>",
                "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云笔记
随时随地,让你拥有最新,最便捷的掌上云服务

免费天气API,可以获取全国范围五天内的天气预报(含完整Demo)相关推荐

  1. 免费天气api适合商用吗_4个免费的天气提供商API开发天气应用

    免费天气api适合商用吗 提供天气信息的Android应用在Play商店中很常见. 此外,Weather应用程序和小部件是下载次数最多的项目之一. 当需要开发天气应用程序时 ,有必要使用天气提供程序作 ...

  2. android 百度天气api,9.1 百度免费天气API介绍

    百度免费天气API介绍 百度的API Store 为开发者提供最全面的API服务,汇集了国内外应用开发所需要的Android API/SDK,IOS SDK,涉及设计开发,运维管理,云服务,app推广 ...

  3. java解析json天气api,免费天气API,全国天气 JSON API接口,可以获取五天的天气预报...

    稳定高效的天气API接口是很少有的,本站前一段时间开发了一个万年历,需要带天气预报,花了几天功夫,集成和容错处理好对外开放的天气接口.天气接口支持返回   JSON  和  XML  结果.并且可以获 ...

  4. 免费天气API,天气JSON API,不限次数获取十五天的天气预报

    紧急情况说明: 禁用IP列表: 39.104.69.*(原因39.104.69.6 在2018年10月的 17~20日 排行为top 1,每天几十万次.) 47.98.211.* (原因47.98.2 ...

  5. python通过调用百度天气API接口获取天气信息

    python调用百度接口,获取天气信息 需要到百度注册开发者账号,通过账号获取到每个账号私有的应用访问(AK) 使用此脚本还需要district_id.csv文档,在我资源中可以免费下载,也可在百度天 ...

  6. 免费天气api 高速稳定的天气API接口 2019年4月测试稳定OK

    天气API (https://www.tianqiapi.com) 提供的是真正免费的天气api接口 接口没有调用次数.频率.IP等限制! 提供的接口完全满足广大开发者的日常需求, 而且使用接口无需注 ...

  7. 仿QQ空间天气预报效果 使用免费天气API的天气插件

    效果如图 文字颜色可以自定义 IFrame引用代码 <iframe scrolling="no" src="https://tianqiapi.com/api.ph ...

  8. WWDC2022趣闻之苹果发布了免费天气API WeatherKit

    WWDC 2022 已经到来,Apple 发布了一系列很棒的新功能,其中一些不会让每个人都开心(或者竞争是如何运作的?) Apple with WeatherKit(正式名称为 Dark Sky)每月 ...

  9. 免费的天气API接口 获取今日, 未来3天, 未来7天天气预报数据

    使用说明 接口不需要注册key,也没有频率限制,请放心使用. 适用于小程序.JS. Android.iOS等,curl即可获取到,允许跨域. 使用方法 $data = file_get_content ...

最新文章

  1. word转换成pdf java代码_java代码实现word转换成pdf
  2. Python 分析到底是谁操纵《庆余年》上了热搜?
  3. JS杂谈系列-jquery-插件开发小记
  4. Jmeter连接SqlServer数据库并操作
  5. 程序员必看书籍之二:编程语言实现模式
  6. Cookie、Session的使用及区别
  7. 《A fast parallel algorithm for thinning digital patterns》论文算法python代码实现
  8. 啤酒与尿布的蝴蝶效应——关联分析
  9. C1/C1/C2 カバレッジについて
  10. 美团配送php,PHP对接美团配送接口遇到的坑
  11. iOS企业包下载安装
  12. 自定义配置log日志
  13. fik在计算机领域英语缩写,计算机常用英语词汇表
  14. UTC时间与北京时间的关系
  15. 项目三-体验复杂度(2)汉诺塔
  16. APP自动化测试框架搭建(六)--uiautomator2、web-editor基础操作
  17. wps只要拼音不要汉字
  18. Android V7包学习笔记更新中.....
  19. 层自动命名模块检测未通过
  20. 500左右能买到降噪蓝牙耳机吗?平价四款高性价比降噪蓝牙耳机推荐

热门文章

  1. 如何优化 Mac 笔记本电脑的电池续航能力,解决电池问题
  2. Linux 软件安装 - 软件包管理
  3. 自然科学计算机技术ppt,《同济大学科技》PPT课件
  4. android程序中实现打开另一个app
  5. [激光原理与应用-48]:《焊接质量检测》-5-德擎先进激光过程诊断系统ALPAS分析
  6. 8种互联网在线支付接口
  7. 在centos8上手动安装docker,避免安装moby
  8. 1_输出n的1-5次方
  9. 如何用python控制电脑的应用程序打不开_电脑打不开应用程序怎么办
  10. linux c 界面库,几款开源的图形界面库(GUI Libraries)