系列文章目录
趣味项目—MyQQ机器人(一)
前言
前段时间看到了这个框架,感觉很有意思,学院有个学弟也开发了一个机器人放在群里,所以我也试了一试。花了一上午时间,有了一个雏形,还挺好玩的,在开发的过程中还可以复习和学习python的语法和应用。最近太忙了,要复习功课和数学,只能慢慢更新了。
一、下载MyQQ框架
进入MyQQ官网下载中心,下载这两个,进入开发文档按照新手教程进行配置,有一个地方文档没细说,要想正常使用是一定要设置回调端口的,教程里面只教设置监听端口,这些端口都要是其他系统任务和用户任务没用的,一般来说8888和8889没问题。
二、简单开发
1.先上代码
from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import urllib.parse
import random
import requests
listb = {1: '在食堂', 2: '在公教', 3: '在床上', 4: '在运动场', 5: '在不显山'}
lista = {1: '在食堂', 2: '在公教', 3: '在床上', 4: '在运动场', 5: '在不显山'}
listd = {1: '在学习', 2: '玩游戏', 3: '打篮球', 4: '在吃饭', 5: '迷路了'}
listc = {1: '在学习', 2: '玩游戏', 3: '打篮球', 4: '在吃饭', 5: '迷路了'}
host = ('localhost', 8890)
url = 'http://localhost:8889/MyQQHTTPAPI'
code='101190801'
url1='http://www.weather.com.cn/data/cityinfo/%s.html'% code
data1 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": "休息一下"
}
}
data5 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": "恒神我好爱你"
}
}
class Resquest(BaseHTTPRequestHandler):
def do_POST(self):
datas = self.rfile.read(int(self.headers['content-length'])).decode()
datas = json.loads(datas)
msg = urllib.parse.unquote(datas['MQ_msg'])
if int(datas['MQ_type'])==2:
print(datas['MQ_fromID'],datas['MQ_fromQQ'],msg)
if datas['MQ_fromQQ'] == "105xxxxx94":
requests.post(url=url, json=data5)
if msg == "恒神":
requests.post(url=url, json=data1)
if msg == "天气":
obj=urllib.request.urlopen(url1)
data_b = obj.read()
data_s = data_b.decode('utf-8')
data_dict = json.loads(data_s)
rt = data_dict['weatherinfo']
my_rt = ('%s,%s,%s~%s') % (rt['city'], rt['weather'], rt['temp1'], rt['temp2'])
data2 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "35xxxxx75",
"c2": "2",
"c3": "10xxxxx80",
"c4": "",
"c5": my_rt
}
}
requests.post(url=url, json=data2)
if msg == "我在哪":
a = random.sample(lista.keys(), 1)
b = a[0]
data3 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": lista[b]
}
}
requests.post(url=url, json=data3)
if msg == "我在干什么":
c = random.sample(listc.keys(), 1)
d = c[0]
data4 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": listc[d]
}
}
requests.post(url=url, json=data4)
if __name__ == '__main__':
server = HTTPServer(host, Resquest)
print("Starting server, listen at: %s:%s" % host)
server.serve_forever()
2.现有功能说明
用的是http的post方法,在百度一搜就有,也是csdn上的博客,据博主所说,现在的代码安全性是待考虑的,不过我就拿来玩玩,应该没什么问题。 现在设计了几个小功能,
datas = self.rfile.read(int(self.headers['content-length'])).decode()
datas = json.loads(datas)
msg = urllib.parse.unquote(datas['MQ_msg'])
这是对QQ消息的监听,我想应该和当时计网实验的时候一样,这是对udp抓包,这里好像是解析从服务器来的json文件,细节就不再追究了,得到msg也就是qq里面的消息,其实json文件里面有很多东西 下面就是为了整蛊我同学
if datas['MQ_fromQQ'] == "105xxxxx94":
requests.post(url=url, json=data5)
if msg == "恒神":
requests.post(url=url, json=data1)
只要监听到消息来自我同学的QQ,机器人就会马上自动发送诸如我爱你的消息。监听到群里有人发某个消息也会做出反应,让他休息一下
这是调用了一个天气的接口进行json解析,有人发天气就会查询我们这当地的天气发到群里
if msg == "天气":
obj=urllib.request.urlopen(url1)
data_b = obj.read()
data_s = data_b.decode('utf-8')
data_dict = json.loads(data_s)
rt = data_dict['weatherinfo']
my_rt = ('%s,%s,%s~%s') % (rt['city'], rt['weather'], rt['temp1'], rt['temp2'])
data2 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "35xxxxx75",
"c2": "2",
"c3": "10xxxxx80",
"c4": "",
"c5": my_rt
}
}
requests.post(url=url, json=data2)
下面就是一个玩具了,大家经常玩内卷游戏,就跟玩骰子一样,只要发了我在哪、我在干什么就会从字典里面随机发送键值,这样可以证明自己的清白
if msg == "我在哪":
a = random.sample(lista.keys(), 1)
b = a[0]
data3 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": lista[b]
}
}
requests.post(url=url, json=data3)
if msg == "我在干什么":
c = random.sample(listc.keys(), 1)
d = c[0]
data4 = {
"function": "Api_SendMsg",
"token": "hhh007",
"params": {
"c1": "350xxxxx75",
"c2": "2",
"c3": "102xxxxx80",
"c4": "",
"c5": listc[d]
}
}
requests.post(url=url, json=data4)
总结
后面想学一学诸如爬虫什么的和pandas之类的可以丰富功能,也可以学一学知识。
|