准备

最近全国都在密切关注2019-ncov的最新信息,我群的群友们也是,于是我就开发了这样的一个小程序来帮助大家获取最新信息

数据来源丁香园,感谢它为我们提供的最新数据

平台

机器人平台还是使用广泛使用的酷q,但是这个机器人平台的开发语言居然是易语言?!

好在有大佬提供了兼容层插件,可以让我们用websocket或者是http使用接口,链接

开发语言这次就使用python吧,当然也有大佬为我们提供了调用这个接口的库链接

配置

第一步当然是配置好机器人和我们的程序了

首先使用以下代码设置好一个websocket服务器让机器人链接

1
2
3
bot = CQHttp(access_token='your-token',
enable_http_post=False)
bot.run(host='127.0.0.1', port=8080)

然后配置机器人,找到httpapi插件的配置文件,更改如下位置

1
2
3
4
"ws_reverse_api_url": "ws://127.0.0.1:6700/ws/api/",
"ws_reverse_event_url": "ws://127.0.0.1:6700/ws/event/",
"use_ws_reverse": true,
"access_token": "your-token",

其中your-token为访问令牌,随意设置

两个url请按照websocket服务器的信息填写,路径一定要按照这里的填写,不要少了最后哦的/

启动机器人和你的程序,你应该能看到一条连接成功的信息

开始开发

该项目的核心部分在于获取信息,先来看看信息获取部分

打开丁香园网站,经过一番观察,我们发现数据都藏在几个script标签内

而标签内的数据很有特点,他们都是这样的格式

1
try { window.A = B}catch(e){}

有趣的地方在于B,如果能够吧B提取出来,则B就是一个合法的json字符串,其中就包含了我们的信息,而A在同一个script标签内是不会变化的,我们就可以使用切片来得到B的值

为了获取这个script内的信息,我们也注意到每个script都有一个id

开始编码

我们使用一个库来帮助我们处理html

requests_html,这个库是大名鼎鼎的requests库的作者的另一个作品,同样很容易上手,功能强大

1
2
3
4
5
6
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://3g.dxy.cn/newh5/view/pneumonia')
data = r.html.find("#getAreaStat", first=True).text
data = data[27:-11]
data = json.loads(data)

这样的几行语句就可以得到各地区的人数了,同样的方法可以得到全国人数以及新闻

自动播报

能够得到数据还没完,我还想实现一个自动播报新闻的功能

我们注意到,每一条新闻都有一个pubDate属性,我们可以利用这个属性来判断有没有新的文章,即以下过程

获取全部文章->获取最新一个(就是第一个)的pubDate->如果与以记录的不同就发送信息并更新记录值->回到第一步

效果

源码