Python+ITchart实现微信机器人对指定的朋友和群自动回复
这里我主要用了3个机器人,可以切换。
1.图灵机器人 (傻的不行,一直在问别人问题,没有限制)
http://www.tuling123.com
2.showApi上的图灵机器人 (感觉最聪明,可以识别微信表情,英文,中文等,但是因为我是普通会员,每天1000次调用)
https://www.showapi.com/api/lookPoint/60
3.茉莉机器人 (功能丰富,但是只识别中文,不识别英文,微信表情)
http://www.itpk.cn/robot.php
代码如下:
from itchat.content import * import itchat import json import requests from ShowapiRequest import ShowapiRequest import os import time import datetime import urllib import urllib.request # 调用图灵机器人的api,根据聊天消息返回回复内容 def tuLing(info): appkey="************" #自己注册 url="http://www.tuling123.com/openapi/api?key=%s&;info=%s"%(appkey,info) req=requests.get(url) content=req.text data=json.loads(content) answer=data['text'] return answer # 调用showApi的图灵机器人,根据聊天消息返回回复内容 def showRobot(info="",nickName="",imgDir=""): my_appId='****' #自己注册 my_appSecret='******************' #自己注册 r = ShowapiRequest("http://route.showapi.com/60-27", my_appId, my_appSecret) r.addBodyPara("userid", nickName) if info !="": r.addBodyPara("info", info) else: r.addBodyPara("info", "你好") if imgDir !="" : r.addFilePara("img", imgDir) res = r.post() data=json.loads(res.text) return data['showapi_res_body']['text'] # 调用茉莉机器人是,根据聊天消息返回回复内容 # 指令: # 地区天气 上海天气 查询上海的天气预报(市级或县级地区) # 天气 天气 根据访问IP自动获取天气预报 # @tq您的ip地址 @tq8.8.8.8 查询IP地址为8.8.8.8的天气预报 # @ip您的ip地址 @ip8.8.8.8 查询IP地址为8.8.8.8的位置和经纬度 # ip ip 查询访问者的IP地址详情 # @qq要查询的QQ号码 @qq123456 查询QQ号码123456的信息 # @lol英雄联盟大区--角色名称 @lol艾欧尼亚--我要超神 查询艾欧尼亚区我要超神的战绩信息 # @sfz身份证号码 @sfz111111111111111111 查询身份证号码公民所在地、生日和性别 # @sjh手机号码 @sjh18888888888 查询手机号码归属地、城市区号和卡的类型 # @cy四字成语 @cy一马当先 【一马当先】的成语接龙 # 笑话 笑话 随机返回一个笑话 # 观音灵签 观音灵签 随机抽取观音灵签 # 月老灵签 月老灵签 随机抽取月老灵签 # 财神爷灵签 财神爷灵签 随机抽取财神爷灵签 def moLi_Robot(question): Key='***************' #自己注册 Secret='*******' #自己注册 url='http://i.itpk.cn/api.php?question=%s&api_key=%s&api_secret=%s'%(question,Key,Secret) req=requests.get(url) content=req.text if question in ['笑话','观音灵签','月老灵签','财神爷灵签']: if content.startswith(u'\ufeff'): content = content.encode('utf8')[3:].decode('utf8') jsondata=json.loads(content) # 处理'笑话','观音灵签','月老灵签','财神爷灵签'数据 if question=='笑话': data='%s\n%s'%(jsondata['title'],jsondata['content']) elif question=='观音灵签': data='签号:%s\n抽中:%s\n签语:%s\n解签:%s\n白话解签:%s\n'%(jsondata['number1'],jsondata['haohua'],jsondata['qianyu'],jsondata['shiyi'],jsondata['jieqian'],) elif question=='月老灵签': data='签号:%s\n抽中:%s\n诗意:%s\n解签:%s\n注释:%s\n白话解签:%s\n'%(jsondata['number1'],jsondata['haohua'],jsondata['shiyi'],jsondata['jieqian'],jsondata['zhushi'],jsondata['baihua']) else: # 财神爷灵签 data='签号:%s\n签语:%s\n注释:%s\n解签:%s\n解说:%s\n含义:%s\n婚姻:%s\n事业:%s\n功名:%s\n失物:%s\n出外移居:%s\n六甲:%s\n求财:%s\n交易:%s\n疾病:%s\n诉讼:%s\n运途:%s\n谋事:%s\n生意:%s\n'%( jsondata['number1'],jsondata['qianyu'],jsondata['zhushi'],jsondata['jieqian'],jsondata['jieshuo'],jsondata['jieguo'],jsondata['hunyin'],jsondata['shiye'],jsondata['gongming'],jsondata['shiwu'],jsondata['cwyj'],jsondata['liujia'],jsondata['qiucai'],jsondata['jiaoyi'],jsondata['jibin'],jsondata['susong'],jsondata['yuntu'],jsondata['moushi'],jsondata['hhzsy'], ) elif question=='指令': data="""指令: 地区天气 \t上海天气\t 查询上海的天气预报(市级或县级地区)\n 天气 \t天气\t 根据访问IP自动获取天气预报\n @tq您的ip地址\t@tq8.8.8.8\t查询IP地址为8.8.8.8的天气预报\n @ip您的ip地址\t@ip8.8.8.8\t查询IP地址为8.8.8.8的位置和经纬度\n ip\tip\t查询访问者的IP地址详情\n @qq要查询的QQ号码\t@qq123456\t查询QQ号码123456的信息\n @lol英雄联盟大区--角色名称\t @lol艾欧尼亚--我要超神\t查询艾欧尼亚区我要超神的战绩信息\n @sfz身份证号码\t@sfz111111111111111111\t查询身份证号码公民所在地、生日和性别\n @sjh手机号码 \t@sjh18888888888\t查询手机号码归属地、城市区号和卡的类型\n @cy四字成语\t@cy一马当先\t【一马当先】的成语接龙\n 笑话 \t笑话\t 随机返回一个笑话\n 观音灵签 \t观音灵签\t 随机抽取观音灵签\n 月老灵签 \t月老灵签\t 随机抽取月老灵签\n 财神爷灵签\t财神爷灵签\t随机抽取财神爷灵签\n """ else: data=content # return jsondata return data # 根据NickName[]查找UserName[] def findUserName(toNickName): u = [] for i in toNickName: try: u1 = itchat.search_friends(i)[0]['UserName'] u.append(u1) print('已将联系人\t',i,'\t加入了聊天机器人的对象') except Exception as E: print(i,"你没有此联系人") print('------------------------------------') return u # 根据群的NickName[]查找UserName[] def findQunUserName(toQunNickName): u = [] for i in toQunNickName: try: u1 = itchat.search_chatrooms(i)[0]['UserName'] u.append(u1) print('已将群\t',i,'\t加入了聊天机器人的对象') except Exception as E: print(i,"你没有此群") print('------------------------------------') return u if __name__ == '__main__': # 登录发送 itchat.auto_login(hotReload=True,statusStorageDir='itchat.pkl') myUserName=itchat.get_friends(update=True)[0]['UserName'] myNickName=itchat.get_friends(update=True)[0]['NickName'] # 对指定的人当机器人 toSendUserNickName = ['sssss', 'ttttt', 'mmmmm','sssssssssssssssss'] toRobotUserName = findUserName(toSendUserNickName) # 对指定的群当机器人 toSendQunNickName = ['test','test2'] toRobotQunUserName = findQunUserName(toSendQunNickName) # 使用的机器人 RobotName=['tuLing','showRobot','moLi_Robot'] usingRobot=RobotName[2] #群机器人 @itchat.msg_register(TEXT,isGroupChat=True) def reply(msg): answer="" for i in toRobotQunUserName: if msg['FromUserName'] == i and msg['ActualUserName'] != myUserName : if usingRobot=='tuLing': answer = tuLing(msg['Text']) elif usingRobot=='showRobot': answer = showRobot(msg['Text']) else: answer = moLi_Robot(msg['Text']) # print(answer) itchat.send_msg(answer, msg['FromUserName']) return @itchat.msg_register([TEXT,PICTURE],isFriendChat=True) def replyText(msg): fromNum=0 #toSendUserNickName[fromNum]给我发送信息 toNum=0 #判断我要给toSendUserNickName[toNum]发送信息 for i in toRobotUserName: # 判断发送消息的人是你选定的人 if msg['FromUserName']==i : # 传输的文件类型为照片 if msg['Type']=='Picture': # 判断使用 那个机器人 if usingRobot=='showRobot': # 下载照片 path =r'.\Info\Picture' try: os.makedirs(path) print("%s 文件夹创建成功" % path) except Exception as e: print("%s 文件夹创建失败,可能已经存在此文件夹" % path) path += r'\%s' % msg['FileName'] msg['Text'](path) # 打印信息 an = showRobot(imgDir=msg['Text']()) print(datetime.datetime.now(), '\n', toSendUserNickName[fromNum], '给 我 :\n\t', msg['FileName'], '\t存储在', path) elif usingRobot=='tuLing': an = tuLing('照片') else: an = moLi_Robot('照片') # 传输的是文字 else: # 判断使用 那个机器人 if usingRobot=='tuLing': an = tuLing(msg['Text']) elif usingRobot=='showRobot': an = showRobot(msg['Text']) else: an= moLi_Robot(msg['Text']) print(datetime.datetime.now(),'\n',toSendUserNickName[fromNum],'给 我 :\n\t',msg['Text'],'\n') print(datetime.datetime.now(),'\n','我 给', toSendUserNickName[fromNum], ':\n\t', an,'\n') itchat.send_msg(an,i) break else: fromNum += 1 # 我自己给上面指定的人发送信息,不是机器人发 for j in toRobotUserName: if msg['ToUserName']==j: break else: toNum += 1 if msg['FromUserName']==myUserName: # 传输的文件类型为照片 if msg['Type'] == 'Picture': print(datetime.datetime.now(),'\n','我 给',toSendUserNickName[toNum],':\n\t',msg['FileName'],'\n') else: print(datetime.datetime.now(), '\n', '我 给', toSendUserNickName[toNum], ':\n\t', msg['Text'], '\n') return itchat.run()
需要注册的机器人:
修改机器人:
修改对那几个朋友使用机器人(这里是你微信对他们的备注):
修改对那几个群使用机器人(这里是你微信上的群的名字):
如果是自己对指定的朋友聊天,聊天消息会体现在调试台上,如果是群回复则不会。
版权 作者:feiquan 出处:http://www.cnblogs.com/feiquan/ 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)
若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)