博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+ITchart实现微信机器人对指定的朋友和群自动回复
阅读量:4357 次
发布时间:2019-06-07

本文共 8565 字,大约阅读时间需要 28 分钟。

  这里我主要用了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 itchatimport jsonimport requestsfrom ShowapiRequest import ShowapiRequestimport osimport  timeimport  datetimeimport urllibimport 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的位置和经纬度\nip\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 uif __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/版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(*/ω\*)

 

  

转载于:https://www.cnblogs.com/feiquan/p/10002445.html

你可能感兴趣的文章
Tarjian算法求强联通分量
查看>>
thinkphp命令行生成模型类
查看>>
【转载】如何更容易地打开小米手机后盖
查看>>
CTE测试
查看>>
JavaScript unshift()怎样添加数据的?
查看>>
在XP系统下如何访问win10共享的打印机
查看>>
ubuntu下安装eclipse
查看>>
hashMap与 hashTable , ArrayList与linkedList 的区别(详细)
查看>>
珍惜当下(转)
查看>>
免费iOS第三方推送工具Urban Airship使用教程
查看>>
用python进行数据分析--引言
查看>>
springboot详解
查看>>
android 真机配置
查看>>
Python字符串格式化
查看>>
Spark RDD和DataSet与DataFrame转换成RDD
查看>>
香菇鸡汤
查看>>
C/S模型之TCP群聊
查看>>
STL之优先级队列priority_queue
查看>>
STL之List容器
查看>>
codefoeces 610 C
查看>>