掌控板独立显示天气信息
本帖最后由 kylinpoet 于 2019-11-25 12:55 编辑上个星期在群里看到阿豪发了一篇文章说,掌控板不支持某个不需要apikey的天气网站的返回信息解码,今天研究了下,发现
http://wthrcdn.etouch.cn/weather_mini?citykey=101110101
这个天气网站的返回信息在掌控板里不能正常显示的原因是:它的内容是经过gzip压缩的,虚谷号因为使用的是完整的requests库,默认自动解压,所以返回数据是没有问题。
而掌控板自带的库 urequests 是阉割版的,没有提供解压功能,所以造成数据的乱码。
上午研究并解决了这个问题,发文记录下。
解决此问题,引入一个函数即可,具体请看代码:
from mpython import *
import network
import urequests
import ujson
def decompress(data):
FTEXT = 1
FHCRC = 2
FEXTRA = 4
FNAME = 8
FCOMMENT = 16
assert data == 0x1f and data == 0x8b
assert data == 8
flg = data
assert flg & 0xe0 == 0
i = 10
if flg & FEXTRA:
i += data << 8 + data + 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), -15)
my_wifi = wifi()
my_wifi.connectWiFi("wifi账号", 'wifi密码')
oled.fill(0)
oled.DispChar(my_wifi.sta.ifconfig(), 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()
多点图就更好了 陈老师,高人也
页:
[1]