吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5580|回复: 19
收起左侧

[Python 转载] 【Python】用Nonebot编写实时疫情查询机器人插件

[复制链接]
六道佩奇 发表于 2020-5-5 01:35
本帖最后由 六道佩奇 于 2020-5-5 01:44 编辑

前言

刚刚发了个爬取实时疫情数据保存到Excel的帖子:【Python】爬取实时疫情数据并保存到Excel,有朋友说让把机器人实时查询疫情的插件代码给发一下,本来是因为这个插件需要配合Nonebot+酷Q(如果是曾经那个网页QQ和网页微信登录没被和谐的时候,倒是简单不少,可惜凉凉了,所有依靠这个开发的库也随之凉凉),一句两句也说不清楚,单独发代码没法运行才不想发的,既然有人想要了解,这里就简单介绍一下。

无图无真相,先看效果:
效果图

Nonebot介绍

官方介绍:传送门,内含使用教程,非常全面。

NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功能。

除了起到解析消息的作用,NoneBot 还为插件提供了大量实用的预设操作和权限控制机制,尤其对于命令处理器,它更是提供了完善且易用的会话机制和内部调用机制,以分别适应命令的连续交互和插件内部功能复用等需求。

NoneBot 在其底层与 酷Q 交互的部分使用 python-aiocqhttp 库,后者是 CQHTTP 插件 的一个 Python 异步 SDK,在 Quart 的基础上封装了与 CQHTTP 插件的网络交互。

得益于 Python 的 asyncio 机制,NoneBot 处理消息的吞吐量有了很大的保障,再配合 CQHTTP 插件可选的 WebSocket 通信方式(也是最建议的通信方式),NoneBot 的性能可以达到 HTTP 通信方式的两倍以上,相较于传统同步 I/O 的 HTTP 通信,更是有质的飞跃。

需要注意的是,NoneBot 仅支持 Python 3.7+ 及 CQHTTP 插件 v4.8+(但是我用Python3.6。5也没出啥问题。。。)

酷Q就不要介绍了吧,直接百度官网点进去下载就好了,就一普通软件。

代码

部署教程我就不写了,上面给了官网地址,里面的教程写得非常详细了,从安装到基本的使用再到进阶教程,都有,跟着一步一步走,小白也能成功的~下面直接给代码:

# -*- coding: gb2312 -*-
# Author : Daisf
# Date : 2020/4/30 22:45

import json
import re
import requests
from nonebot import on_command, CommandSession
from nonebot import on_natural_language, NLPSession, IntentCommand

@on_command('福建今日疫情', aliases=('福建今日疫情'))
async def yiqing(session: CommandSession):
    results = []
    alist = []
    url = "https://gwpre.sina.cn/interface/fymap2020_data.json?_=1588258367647&callback=dataAPIData"
    headers = {
                 "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                 "Chrome/80.0.3987.163 Safari/537.36"}
    r = requests.get(url, timeout=30, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    data = re.search("\(+([^)]*)\)+", r.text).group(1)
    hjson = json.loads(data)
    a = hjson['data']['list']
    for i in a:
        if i['ename'] == 'fujian':
            city = i['city']
            for j in city:
                name = j['name']  # 城市名称
                value = j['conNum']  # 累计确诊
                econNum = j['econNum']  # 现存确诊
                conadd = j['conadd']  # 今日确诊
                deathNum = j['deathNum']  # 累计死亡人数
                cureNum = j['cureNum']  # 累计治愈
                zerodays = j['zerodays']  # 零增长天数
                single_str = [name + '\n' + "累计确诊:" + value + '\n' +   "现存确诊:" + econNum + '\n' + 
                "今日确诊:" + conadd + '\n' +  "累计死亡人数:" + deathNum + '\n' + "累计治愈:" + cureNum + 
                '\n' +  "零增长天数:" + zerodays + '\n']
                results.append(single_str)
            break
        else:
            continue
    for i in range(len(results)):
        alist = alist + results[i]                        # 将列表里字符串的列表外壳去掉
    await session.send(''.join(alist))                # 将列表里的字符串拼接并输出

拓展

这个插件写得很粗糙呀,代码的功能只是当接收到“福建今日疫情”的命令返回事先确定好的爬取福建各城市疫情,但Nonebot的功能远远不止于此,这个代码只是作为一个简单案例演示分享一下,你可以写成通过获取你发送的城市去查询,而不是只能返回一个实现确定的省份,除此之外,还可以编写一下返回的session的格式,让它呈现的更像是一个表格,看起来会更加清楚和舒服。写得很浅,毕竟我是学机械的,对什么感兴趣就去了解一下,雨露均沾,我也才接触不久,大神勿喷~

免费评分

参与人数 4吾爱币 +4 热心值 +4 收起 理由
yjn866y + 1 + 1 我很赞同!
王星星 + 1 + 1 谢谢@Thanks!
hmily65 + 1 + 1 谢谢@Thanks!
78007488 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 六道佩奇 发表于 2020-5-5 15:36
萌虎乖乖 发表于 2020-5-5 08:02
??大佬我也是机械的   刚学到爬虫  你说的这些要看什么呀  我只知道基础语法……

有基础语法就看你主要想学习什么了,去学习那些库的使用方法,上面优Nonebot的官网,看了就会了
头像被屏蔽
小非凡 发表于 2020-5-6 03:39
78007488 发表于 2020-5-5 01:42
 楼主| 六道佩奇 发表于 2020-5-5 01:44
78007488 发表于 2020-5-5 01:42
同福建的 给你加分啦  正想学习PYTHON

哈哈,谢谢啦,加油~
萌虎乖乖 发表于 2020-5-5 08:02
六道佩奇 发表于 2020-5-5 01:44
哈哈,谢谢啦,加油~

??大佬我也是机械的   刚学到爬虫  你说的这些要看什么呀  我只知道基础语法……
vethenc 发表于 2020-5-5 08:22
感谢分享
yjn866y 发表于 2020-5-5 09:11
为兴趣而学习的人点赞。。。
x123355492 发表于 2020-5-5 09:12
我就是我不一样的烟火
ciker_li 发表于 2020-5-5 21:48
感谢分享
萌虎乖乖 发表于 2020-5-5 22:34
六道佩奇 发表于 2020-5-5 15:36
有基础语法就看你主要想学习什么了,去学习那些库的使用方法,上面优Nonebot的官网,看了就会了

哎……无聊爬爬妹子图练手  一天都搞不定……心好累哦?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 11:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表