4002| 2
|
[入门教程] 掌控板独立显示天气信息 |
本帖最后由 kylinpoet 于 2019-11-25 12:55 编辑 上个星期在群里看到阿豪发了一篇文章说,掌控板不支持某个不需要apikey的天气网站的返回信息解码,今天研究了下,发现 http://wthrcdn.etouch.cn/weather_mini?citykey=101110101 这个天气网站的返回信息在掌控板里不能正常显示的原因是:它的内容是经过gzip压缩的,虚谷号因为使用的是完整的requests库,默认自动解压,所以返回数据是没有问题。 而掌控板自带的库 urequests 是阉割版的,没有提供解压功能,所以造成数据的乱码。 上午研究并解决了这个问题,发文记录下。 解决此问题,引入一个函数即可,具体请看代码: [mw_shl_code=python,true] from mpython import * import network import urequests import ujson def decompress(data): FTEXT = 1 FHCRC = 2 FEXTRA = 4 FNAME = 8 FCOMMENT = 16 assert data[0] == 0x1f and data[1] == 0x8b assert data[2] == 8 flg = data[3] assert flg & 0xe0 == 0 i = 10 if flg & FEXTRA: i += data[11] << 8 + data[10] + 2 if flg & FNAME: while data: i += 1 i += 1 if flg & FCOMMENT: while data: i += 1 i += 1 if flg & FHCRC: i += 2 return zlib.decompress(memoryview(data)[i:], -15) my_wifi = wifi() my_wifi.connectWiFi("wifi账号", 'wifi密码') oled.fill(0) oled.DispChar(my_wifi.sta.ifconfig()[0], 0, 0, 1) oled.show() url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101110101' r = urequests.get(url) result = ujson.loads(bytes(decompress(r.content))) print(result) oled.DispChar(result['data']['ganmao'], 0, 16, 1) oled.show() [/mw_shl_code] |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed