天气免费API接口,天气API接口请求讲解及源码下载

JSON 2020-08-22 03:57:39 102871

本站一直提供了免费的天气API接口供大家使用,目前日调用量平均为400万次每天左右。天气API介绍请看:https://www.sojson.com/blog/305.html ,由于一直有人在天气API接口使用上有疑问,我开发了一个标准调用天气API接口的Demo,面向对象的Demo,最简单的调用。

天气API接口目前调用情况

截止当天的18点之前的数据,下面看2个图。


详细数据统计图


所以还请大家在接入的时候,做好缓存策略,根据自身的业务做最大的缓存力度,能2个小时就别1个小时。您每一次请求我都要付费。免费不容易,且行且珍惜。

天气请求代码

本demo实例用最简单的代码实现。

天气接口Controller

/**
 * 天气数据
 * @param id
 * @return
 */
@RequestMapping(value = "city/{id:1[0-9]{8}}", method = RequestMethod.GET)
public WeatherDto loadApi(@PathVariable("id") String id){
    String vliCode = String.format(",%s,", id);
    if(!cityCode.contains(vliCode)){
        throw new RuntimeException("no_city_id");
    }
    return weatherManager.getById(id);

}

天气接口Manager(数据请求)

//请求连接地址
final static String SOJSON_WEATHER_URL = "http://t.weather.itboy.net/api/weather/city/{1}";

/**
 * 获取数据
 * @param id
 * @return
 */
@Cacheable(cacheNames = "weather_cache", key = "#id")// 从缓存获取,key为ID,缓存具体看 ehcache.xml 配置文件
public WeatherDto getById(String id) {
    log.info("WeatherManager#getById: id={}", id);

    try {
        RestTemplate restTemplate = new RestTemplate();
        WeatherDto dto = restTemplate.getForObject(SOJSON_WEATHER_URL , WeatherDto.class,id);

        if(dto != null && dto.isSuccess()){
            return dto;
        }else{
            log.error("获取天气数据返回错误:{}", dto);
        }
    } catch (RestClientException e) {
        log.error("获取天气数据返回错误,出现异常.", e);
    }
    return null;
}

就完成了。

天气接口返回

{
	"message": "success感谢又拍云(upyun.com)提供CDN赞助",
	"status": 200,
	"date": "20191216",
	"time": "2019-12-16 16:29:43",
	"cityInfo": {
		"city": "北京市",
		"citykey": "101010100",
		"parent": "北京",
		"updateTime": "16:18"
	},
	"data": {
		"shidu": "89%",
		"pm25": 79.0,
		"pm10": 0.0,
		"quality": "轻度污染",
		"wendu": "0",
		"ganmao": "儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼",
		"forecast": [{
			"date": "16",
			"high": "高温 2℃",
			"low": "低温 -3℃",
			"ymd": "2019-12-16",
			"week": "星期一",
			"sunrise": "07:28",
			"sunset": "16:50",
			"aqi": 97,
			"fx": "西风",
			"fl": "<3级",
			"type": "小雪",
			"notice": "小雪虽美,赏雪别着凉"
		}, {
			"date": "17",
			"high": "高温 5℃",
			"low": "低温 -7℃",
			"ymd": "2019-12-17",
			"week": "星期二",
			"sunrise": "07:29",
			"sunset": "16:51",
			"aqi": 30,
			"fx": "北风",
			"fl": "3-4级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "18",
			"high": "高温 2℃",
			"low": "低温 -7℃",
			"ymd": "2019-12-18",
			"week": "星期三",
			"sunrise": "07:30",
			"sunset": "16:51",
			"aqi": 50,
			"fx": "南风",
			"fl": "<3级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "19",
			"high": "高温 4℃",
			"low": "低温 -8℃",
			"ymd": "2019-12-19",
			"week": "星期四",
			"sunrise": "07:30",
			"sunset": "16:51",
			"aqi": 50,
			"fx": "北风",
			"fl": "3-4级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "20",
			"high": "高温 0℃",
			"low": "低温 -7℃",
			"ymd": "2019-12-20",
			"week": "星期五",
			"sunrise": "07:31",
			"sunset": "16:52",
			"aqi": 30,
			"fx": "南风",
			"fl": "<3级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "21",
			"high": "高温 2℃",
			"low": "低温 -7℃",
			"ymd": "2019-12-21",
			"week": "星期六",
			"sunrise": "07:32",
			"sunset": "16:52",
			"aqi": 66,
			"fx": "北风",
			"fl": "<3级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "22",
			"high": "高温 3℃",
			"low": "低温 -6℃",
			"ymd": "2019-12-22",
			"week": "星期日",
			"sunrise": "07:32",
			"sunset": "16:52",
			"fx": "西风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "23",
			"high": "高温 3℃",
			"low": "低温 -4℃",
			"ymd": "2019-12-23",
			"week": "星期一",
			"sunrise": "07:33",
			"sunset": "16:53",
			"fx": "西北风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "24",
			"high": "高温 3℃",
			"low": "低温 -4℃",
			"ymd": "2019-12-24",
			"week": "星期二",
			"sunrise": "07:33",
			"sunset": "16:53",
			"fx": "东北风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "25",
			"high": "高温 3℃",
			"low": "低温 -3℃",
			"ymd": "2019-12-25",
			"week": "星期三",
			"sunrise": "07:34",
			"sunset": "16:54",
			"fx": "西北风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "26",
			"high": "高温 4℃",
			"low": "低温 -5℃",
			"ymd": "2019-12-26",
			"week": "星期四",
			"sunrise": "07:34",
			"sunset": "16:55",
			"fx": "北风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "27",
			"high": "高温 -2℃",
			"low": "低温 -7℃",
			"ymd": "2019-12-27",
			"week": "星期五",
			"sunrise": "07:34",
			"sunset": "16:55",
			"fx": "东风",
			"fl": "<3级",
			"type": "阴",
			"notice": "不要被阴云遮挡住好心情"
		}, {
			"date": "28",
			"high": "高温 -1℃",
			"low": "低温 -8℃",
			"ymd": "2019-12-28",
			"week": "星期六",
			"sunrise": "07:35",
			"sunset": "16:56",
			"fx": "东南风",
			"fl": "<3级",
			"type": "晴",
			"notice": "愿你拥有比阳光明媚的心情"
		}, {
			"date": "29",
			"high": "高温 -3℃",
			"low": "低温 -8℃",
			"ymd": "2019-12-29",
			"week": "星期日",
			"sunrise": "07:35",
			"sunset": "16:57",
			"fx": "东南风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}, {
			"date": "30",
			"high": "高温 0℃",
			"low": "低温 -8℃",
			"ymd": "2019-12-30",
			"week": "星期一",
			"sunrise": "07:35",
			"sunset": "16:57",
			"fx": "东风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}],
		"yesterday": {
			"date": "15",
			"high": "高温 3℃",
			"low": "低温 -2℃",
			"ymd": "2019-12-15",
			"week": "星期日",
			"sunrise": "07:28",
			"sunset": "16:50",
			"aqi": 110,
			"fx": "西南风",
			"fl": "<3级",
			"type": "多云",
			"notice": "阴晴之间,谨防紫外线侵扰"
		}
	},
	"success": true
}

Ehcache缓存配置

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.ehcache.org/v3" xmlns:jsr107="http://www.ehcache.org/v3/jsr107" xsi:schemalocation="
            http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd
            http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd">
    <service>
        <jsr107:defaults enable-statistics="true"></jsr107:defaults>
    </service>

    <!-- user 为该缓存名称 对应@Cacheable的属性cacheNames-->
    <cache alias="weather_cache">
        <!-- 指定缓存 key 类型,对应@Cacheable的属性key -->
        <key-type>java.lang.String</key-type>
        <!-- 配置value类型 -->
        <value-type>com.sojson.weather.api.demo.dto.WeatherDto</value-type>
        <expiry>
            <!-- 缓存 ttl,单位为分钟,现在设置的是2个小时 -->
            <ttl unit="minutes">120</ttl>
        </expiry>
        <resources>
            <!-- 分配资源大小 -->
            <heap unit="entries">2000</heap>
            <offheap unit="MB">100</offheap>
        </resources>
    </cache>
</config>

这里配置了缓存ttl为120分钟,也就是2个小时,建议保持这个配置

天气接口源码下载

github:https://github.com/baichengzhou/weather.api

gitee:https://gitee.com/jsonla/weather.api 


版权所属:SO JSON在线解析

原文地址:https://www.sojson.com/blog/349.html

转载时必须以链接形式注明原始出处及本声明。

本文主题:

如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。

关于作者
一个低调而闷骚的男人。
相关文章
免费天气API,全国天气 JSON API接口,可以获取五天的天气预报
天气API,全国天气 JSON API接口,可以获取十五天的天气预报
天气预报 API,7天天气预报API,信息全,高精准天气API 接口说明
免费天气API天气JSON API,不限次数获取十五天的天气预报
Java API接口返回不是JSON的解决方案,SpringMVC返回JSON配置。
公安局网站备案信息查询API免费查询公安网备 API 代码说明
在线HTTP接口测试 - HTTP GET/POST模拟请求测试工具【更新说明】
溯源接口
新浪短链(t.cn)最新申请官方API的方法讲解
Springboot + Mybatis,数据库多数据源配置项目Demo【源码下载
最新文章
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。 137027
最热文章
Java获取浏览器请求头(User-Agent),分析浏览器信息,系统信息的几种办法。 137027
支付扫码

所有赞助/开支都讲公开明细,用于网站维护:赞助名单查看

查看我的收藏

正在加载... ...