QQ机器人开发尝试-实现一个获取疫情信息的机器人
准备
最近全国都在密切关注2019-ncov的最新信息,我群的群友们也是,于是我就开发了这样的一个小程序来帮助大家获取最新信息
数据来源丁香园,感谢它为我们提供的最新数据
平台
机器人平台还是使用广泛使用的酷q,但是这个机器人平台的开发语言居然是易语言?!
好在有大佬提供了兼容层插件,可以让我们用websocket或者是http使用接口,链接
开发语言这次就使用python吧,当然也有大佬为我们提供了调用这个接口的库链接
配置
第一步当然是配置好机器人和我们的程序了
首先使用以下代码设置好一个websocket服务器让机器人链接
1 | bot = CQHttp(access_token='your-token', |
然后配置机器人,找到httpapi插件的配置文件,更改如下位置
1 | "ws_reverse_api_url": "ws://127.0.0.1:6700/ws/api/", |
其中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 | from requests_html import HTMLSession |
这样的几行语句就可以得到各地区的人数了,同样的方法可以得到全国人数以及新闻
自动播报
能够得到数据还没完,我还想实现一个自动播报新闻的功能
我们注意到,每一条新闻都有一个pubDate
属性,我们可以利用这个属性来判断有没有新的文章,即以下过程
获取全部文章->获取最新一个(就是第一个)的pubDate->如果与以记录的不同就发送信息并更新记录值->回到第一步