美文网首页python爱好者Py小工具潘森sibada
python使用itchat库实现微信机器人

python使用itchat库实现微信机器人

作者: DT0203 | 来源:发表于2017-04-15 11:16 被阅读6142次

    itchat是一个开源的微信个人号接口,可以使用该库进行微信网页版中的所有操作,比如:所有好友、添加好友、拉好友群聊、微信机器人等等。详细用户请看文档介绍,在这里

    本文主要使用该库完成一个能够处理微信消息的的图灵器人,包括好友聊天、群聊天。

    1、itchat库的安装

    pip install itchat
    

    安装完成后运行以下代码,会出现出现一张二维码,扫码登陆之后将会登陆微信网页。

    2、登陆

    import itchat
    # 登陆
    itchat.auto_login()   # 可设置hotReload = True
    # 运行并保持在线状态
    itchat.run()
    

    此外,itchat 也提供短时间内断线重连的功能,只需要添加hotReload = True参数,下次登陆时不需要通过扫描二维码,只需要在手机端确认登陆即可。

    3、消息的发送

    itchat 库可以发送 文本、图片、视频、附件等内容,如向微信文件传输助手发送消息,可这样:

    itchat.send('Hello', toUserName='filehelper')
    

    toUserName 为要向发送消息的人的微信号,可以在微信手机端点击查询,也可以使用itchat库中的search_friends函数来进行查找,返回其微信号,详细用法,自行查找官方文档。

    4、消息的接收

    ###################### 完整代码##############################
    # 加载库
    from itchat.content import *
    import requests
    import json
    import itchat
    
    itchat.auto_login(hotReload = True)
    # 调用图灵机器人的api,采用爬虫的原理,根据聊天消息返回回复内容
    def tuling(info):
        appkey = "e5ccc9c7c8834ec3b08940e290ff1559"
        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
    
    # 对于群聊信息,定义获取想要针对某个群进行机器人回复的群ID函数
    def group_id(name):
        df = itchat.search_chatrooms(name=name)
        return df[0]['UserName']
    
    # 注册文本消息,绑定到text_reply处理函数
    # text_reply msg_files可以处理好友之间的聊天回复
    @itchat.msg_register([TEXT,MAP,CARD,NOTE,SHARING])
    def text_reply(msg):
        itchat.send('%s' % tuling(msg['Text']),msg['FromUserName'])
    
    @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
    def download_files(msg):
        msg['Text'](msg['FileName'])
        return '@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName'])
    
    # 现在微信加了好多群,并不想对所有的群都进行设置微信机器人,只针对想要设置的群进行微信机器人,可进行如下设置
    @itchat.msg_register(TEXT, isGroupChat=True)
    def group_text_reply(msg):
        # 当然如果只想针对@你的人才回复,可以设置if msg['isAt']: 
        item = group_id(u'想要设置的群的名称')  # 根据自己的需求设置
        if msg['ToUserName'] == item:
            itchat.send(u'%s' % tuling(msg['Text']), item)
    
    itchat.run()
    

    那么,下面你的好友、微信群可以愉快的跟图灵机器人聊天啦~~~

    1.jpg

    相关文章

      网友评论

      • wh1335:w7 64位,试起来,功能ok!
      • c2c7af6fd2d9:不错!收藏了!
        9d682c3ac21e:我的跑起来也是,只有自己说话,才会得到自动回复
        DT0203:@卧槽网 谢谢:smile:
      • AlicFeng:会玩
      • 我不是刺猬_:```
        @itchat.msg_register(TEXT, isGroupChat=True)
        def group_text_reply(msg):
        # 当然如果只想针对@你的人才回复,可以设置if msg['isAt']:
        item = group_id(u'想要设置的群的名称') # 根据自己的需求设置
        if msg['ToUserName'] == item:
        itchat.send(u'%s' % tuling(msg['Text']), item)

        ```

        这个群名称是哪个?通过itchat.get_chatrooms()中,有username和nickname,但前者我粘贴近程序,提示out of index,nickname的话,群名称表情怎么办?
        davidac:提示out of index,是因为得到的是空值吧。群名称是指 username,通过 search_chatrooms() 搜索群。群名称有表情也可以,亲测。
      • davidac:df = itchat.search_chatrooms(name=name); df[0]['UserName'] 返回的是谁啊?为什么实际执行时,只有机器人账号在群里说话,才会得到自动回复呢?
        DT0203:@davidac 这里定义的函数是想找到指定群名称,返回那个群的username,以便下面经行调用,具体你自己运行下
        davidac:@DT0203 但返回的是什么呢?
        DT0203:@davidac 这里是你需要聊天的群名字
      • 吃蘑菇De大灰狼:你好,我刚入门python,我编译文件的时候,报错: File "itchat.py", line 2
        SyntaxError: Non-ASCII character '\xe7' in file itchat.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
        请问是环境的问题吗?
        吃蘑菇De大灰狼:@赫本z 恩恩,是编码问题,之前解决了
        赫本iii:@FFur 第一行加上编码注释utf-8

      本文标题:python使用itchat库实现微信机器人

      本文链接:https://www.haomeiwen.com/subject/arygattx.html