掌控板独立显示天气信息

2019-11-254993
AI 快速预览详细 收起
本文介绍了如何在掌控板上解决gzip压缩数据解码问题,使天气信息能够正常显示。通过引入一个解压函数,解决了urequests库不支持自动解压的问题。文章提供了详细的代码示例,帮助用户轻松实现天气信息的显示。


上个星期在群里看到阿豪发了一篇文章说,掌控板不支持某个不需要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]





创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
rzyzzxw
rzyzzxw
陈老师,高人也
gada888
gada888
多点图就更好了
- 没有更多了 -