zoukankan      html  css  js  c++  java
  • ItChat与图灵机器人的结合

    • 前景:

    我在知乎关注一位大佬 名字叫 LittleCoder

    我是在他开发ItChat包时关注的

    ItChat已经完成了微信的个人账号的API接口

    已经实现了实时获取用户的即时信息并自动化进行回应

    后来又看到了国内的人工智能机器人团队TURING ROBOT研发的智能机器人

    并提供了给开发者的详尽的API调用文档

    既是说

    个人账号可以通过ItChat获取即时消息 并实时通过图灵机器人的API得到反馈发送出去

    再简单点就是说 使用这两者 构建了一个微信端的智能机器人

    • 环境搭建

      0.首先需要一个个人的微信号、有网的电脑、手机

      1.下载安装Python

        这里推荐一个发行版的Python 并且全平台支持

        下载地址:https://www.anaconda.com/download

        截至目前 该发行版已经支持了Python3.7 同时也提供2.7版本

        在终端中输入 python 查看当前python是否安装成功 有图下反馈 即是成功安装(版本号无所谓)

        

        2.下载安装pip

        pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能

        在终端中输入如下命令来判断是否有安装pip 

        若有安装 则会反馈版本号

        

    pip --version

        若没有安装 则运行如下命令

    $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py   # 下载安装脚本
    $ sudo python get-pip.py    # 运行安装脚本

        

        3.下载安装ItChat

    pip install itchat

        若pip与Python安装没有错误 itchat应该很顺利的就下载安装完毕了

        4.获取图灵机器人

        在图灵机器人官网 http://www.tuling123.com 注册账号

        

         随便填写就好了

        在如下界面 得到每一个机器人的专属Key 类似于机器人的身份证

        如图:
        

        在人物设置中 根据个人情况设置机器人的属性

    • 配置机器人

        在图灵机器人的接入API文档中得到相关信息

        https://www.kancloud.cn/turing/www-tuling123-com/718227

        通过分析 得到他的使用方法:

        首先向API发送你的三个信息:你的机器人KEY、向机器人发送的信息、用户标识。

        将这三个信息打包成一个Post请求发送

        就可以得到机器人的回复

        测试代码:

        text1.py

        

    from importlib import reload
    import sys
    reload(sys)
    
    import requests
    import itchat
     
    
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key'    : 'key请手动替换', 
        'info'   : 'hello',          # 这是我们发出去的消息
        'userid' : 'wechat-robot',      # 这里你想改什么都可以
    }
    # 我们通过如下命令发送一个post请求
    r = requests.post(apiUrl, data=data).json()
    
    # 让我们打印一下返回的值,看一下我们拿到了什么
    print(r)

        

        在idle中运行:
        

        我们向机器人机器人发送了 hello

        机器人向我们回复了 你好

        证明我们成功实现了与机器人的交流

        下一步 只需要从微信读取与发送数据就行了

        优化部分内容

        text2.py

     1 # coding=utf8
     2 import requests
     3 import itchat
     4 
     5 KEY = '填写你的key'
     6 
     7 
     8 # 请求图灵机器人并得到返回消息
     9 def get_response(msg):
    10     apiUrl = 'http://www.tuling123.com/openapi/api'
    11 
    12     data = {
    13         'key': KEY,
    14         'info': msg,
    15         'userid': 'Joeric07'
    16     }
    17 
    18     try:
    19         r = requests.post(apiUrl, data=data).json()
    20         return r.get('text')
    21     except:
    22         return

        提供了一个外部接口 用户输入的信息保存为msg 一次请求将key、msg、id一同发送 得到文本回复

    • 配置微信接口

        微信有一个文件助手 用来给自己收发文件 也可以输入文字

        尝试1:我们尝试使用python来登陆自己的微信 并通过itchat来给自己的文件助手发送一条信息

        text1_send_to_filehelper.py

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

        第二行代码执行时 会生成一个二维码 使用手机登录微信扫描二维码 即可登录

        文件助手的id是 filehelper

        运行后 可以在手机查看到 自己已经给文件助手发送了一条消息"Hello,filehelper"

        尝试2:在微信中回复收到的消息

        text2_relpy_msg.py

    import itchat
    
    @itchat.msg_register(itchat.content.TEXT)
    def text_reply(msg):
        return msg.text
    
    itchat.auto_login()
    itchat.run()

        以上代码将登录者的微信收到的私聊消息原封不动的返回发送回去

        使用修饰器将text_reply(msg)作为参数给itchat.msg_register(itchat.content.TEXT)

        即相当于itchat.msg_register(itchat.content.TEXT(text_reply(msg)))

        尝试3:在微信群聊中回复被@的信息

        text3_reply_@msg.py

    import itchat
    
    @itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
    def text_reply(msg):
    if msg['isAt']:
    reply = msg['Text']
    itchat.send(u'@%su2005 %s' % (msg['ActualNickName'], reply), msg['FromUserName'])
    
    itchat.auto_login()
    itchat.run()

        以上代码将在微信群聊中 当检测到登录者被@ 且@后有信息时 返回信息

        返回信息为 @发送者 信息

        信息为发送者@登录者后的信息

    • 结合
     1 # coding=utf8
     2 import requests
     3 import itchat
     4 
     5 KEY = '在此填入key'
     6 
     7 
     8 # 请求图灵机器人并得到返回消息
     9 def get_response(msg):
    10     apiUrl = 'http://www.tuling123.com/openapi/api'
    11 
    12     data = {
    13         'key': KEY,
    14         'info': msg,
    15         'userid': 'Joeric07'
    16     }
    17 
    18     try:
    19         r = requests.post(apiUrl, data=data).json()
    20         return r.get('text')
    21     except:
    22         return
    23 # 微信私聊回复
    24 @itchat.msg_register(itchat.content.TEXT)
    25 def tuling_reply(msg):
    26     default_reply = 'I received: ' + msg['Text']
    27     #调用图灵机器人
    28     reply = get_response(msg['Text'])
    29     return reply or default_reply
    30 
    31 # 微信群聊回复
    32 @itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
    33 def text_reply(msg):
    34     if msg['isAt']:
    35         # 调用机器人
    36         reply = get_response(msg['Text'])
    37         itchat.send(u'@%su2005: %s' % (msg['ActualNickName'], reply), msg['FromUserName'])
    38 
    39 itchat.auto_login(hotReload=True)
    40 itchat.run()    

        

        ok好了能跑了 而且响应速度还挺快 基本上秒回了

        不过现阶段的缺点是 不支持表情 emoj表情会被解读成无法识别的字典形式的英文

        itchat可以自动根据文件类别做出回复 应该可以本地建立一个万金油式的表情包库

        在遇到无法解读的情况时 随机发送一个即可

        

  • 相关阅读:
    web框架开发-Django模型层(1)之ORM简介和单表操作
    web框架开发-模板层
    生产者-消费者模式
    不变模式
    SynchronousQueue
    ThreadLocal
    锁的优化以及Java虚拟机对锁优化所做的努力
    随机数据结构:跳表(SkipList)
    数据共享通道:BlockingQueue
    CopyOnWriteArrayList
  • 原文地址:https://www.cnblogs.com/Joeric07/p/9781469.html
Copyright © 2011-2022 走看看