3773| 2
|
[入门教程] 【2020】借助古德微树莓派,实现疫情实时播报 |
2020年初,新冠肺炎肆虐,及时获取实时疫情成为每一名中国人的迫切需求。本文介绍借助python图形化编程古德微机器人平台,用树莓派和OLED显示屏,实现疫情数据实时播报。本文主要思路是爬取网页信息,处理相关数据,数据实时输出。 一、确定爬取页面。 获取疫情实时信息,有很多网站都有提供,这里,我们选择是丁香园(https://lab.isaaclin.cn/nCoV/)疫情实时数据接口。进入网址后,可看到数据说明: 丁香园API提供了不同的接口,要查询各省疫情需要使用下面的接口:https://lab.isaaclin.cn/nCoV/api/area,具体说明如下图: 根据文档提示,下面我们使用查询山东省各地市的页面。地址为:https://lab.isaaclin.cn/nCoV/api/area?latest=1&province=山东省 打开网址,便确定了我们的目标数据,在网页中的山东省内各地市的疫情数据如下图: 密密麻麻的这么多数据,各种列表、元组和字典的嵌套,该怎样分析这这些数据呢? 二、分析数据,理清数据结构 我们的目标非常明确,那就是要取得各地市的名称,以及确诊人数。 1、Json数据在线解析。 如何把杂乱的数据清晰化显示,这里我们使用到了json在线解析。打开json.cn,进入json在线解析页面,将上一步中获得的json数据,粘贴到页面左侧,在页面右侧便出现了标准的数据格式。 2、理解数据层次结构 现在数据变得层次分明了,如何取得我们需要的数据。我们不妨采用“顺瓜摸滕”的方法。 以青岛为例,它存在于一个字典当中。从青岛这个字典中取出键为cityName的值就是青岛,从这个字典中取出键为confirmedCount的值即为47人,有了这两个键对应的值,就有了我们最终的目标:青岛和47的目标数据。 同理,我们需要滨州的数据,就要从滨州这个字典中取出相应键的值。 再倒着往回走一步,怎样确定青岛或者滨州这些字典呢? 将各个城市字典最小化,再次观察:原来所有的城市都包含在一个叫cities的列表中,青岛不过是这个cities列表的第1项而已,在python中,cities[0]就是青岛字典,最后一项就是滨州字典。 再往回倒,如何确定cities列表呢?继续观察数据结构:原来,cites列表藏在一个叫山东的字典里,里面包含着山东省的各项数据。需要cites列表,只需要取出键为cities的值即可。 “顺瓜摸滕”果然好用,重复使用,终于理清所有的数据结构:山东字典是省份列表的第1项,而这个省份列表又是返回字典的键为results的值。 确定了整个数据结果,接下来,我们就开始我们的图形化编程之旅了! 三、图形化编程,获取指定信息 登陆树莓派图形化编程软件古德微机器人平台,依次实现以下图形化编程: 1、获取请求数据。 初始化request对象。 获取请求数据,赋值给返回数据。 将返回数据转化为字典数组,赋值给返回字典。 2、处理字典列表,获得初步数据 如果获取数据成功,赋值是否变量为1。 如果获取成功,从返回字典中取得键为results的项的值,赋值给省份列表。 从省份列表中取得第1项,赋值给山东字典。 从山东字典中取得键为cities的项的值,赋值给地市列表。 3、建立循环,获取详细数据。 按照省内城市数目,建立一个i循环,分别取得地市列表中的第i项城市数据,从每一个城市数据获得每一个确定的城市字典。 从城市字典中获取键为cityName的值,即为具体的城市名称,赋值给城市变量。 从城市字典中获取键为confirmedCount的值,即为具体的确诊人数,赋值给确诊人数变量。 四、语音显示屏结果反馈 把获取的城市名称和确诊人数组合成相应的字符串,通过音箱进行动态语音播报。 把获取的城市名称和确诊人数组合成两行字符,用OLED屏形成两行文字,进行动态文字显示。 五、程序功能拓展: 至此,程序先后经历了页面爬取和数据分析,最后实现了相应的输出,其基本功能已经全部实现。但是如果再次深入思考,我们还有一些拓展的地方: 1、程序开始不够友好,OLED屏的显示也稍嫌单调。为此,我们在程序运行开始加一个语音播报和一个片头字幕。 语音播报内容为山东省各地市确诊认数实时通报。OLED显示屏显示一张图片33.jpg。图片内容如下: 2、程序输出中OLED文字输出也可以丰富一下形式,如增加一张背景图片。 其中11.jpg的内容作为城市和确认人数显示的背景图片,使显示更美观。 3、程序功能尽一步拓展。 本文我们仅仅使用了一个接口,获取了山东省的相关数据。我们知道丁香园API有很多接口,使用不同接口,就可以获取不同的数据。我们可以根据自己的需要,从数据中选取需要的数据,进行结果反馈,一定会使程序的各项功能更加强大。 再一步拓展,如果我们使用丁香园以外的API接口,我们数据就不必局限于疫情,按这个思路做下去,我们的数据资源会变得更加丰富。 期待大家的进一步发现,实现更多的功能! |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed