免费天气API,全国天气 JSON API接口,可以获取五天的天气预报
序言
稳定高效的天气API接口是很少有的,本站前一段时间开发了一个万年历,需要带天气预报,花了几天功夫,集成和容错处理好对外开放的天气接口。天气接口支持返回 JSON 和 XML 结果。并且可以获取到昨天,以及今天和未来4
天的天气预报。那么下面直接介绍天气预报的接口吧。
天气API详情介绍 在 API 中心:https://www.sojson.com/api/weather.html ,下面只介绍下调用方式,然后 用 Java 语言调用演示一下。
重要:此接口需要停用,请使用新接口,不限量,不定期更新,本接口只更新一次,新接口地址:https://www.sojson.com/blog/305.html
Java 请求 天气接口 Demo讲解:https://www.sojson.com/blog/349.html (Springboot + Ehcache)
天气接口答疑
1、接口能不能 ajax jsonp 的方式调用?
答:不能,必须后端语言,或者移动端语言调用,比如 Java 、PHP、C#,PY等,或者 Android,iOS 之类。
2、接口每天的更新时间是什么时候?
答:这个接口每天更新一次,时间大概是在凌晨的1~4点这样子。有的时候也有意外情况。
3、接口稳定吗?
答:应该,也许、如果的话,是稳定的。如果不明白的话,你摸着良心觉得您问的是不是废话。
4、天气有哪些状态?天气图片哪里获取?
答:这里有所有状态列表,并且所有状态矢量图都是有的,加群,需要付费5元,QQ 群:259217951,进去后回复“天气图片”,群机器人会告诉你的。如果 QQ 钱包没钱,请去 赞助链接 微信或者支付扫码支付5元,联系群主加入。
5、提示超过2000次是什么意思?
答:这个天气接口每天就更新一次,请你自己做缓存,一天可以请求2000次完全够了,多次提示超过2000,就会封 IP 段。
6、提示有恶意调用是什么意思?
答:因为你一直循环调用,没有做缓存,对服务器造成了很大的压力,请参照第五点。
7、我没有使用2000次,为什么提示超过2000次?
答:因为是采用 IP 段检测,假如你的 IP 是200.148.88.99
,那么对于的 IP 段就是200.148.88.*
,也就是这个IP 段下使用的资源是共享的。另外也可能是 CDN 缓存,刷新即可。
7、请求返回状态301?
答:请采用 HTTPS 请求,下面有对应的代码,如果是是 Java 请参考下面的代码,如果是其他语言,请自行百度“语言 + HTTPS
”相关关键词。
9、能不能一次性返回多个城市?一次性返回一个组合?能不能一次性返回7天、15天天气?能不能及时更新?能不能不限制3秒一次?能不能... ... ?
答:能!!!不过是收费。
PS:不要对我要求过多,我对你保证不了什么。理论上你不付费,我不能给你提供什么承诺。都是要成本的。虽说现在接口很稳定。但是我还是不会提供保证。另外,接口不是我求着你用,你爱用不用。虽然你使用本站,是我的上帝,但是技术面前,都是平等的,别一副高高在上的口吻和我说话。谢谢。
API最新消息
使用此接口的同学,请务必加QQ群(608222884 【验证信息 sojson api】)【免费的】,最近的变动会在群里提醒并通知。
- 最近 API 会变化,目前 API 从免费开放以来到现在,还是很稳定,最高一天达到
1.4
亿次调用,响应成功率达到98%
。还是很赞的。 - 目前我新购置了集群服务器,把 API 独立出去,涉及到的变化,域名从(www.sojson.com)改成了(api.sojson.com),支持 HTTPS 调用,字段稍微有变化,另外开放了及时天气和15天天气详细数据,不过是收费的,毕竟我也需要维护成本,不过比聚合API肯定便宜。
接口为什么最近有缓存
因为免费接口触及到了部分商家的奶酪,接口基本每天都会被攻击。 下面是被攻击的截图。不得已开启缓存模式,另外,好消息是新的接口,这些问题都没有,不会有缓存,因为每个人的接口 URL 地址都是不一样的。
部分 CC 攻击识别是接口调用太频繁造成的,你说你们的对我的伤害基本是爆击。
天气接口免费额度
1.每天每个IP段拥有2000次免费额度,每次请求间隔为3秒一次,如果没有间隔3秒去请求,永远都不会通过,因为每次请求都是重新计时。
2.请求频繁或者日请求量过大,会直接停封,比如秒并发达到100,比如日请求到达几万,服务器会自动屏蔽。也是禁用IP段。
天气接口调用注意事项
忠告:别把免费资源不当资源,能不能自己稍微做下缓存,或者全局变量方式缓存,要这样的用量,90%以上是无用的请求,那我怎么坚持下去?敬请理解,如果确实需要这么大的量,先联系,说清楚。
天气预报 API 接口 JSON返回
public static void json() throws Exception{
//参数url化
String city = java.net.URLEncoder.encode("北京", "utf-8");
//拼地址
String apiUrl = String.format("https://www.sojson.com/open/api/weather/json.shtml?city=%s",city);
//开始请求
URL url= new URL(apiUrl);
URLConnection open = url.openConnection();
InputStream input = open.getInputStream();
//这里转换为String,带上包名,怕你们引错包
String result = org.apache.commons.io.IOUtils.toString(input,"utf-8");
//输出
System.out.println(result);
}
如果 HTTPS 报错,Java请参考:https://www.sojson.com/blog/195.html,如果其他语言,请自行百度“语言 + HTTPS
”相关关键词。
天气预报 JSON 返回值:
{
"data": {
"yesterday": {
"date": "26日星期五",
"high": "高温 31℃",
"fx": "南风",
"low": "低温 17℃",
"fl": "微风",
"type": "晴"
},
"city": "北京",
"aqi": "83",
"forecast": [
{
"date": "27日星期六",
"high": "高温 34℃",
"fengli": "微风级",
"low": "低温 21℃",
"fengxiang": "西南风",
"type": "晴"
},
{
"date": "28日星期天",
"high": "高温 36℃",
"fengli": "3-4级",
"low": "低温 22℃",
"fengxiang": "北风",
"type": "多云"
},
{
"date": "29日星期一",
"high": "高温 29℃",
"fengli": "微风级",
"low": "低温 18℃",
"fengxiang": "东风",
"type": "阴"
},
{
"date": "30日星期二",
"high": "高温 30℃",
"fengli": "微风级",
"low": "低温 18℃",
"fengxiang": "南风",
"type": "阴"
},
{
"date": "31日星期三",
"high": "高温 32℃",
"fengli": "3-4级",
"low": "低温 20℃",
"fengxiang": "南风",
"type": "多云"
}
],
"ganmao": "各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。",
"wendu": "27"
},
"status": 200,
"message": "OK"
}
天气预报 API XML返回方式
public static void xml() throws Exception{
//参数url化
String city = java.net.URLEncoder.encode("北京", "utf-8");
//拼地址
String apiUrl = String.format("https://www.sojson.com/open/api/weather/xml.shtml?city=%s",city);
//开始请求
URL url= new URL(apiUrl);
URLConnection open = url.openConnection();
InputStream input = open.getInputStream();
//这里转换为String,带上包名,怕你们引错包
String result = org.apache.commons.io.IOUtils.toString(input,"utf-8");
//输出
System.out.println(result);
}
如果 HTTPS 报错,Java请参考:https://www.sojson.com/blog/195.html,如果其他语言,请自行百度“语言 + HTTPS”相关关键词。
天气预报 XML返回值:
<?xml version="1.0" encoding="UTF-8"?>
<resp>
<city>北京</city>
<updatetime>13:45</updatetime>
<wendu>27</wendu>
<fengli>3级</fengli>
<shidu>38%</shidu>
<fengxiang>东风</fengxiang>
<sunrise_1>04:51</sunrise_1>
<sunset_1>19:33</sunset_1>
<sunrise_2></sunrise_2>
<sunset_2></sunset_2>
<environment>
<aqi>83</aqi>
<pm25>61</pm25>
<suggest>极少数敏感人群应减少户外活动</suggest>
<quality>良</quality>
<MajorPollutants>颗粒物(PM2.5)</MajorPollutants>
<o3>148</o3>
<co>1</co>
<pm10>106</pm10>
<so2>27</so2>
<no2>47</no2>
<time>13:00:00</time>
</environment>
<yesterday>
<date_1>26日星期五</date_1>
<high_1>高温 31℃</high_1>
<low_1>低温 17℃</low_1>
<day_1>
<type_1>晴</type_1>
<fx_1>南风</fx_1>
<fl_1>微风</fl_1>
</day_1>
<night_1>
<type_1>晴</type_1>
<fx_1>北风</fx_1>
<fl_1>微风</fl_1>
</night_1>
</yesterday>
<forecast>
<weather>
<date>27日星期六</date>
<high>高温 34℃</high>
<low>低温 21℃</low>
<day>
<type>晴</type>
<fengxiang>西南风</fengxiang>
<fengli>微风级</fengli>
</day>
<night>
<type>晴</type>
<fengxiang>北风</fengxiang>
<fengli>微风级</fengli>
</night>
</weather>
<weather>
<date>28日星期天</date>
<high>高温 36℃</high>
<low>低温 22℃</low>
<day>
<type>多云</type>
<fengxiang>北风</fengxiang>
<fengli>3-4级</fengli>
</day>
<night>
<type>阴</type>
<fengxiang>东北风</fengxiang>
<fengli>微风级</fengli>
</night>
</weather>
<weather>
<date>29日星期一</date>
<high>高温 29℃</high>
<low>低温 18℃</low>
<day>
<type>阴</type>
<fengxiang>东风</fengxiang>
<fengli>微风级</fengli>
</day>
<night>
<type>阵雨</type>
<fengxiang>南风</fengxiang>
<fengli>微风级</fengli>
</night>
</weather>
<weather>
<date>30日星期二</date>
<high>高温 30℃</high>
<low>低温 18℃</low>
<day>
<type>阴</type>
<fengxiang>南风</fengxiang>
<fengli>微风级</fengli>
</day>
<night>
<type>多云</type>
<fengxiang>北风</fengxiang>
<fengli>微风级</fengli>
</night>
</weather>
<weather>
<date>31日星期三</date>
<high>高温 32℃</high>
<low>低温 20℃</low>
<day>
<type>多云</type>
<fengxiang>南风</fengxiang>
<fengli>3-4级</fengli>
</day>
<night>
<type>多云</type>
<fengxiang>南风</fengxiang>
<fengli>3-4级</fengli>
</night>
</weather>
</forecast>
<zhishus>
<zhishu>
<name>晨练指数</name>
<value>适宜</value>
<detail>天气不错,空气清新,是您晨练的大好时机,建议不同年龄段的人们积极参加户外健身活动。</detail>
</zhishu>
<zhishu>
<name>舒适度</name>
<value>很不舒适</value>
<detail>白天天气晴好,但烈日炎炎会使您会感到很热,很不舒适。</detail>
</zhishu>
<zhishu>
<name>穿衣指数</name>
<value>炎热</value>
<detail>天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。</detail>
</zhishu>
<zhishu>
<name>感冒指数</name>
<value>少发</value>
<detail>各项气象条件适宜,发生感冒机率较低。但请避免长期处于空调房间中,以防感冒。</detail>
</zhishu>
<zhishu>
<name>晾晒指数</name>
<value>极适宜</value>
<detail>天气不错,极适宜晾晒。抓紧时机把久未见阳光的衣物搬出来晒晒太阳吧!</detail>
</zhishu>
<zhishu>
<name>旅游指数</name>
<value>较适宜</value>
<detail>天气较好,感觉有点热,不过有微风伴您一路同行,还是较适宜旅游的,外出请注意防晒哦!</detail>
</zhishu>
<zhishu>
<name>紫外线强度</name>
<value>很强</value>
<detail>紫外线辐射极强,建议涂擦SPF20以上、PA++的防晒护肤品,尽量避免暴露于日光下。</detail>
</zhishu>
<zhishu>
<name>洗车指数</name>
<value>较适宜</value>
<detail>较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。</detail>
</zhishu>
<zhishu>
<name>运动指数</name>
<value>较适宜</value>
<detail>天气较好,户外运动请注意防晒。推荐您进行室内运动。</detail>
</zhishu>
<zhishu>
<name>约会指数</name>
<value>较不适宜</value>
<detail>天气较热,建议尽量不要去室外约会,如果外出,请您挑选荫凉的地点。</detail>
</zhishu>
<zhishu>
<name>雨伞指数</name>
<value>不带伞</value>
<detail>天气较好,您在出门的时候无须带雨伞。</detail>
</zhishu>
</zhishus>
</resp>
<!-- 10.10.162.42(10.10.162.42):38553 ; 10.10.156.163:8080 -->
注意的一点就是,参数中文要转码。要url转码。 Java 如下:
//参数url化
String city = java.net.URLEncoder.encode("北京", "utf-8");
还有一点就是,编码为UTF-8
本站使用的Demo,是在万年历功能使用,下面是截图。
万年历:https://www.sojson.com/time/wannianli.html
如果需要元素图片,也就是对应天气的素材图片,请加QQ群(259217951),然后回复 “天气图片”,会有机器人回复您,给你图片的下载地址,以及图片的对应含义。 JSON 格式的。
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/234.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。