qqbot实现QQ消息的⾃动回复
最近每天早上准点出门去图书馆,中午回来吃饭睡午觉,晚上吃饭看视频,整个⼈都快整蒙了。然后就想起来⼲点其他的事来改善改善我这平淡的⽣活。
之前写的是⼀个itchat实现消息的⾃动回复,然后是调⽤的图灵机器⼈实现的⾃动对话。这⾥的QQ⾃动回复就没有⽤机器⼈⾃动回复了,⽽是从⽹页上爬取的祝福语,然后保存到数据库中,在QQ收到消息的时候,随机从数据库中取出⼀句祝福语回复发消息的好友。
开发环境:windows10 + pycharm
所需要的包为:requests、peewee、time、random、lxml、qqbot
⾸先在pycharm中新建⼀个⼯程,在⼯程下⾯创建python⽂件。先建⽴⼀个数据库⽤来保存爬取到的祝福语内容,以便⾃动回复的时候能够随机从数据库中提取:
#coding : UTF-8
#peewee是⼀种轻量级的ORM框架
#ORM(Object Relational Mapping)框架采⽤元数据来描述对象⼀关系映射细节,元数据⼀般采⽤XML格式,并且存放在专门的对象⼀映射⽂件中。import peewee
#创建数据库
db = peewee.SqliteDatabase("text.db")
#创建数据表
class Text(peewee.Model) :
#定义字段
平板连接电脑上网
text = peewee.TextField()
class Meta :形容老师的词语
#库表关联
database = db
if __name__ == "__main__" :
Text().create_table()
运⾏上⾯的程序,在项⽬下会出现⼀个.db的⽂件,就是创建的数据库,可以⾃⾏⽤数据库⼯具打开,这⾥就不演⽰了。然后要做的就是从祝福语⽹站上爬取祝福语,祝福语的⽹站为:
爬取祝福语具体的就不⽤解释了,以前写了好多爬⾍,爬取⽹页内容的也有,如果有不清楚的可以看看以前的博客。下⾯附上爬取祝福语的具体代码以及部分代码的解释:
2023高速公路免费日期表from lxml import etree
from models import Text
url_list = []
for i in range(1,11) :
urls = "www.aizhufu/duanxinku/column/77/" + str(i) + ".html"
url_list.append(urls)
headers = {
"Upgrade-Insecure-Requests" : "1",
"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36", }
for url in url_list :
res = (url=url, headers=headers)
潘阳个人资料
html = etree.)
text_list = html.xpath("//ul[@class='list']/li/span[2]/text()")
for text in text_list :
if(text != "内容"):
#实例化数据库模型
t = Text()
#字段赋值
< = text
#保存字段
t.save()
print(text)
#这⾥只是测试是否爬取到祝福语内容
print()
然后查看数据库是否已经保存爬取到的祝福语(这⾥只爬取了100条作为实验),数据库如下图所⽰:
这就完成了祝福语的爬取,接下来就是⽤qqbot来将消息发送出去。qqbot是采⽤的smart qq机制,也就是⽹页版QQ。
最后附上⾃动回消息的部分,只需要将上述⼏个部分放到⼀个⼯程⾥即可测试,有兴趣的可以尝试⼀下下。
import random
import time
from models import Text
#⾸先查询数据库
messages = Text.select()
电脑显示器不亮#创建⼀个消息列表
text_list = []qq自动回复语
#将数据库的消息放到列表中
for message in messages :
text_list.)
@qqbot.QQBotSlot
def onQQMessage(bot,contact,member,content) :
#当内容⾮空的时候,回复消息
if(content != ""):
#随机从列表中取出⼀条祝福语
sendData = random.choice(text_list)
#将祝福语发送给那个给你发消息的⼈
bot.SendTo(contact,sendData)
time.sleep(0.5)
if __name__ == "__main__" :
qqbot.RunBot()