关于V7版本的和风天气API获取注意事项,以及arduinojson数据处理

关于V7版本和风天气API获取注意事项


  • 由于和风官方公告:从2022年3月1日起,我们将陆续在Web API v7中强制使用Gzip压缩,不再支持返回未经压缩的数据。因此如果你之前使用的是未压缩数据,请尽快在你的程序中对数据进行gzip解压缩的处理。面对数据类型的变化,当前有些库已经不再适用于此情况下使用了,特此更新本篇内容。
  • 📌和风官方公告: https://blog.qweather.com/announce/gzip-is-required-in-api/

✨最近在做esp8266网络时钟天气中关于天气部分的升级,从原来以S6版本为架构获取改为V7版本天气的获取方式。因为S6在2020年2月20官方就已经停止对该版本的技术支持,在使用上虽然可以继续以这种方式获取,但是会变得不稳定,特别是未来三天天气有时候会出现无法获取到的情况,所以有必要进行升级。升级主要的内容就是,将原来json获取回来的数据进行重新参数定义。S6和V7获取的接送数据是不一样的。
  • 🔰V7版本的默认返回的json数据是gzip压缩的,而你在浏览器里面直接访问,得到的数据又不是的,所以,在串口输出的时候,又是一堆乱码,让人很困惑。其实在官网的开发文档里面有提到,却没有注意到,造成在代码编辑无法找到突破。
    V6版本的格式:
  
  String url = "https://free-api.heweather.net/s6/weather/now?lang=en&location=" + location + "&key=" + key;//V6版本

V7版本的格式: 默认是对数据进行gzip压缩的。

  
  String url = "https://devapi.qweather.com/v7/weather/now?lang=en&location=" + location + "&key=" + key ;
  • ⚡后面加上参数&gzipy主动返回压缩数据,&gzipn就是对返回数据是不进行压缩的。
  String url = "https://devapi.qweather.com/v7/weather/now?lang=en&location=" + location + "&key=" + key + "&gzip=n";
  • 🔖在获得和风天气json返回来的数据进行处理,需要用到arduinojson
  • 📌在这里推荐大家一个网站:根据arduinojson不同的版本自由选择合适自己的版本V5和V6
https://arduinojson.org/v6/assistant/
https://arduinojson.org/v5/assistant/
  • 🎉可以利用上面的网站对json数据进行处理,十分方便和快捷。上面提供了针对不同的开发板和系统的选择。
    例如:
{"code":"200","updateTime":"2020-12-28T08:11+08:00","fxLink":"http://hfx.link/3ep1","now":{"obsTime":"2020-12-28T07:33+08:00","temp":"11","feelsLike":"10","icon":"101","text":"Cloudy","wind360":"90","windDir":"E","windScale":"2","windSpeed":"9","humidity":"91","precip":"0.0","pressure":"1009","vis":"3","cloud":"91","dew":"10"},"refer":{"sources":["Weather China"],"license":["no commercial use"]}}
  • 🌿将上面的json天气数据拷贝到input输入栏里面,下面就自动将代码生成好了。
const char* json = "{\"code\":\"200\",\"updateTime\":\"2020-12-28T08:11+08:00\",\"fxLink\":\"http://hfx.link/3ep1\",\"now\":{\"obsTime\":\"2020-12-28T07:33+08:00\",\"temp\":\"11\",\"feelsLike\":\"10\",\"icon\":\"101\",\"text\":\"Cloudy\",\"wind360\":\"90\",\"windDir\":\"E\",\"windScale\":\"2\",\"windSpeed\":\"9\",\"humidity\":\"91\",\"precip\":\"0.0\",\"pressure\":\"1009\",\"vis\":\"3\",\"cloud\":\"91\",\"dew\":\"10\"},\"refer\":{\"sources\":[\"Weather China\"],\"license\":[\"no commercial use\"]}}";

DynamicJsonDocument doc(768);
deserializeJson(doc, json);

const char* code = doc["code"]; // "200"
const char* updateTime = doc["updateTime"]; // "2020-12-28T08:11+08:00"
const char* fxLink = doc["fxLink"]; // "http://hfx.link/3ep1"

JsonObject now = doc["now"];
const char* now_obsTime = now["obsTime"]; // "2020-12-28T07:33+08:00"
const char* now_temp = now["temp"]; // "11"
const char* now_feelsLike = now["feelsLike"]; // "10"
const char* now_icon = now["icon"]; // "101"
const char* now_text = now["text"]; // "Cloudy"
const char* now_wind360 = now["wind360"]; // "90"
const char* now_windDir = now["windDir"]; // "E"
const char* now_windScale = now["windScale"]; // "2"
const char* now_windSpeed = now["windSpeed"]; // "9"
const char* now_humidity = now["humidity"]; // "91"
const char* now_precip = now["precip"]; // "0.0"
const char* now_pressure = now["pressure"]; // "1009"
const char* now_vis = now["vis"]; // "3"
const char* now_cloud = now["cloud"]; // "91"
const char* now_dew = now["dew"]; // "10"

const char* refer_sources_0 = doc["refer"]["sources"][0]; // "Weather China"
const char* refer_license_0 = doc["refer"]["license"][0]; // "no commercial use"
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值