我自己的机器人开源项目
import requests
import time
import pymysql.cursors
import bs4
import os
#-------------------------------------------
conn = pymysql.connect(
host='localhost', # MySQL服务器地址
user='root', # MySQL服务器端口号
password='123456', # 用户名
charset='utf8', # 密码
port=3306, # 端口
db='sg', # 数据库名称
)
cur = conn.cursor()
#-------------------------------------------
message_id_collect = [] #放入获取的消息ID以便进行判断是否有人说话
message_id_collect_again = [] #放入获取的消息ID以便进行判断是否有人说话
message_append = [] #添加获取的全部内容
class res_mess_html(): #获取网页的json
def __init__(self,url,headers):
self.url = url
self.headers = headers
def res_get_html(self): #获取最新的消息数据
res = requests.get(url=self.url,headers=self.headers).json() #获取数据json
mes_list = res["data"]["messages"] #键值取值
for res_get_mes in mes_list: #循环获取全部内容
#res_get = res_get_mes.replace(r'')
message_append.append(res_get_mes)
#print(message_append)
return None
class res_mess_post(): #回答消息
def res_separate_mes(self):
mes_get_append = message_append[-1] # 最新的消息记录
mes_content = mes_get_append["message"] # 拿取消息内容
mes_content_sender = mes_get_append["sender"]["nickname"] # 拿取消息发送者的名字
print(">>>>>>>:获取:" + mes_content_sender + ':' + mes_content) # 检查是否正常
return mes_content
def API_get_answer(self,mes_content): # 聊天API的调用,并获取回答
if mes_content == "涩图": #回答消息的第一优先级
o=requests.get(url="https://api.lolicon.app/setu/v2",headers=headers).json()
xinxi=o['data'][0] #json信息
zuoping=xinxi['title'] #作品名字
zuozhe=xinxi['author'] #作者
oo=o["data"][-1]["urls"]['original']
msg="[CQ:image,file={0}] 作品名字:{1} 作者:{2}".format(oo,zuoping,zuozhe)
#=========================================================新闻爬虫=========================================================
elif mes_content == "新闻":
paqu=requests.get("https://top.baidu.com/board?tab=realtime")
content = paqu.text.encode('utf-8')
soup = bs4.BeautifulSoup(content, 'lxml')
pp=soup.find_all(class_="c-single-text-ellipsis")
xinwen_list=[]
for i in pp:
xinwen_list.append(i.text)
ppp=str(xinwen_list)
pppp=ppp.replace( ',', '-----')
ppppp=pppp.replace("'",'')
msg=ppppp
#======================================================名字引擎============================================================
elif mes_content[0:2] == "mz":
mz=mes_content[2:]
sql0 = "SELECT * FROM shuju0 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
list_xinxi=[]
cur.execute(sql0, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql2 = "SELECT * FROM shuju2 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql2, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql3 = "SELECT * FROM shuju3 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql3, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql4 = "SELECT * FROM shuju4 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql4, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql5 = "SELECT * FROM shuju5 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql5, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql6 = "SELECT * FROM shuju6 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql6, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql7 = "SELECT * FROM shuju7 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql7, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql8 = "SELECT * FROM shuju8 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql8, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql9 = "SELECT * FROM shuju9 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql9, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql10 = "SELECT * FROM shuju10 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql10, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql11 = "SELECT * FROM shuju11 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql11, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql12 = "SELECT * FROM shuju12 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql12, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
sql13 = "SELECT * FROM shuju13 WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(sql13, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
guanxiwang1 = "SELECT * FROM guanxiwang WHERE mingzi1 LIKE %s;"
params = ['%' + mz + '%']
cur.execute(guanxiwang1, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
guanxiwang2 = "SELECT * FROM guanxiwang WHERE mingzi2 LIKE %s;"
params = ['%' + mz + '%']
cur.execute(guanxiwang2, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
guanxiwang3 = "SELECT * FROM guanxiwang WHERE mingzi3 LIKE %s;"
params = ['%' + mz + '%']
cur.execute(guanxiwang3, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
qinshi = "SELECT * FROM qinshi WHERE mingzi LIKE %s;"
params = ['%' + mz + '%']
cur.execute(qinshi, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
list_xinxi.append(xinxi_jiaru)#加入信息
msg=str(list_xinxi)
#====================================================寝室=================================================================
elif mes_content[0:2] == "qs":
list_xinxi=[]
qs=mes_content[2:]
qinshi = "SELECT * FROM qinshi WHERE qinshi LIKE %s;"
params = ['%' + qs + '%']
cur.execute(qinshi, params)
rest = cur.fetchall()
xinxi_jiaru=str(rest) #元组转化为文本
msg=xinxi_jiaru
#=====================================================图片名字============================================================
elif mes_content[0:2] == "tp":
mztp=mes_content[2:]
path = 'file:///D:/tp/'
o = mztp + ".jpg"
path1 = os.path.join(path, o)
msg="[CQ:image,file={0}]名字:{1}".format(path1,mztp)
#======================================================名字引擎============================================================
else: #回答消息的第二优先级
urls = "http://api.qingyunke.com/api.php?key=free&appid=0&msg={}".format(mes_content)
answer_get = requests.get(url=urls, headers=headers).json()
answer_content = answer_get["content"] # 获取API回答的内容
print(">>>>>>>:回答:" + answer_content) # 检察是否可以正常运行
msg = answer_content
return msg
def post_url(self,msg): #进行回复
group_id = res_mes_post["group_id"] # 群号
urls = "http://127.0.0.1:5700/send_group_msg?group_id=" + group_id + "&message=" + msg
answer_post_use = requests.post(url=urls, headers=headers).json() # 发送消息
print(">>>>>>>:已回答")
class answer_check():
def answer_post_again(self): # 发消息前的消息ID
res_get_first = message_append[-1]
res_mes_id = res_get_first["message_id"]
message_id_collect.append(res_mes_id)
nums = message_id_collect[-1]
# print(nums)
return nums # 返回nums以便进行对比
def answer_post_again_check(self): # 发消息后的消息ID
res_get_again = message_append[-2]
res_mes_id_again = res_get_again["message_id"]
message_id_collect_again.append(res_mes_id_again)
numss = message_id_collect_again[-1]
# print(numss)
return numss # 返回nums以便进行对比
class list_clear():
def list_clears(self): # 清除列表中的所有元素
message_append.clear()
message_id_collect.clear()
message_id_collect_again.clear()
def get_F(url,headers):
while True:
# 实例化类
res_post_mes = res_mess_html(url=url, headers=headers)
res_mess_posts = res_mess_post()
# 调用API实现机器人回复
mes_content = res_mess_posts.res_separate_mes()
msg = res_mess_posts.API_get_answer(mes_content=mes_content)
return msg
def get_post(url,headers):
while True:
#实例化类
res_post_mes = res_mess_html(url=url, headers=headers)
res_mess_posts = res_mess_post()
res_answer_check = answer_check()
#获取发消息前的消息ID
res_post_mes.res_get_html()
n = res_answer_check.answer_post_again()
#调用API实现机器人回复
mes_content = res_mess_posts.res_separate_mes()
msg = res_mess_posts.API_get_answer(mes_content=mes_content)
post = res_mess_posts.post_url(msg=msg)
#刷新页面准备循环拿取消息ID
res_post_mes.res_get_html()
time.sleep(1)
while True:
#循环获取最新消息的ID
res_post_mes.res_get_html()
m = res_answer_check.answer_post_again_check()
time.sleep(1)
# print(message_id_collect_again)
if n == m: #比对消息ID验证是否有新消息
#print(">>>>>>>:无消息")
s = list_clear()
s.list_clears()#清除列表中的所有元素
time.sleep(3)
# print(message_append,message_id_collect,mes_content)
pass
else:
#print(">>>>>>>:有消息")
s= list_clear()
s.list_clears()
# print(message_append, message_id_collect, mes_content)
break
if __name__ == '__main__':
res_mes_post = {"instruction_message": "message_seq", "group_id": "579086236", "message_id": ""}
message_group_id = res_mes_post["group_id"]
url = "http://127.0.0.1:5700/get_group_msg_history?group_id=" + message_group_id
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3947.100 Safari/537.36"}
get_post(url=url,headers=headers)
conn.close()