起因:点灯科技气象数据接口暂停使用,寻找替代方案。
免费天气数据接口比较
(相关资料图)
数据来源 | 网络协议 | 内容编码 | 数据格式 | 接口限制 | 更新频率 |
---|---|---|---|---|---|
点灯科技 | HTTPS | None | JSON | 30次/天 | 2小时 |
和风天气 | HTTPS | Gzip | JSON | 1000次/天 | 10分钟 |
高德天气 | HTTPS | None | JSON | 300000/天 | 多次/时 |
通过 HTTP 获取数据
HTTPClient httpclient;WiFiClient wificlient;if(httpclient.begin(wificlient, URL)){ httpCode = httpclient.GET(); if(httpCode == HTTP_CODE_OK) String payload = httpclient.getString(); else Serial.printf("[HTTP] GET... failed, error: %s\n", httpclient.errorToString(httpCode).c_str()); httpclient.end();}
通过 HTTPS 获取数据
HTTPClient httpsclient;BearSSL::WiFiClientSecure wificlient;wificlient.setInsecure();if(httpsclient.begin(wificlient, URL)){ httpCode = httpsclient.GET(); if(httpCode == HTTP_CODE_OK) String payload = httpsclient.getString(); else Serial.printf("[HTTP] GET... failed, error: %s\n", httpsclient.errorToString(httpCode).c_str()); httpsclient.end();}
通过 HTTPS 获取压缩格式数据
HTTPClient httpsclient;BearSSL::WiFiClientSecure wificlient;wificlient.setInsecure();if(httpsclient.begin(wificlient, URL)){ httpCode = httpsclient.GET(); if(httpCode == HTTP_CODE_OK) { content_len = httpsclient.getSize(); // get length of document (is -1 when Server sends no Content-Length header) content_encoding = httpsclient.header("content-encoding"); if((httpsclient.hasHeader("content-encoding")) && (content_encoding.equals("gzip"))) { while((httpsclient.connected()) && ((content_len > 0) || (content_len == -1))) { available_size = wificlient.available(); // !返回值最大只有245. if(available_size) { realsize = (available_size > payload_buffer_size) ? payload_buffer_size : available_size; readBytesSize = wificlient.readBytes(payload_buffer+offset, realsize); offset += readBytesSize; if(content_len > 0) content_len -= readBytesSize; } } *payload_size = offset; } }}
采用tignioj/ArduinoZlib库对gzip格式的数据进行解压。ArduinoZlib
封装了zlib库的解压缩功能。
zlib库支持对gzip和Zip格式的数据进行解压和压缩。
数据完整性:函数wificlient.available()
返回的等待读取的数据字节数似乎有限制(245),需要多次读取才能获得完整的数据,因此应增加数据完整性检查。
数据存储:在进行 HTTP/HTTPS 访问时使用大数组会导致网络访问出错,使用malloc()
手动分配堆可以解决这个问题。
内存分配:使用malloc()
分配堆时需要切换内存管理方案为16KB cache + 48KB IRAM and 2nd Heap (shared)
,此时才支持标准的malloc()
API。具体信息可参见调整ICACHE与IRAM的比率。
数据检查:返回的天气数据不一定是正确的,可以使用String.indexOf()
查找返回的字符串数据中是否有指定的关键字。
和风天气:返回的数据已强制使用gzip
压缩,在请求头中添加&gzip=n
的方法已失效。如果仅使用和风天气的数据接口,可使用tignioj/ESP8266_Heweather库提供的接口来获取和风天气提供的天气数据。
版权声明:本文为「梦幻之心星」原创,依据 CC BY-NC-SA 4.0 许可证进行授权,转载请附上原文出处链接及本声明。
博客园地址:https://www.cnblogs.com/Sky-seeker
关注微信公众号,获取即时推送;点击左下角阅读原文,享受最佳阅读体验!
标签:
简要比较了几个免费天气数据接口;介绍了通过HTTP和HTTPS获取数据,以及Gzip压缩格式数据的获取;解压Gzip
解答:1、003010讲述了一个特殊的调查办公室,可以解决活人无法解决的案件。赵蓝韵,隶属于国家机关的特别
炫舞40步鬼步舞,炫舞aa挂这个很多人还不知道,现在让我们一起来看看吧!1、炫舞有个挂叫炫舞AA好多人用的
今天小编给大家介绍一款雷克萨斯UXEV(图片|配置|询价)2020款300e纯·悦,今天我们就具体的给大家介绍一下内
环境(Environment)《广东省全面推行清洁生产实施方案(2023-2025年)》印发5月8日,广东省发展改革委等部
每经AI快讯,广州市统计局发布《2022年广州市国民经济和社会发展统计公报》。该公报显示,2022年末广州市常
全球首发天玑9200+的新机iQOONeo8Pro将于23日发,今天官方继续为该机预热。“ iQOONeo8 Pro全球首发天玑旗
连日来,江西南昌各地利用无人植保机开展施肥、防治病虫害作业,加强田间管理,为夏粮丰产丰收打下基础。在
【岗位要求】1 热爱教育事业,关爱学生,责任心强,合作意识强;2 具有相应学科教师资格证;3 学历本科及以上
近年来,我国整体上电力供应能力不断加强,《“十四五”可再生能源发展规划》提出,在2030年非化石能源...
你们好,最近小品发现有诸多的小伙伴们对于宫保鸡丁的正宗做法鱼香肉丝,宫爆鸡丁的正宗做法这个问题都颇为
关于孕妇吃什么东西最好呢的内容,包含孕妇吃什么豆类最好?孕妇便秘吃什么东西最好孕妇怀孕期间吃什么最好
据报道,2023年下半年,高通将推出新一代安卓旗舰处理器骁龙8Gen3。该处理器采用1+5+2架构设计,即包括1颗
1、解除微信实名认证方法如下:打开【微信】APP,点击【我】---【钱包】,如下图。2、2、在打开的钱包界面
1、作者:蒋捷少年听雨歌楼上,红烛昏罗帐。2、壮年听雨客舟中,江阔云低,断雁叫西风。3、而今听雨僧庐下
黄金空头趋势午后黄金现价2018直接空黄金1小时下行趋势线压制周线月线三重�早盘震荡没有突破新高午后2017
港股午后走强,截至发稿,恒生指数、恒生科技指数均涨逾1%,互联网板块快速拉升,大型互联网巨头集体飘红,
5月15日兰州石化出台丁腈橡胶挂牌价:N41E报15500元 吨,3305挂牌价15500元 吨,3308挂牌价16500元 吨,暂稳。
东吴证券股份有限公司周尔双罗悦近期对华中数控进行研究并发布了研究报告《国产高端数控系统龙头产学研正循
5月13日,广州市规划和自然资源局官网公示了《广州交通大学项目地块控制性详细规划局部调整》。广州交通大
X 关闭
X 关闭