zoukankan      html  css  js  c++  java
  • 微信自动回复机器人

    微信机器人

    你可以使用itchat-uos

    2017年后,新注册的微信基本登录不了网页版,itchat-uos版本利用统信UOS的网页版微信,可以让你绕过网页微信的登录限制。

    你只需要执行下条命令便能复活itchat

    pip install itchat-uos

    然后再import itchat就可以使用了

    此时会显示“桌面微信”而不是“网页微信”了

    但是这样只能用扫码登录了,不能用自动登录
    运行程序,扫码登录之后会在项目路径下创建一个itchat.pkl文件,
    该文件用于存储登录的状态,所以不要动它,如果你想换一个微信账号登录,
    就要先把这个文件删除,因为该文件记录的是上一个微信的登陆状态,删除之后即可切换账号登录。
     

    19.3.4 发送信息

    itchat提供了几个发送不同类型信息的函数,没有发送语音的原因是网页版没有这个接口,可供调用
    的函数如表19.1所示。

    函数名 作用
    send_msg() 发送文字信息
    send_file() 发送文件
    send_video() 发送视频
    send_image() 发送图片
    使用代码示例如下:

    import itchat
    import time

    def after():
    user_info = itchat.search_friends(name='培杰')
    if len(user_info) > 0:
    # 拿到用户名
    user_name = user_info[0]['UserName']
    # 发送文字信息
    itchat.send_msg('培杰你好啊!', user_name)
    # 发送图片
    time.sleep(10)
    itchat.send_image('cat.jpg', user_name)
    # 发送文件
    time.sleep(10)
    itchat.send_file('19_2.py', user_name)
    # 发送视频
    time.sleep(10)
    itchat.send_video('sport.mp4', user_name)


    if __name__ == '__main__':
    itchat.auto_login(loginCallback=after)
    itchat.run()

    19.2.4 监听信息

    除了主动发送信息外,还可以对信息进行监控,支持对多种类型的信息进行监控,类型如表19.2所示。
    另外,有多个注册信息监听,后注册的信息优先级高于先注册信息,带参数信息高于不带参数信息。

    信息类型 解释
    itchat.content.TEXT 文本内容
    itchat.content.MAP 位置文本
    itchat.content.Card 名片
    itchat.content.Note 通知文本
    itchat.content.Sharing 分享名称
    itchat.content.RECORDING 录音
    itchat.PICTURE 图片/表情
    itchat.content.VOICE 录音
    itchat.content.ATTACHMENT 附件
    itchat.content.VIDEO 短视频
    itchat.content.FRIENDS 好友邀请
    itchat.content.SYSTEM 系统信息
    一个监听到文字信息并响应信息的代码示例如下:

    import itchat


    @itchat.msg_register(itchat.content.TEXT)
    def reply_msg(msg):
    if msg['Content'] == u'你好':
    itchat.send_msg(msg['User']['NickName'] + "你好啊!", msg['FromUserName'])


    if __name__ == '__main__':
    itchat.auto_login()
    itchat.run()

    19.2.5 群聊

    在微信网页端改版后,创建群聊、拉人进群和删除群聊这几个接口都用不了,现在利用itchat能做的有:查找群聊,往群聊发送信息,以及监控群聊信息,使用代码示例如下:

    import itchat
    import time


    @itchat.msg_register(itchat.content.TEXT, isGroupChat=True)
    def reply_msg(msg):
    print("收到一条群信息:", msg['ActualNickName'], msg['Content'])


    def after_login():
    # 获得完整的群聊列表
    print("完整的群聊列表如下:")
    print(itchat.get_chatrooms())
    # 查找特定群聊
    time.sleep(10)
    # 通过群聊名查找
    chat_rooms = itchat.search_chatrooms(name='小猪的Python学习交流群')
    if len(chat_rooms) > 0:
    itchat.send_msg('测试', chat_rooms[0]['UserName'])


    if __name__ == '__main__':
    itchat.auto_login(loginCallback=after_login)
    itchat.run()

    19.3 实用示例:定时发送消息

    定时发送信息这个操作在日常生活中非常实用,比如给别人发生日或者节日祝福,晚上12点准时发,如果有早睡习惯的要熬到12点就很难受了,我们可以利用itchat编写一个简单的定时发送信息脚本。这里我们用到一个apscheduler定时调度任务模块,在命令行键入pip install apscheduler即可完成安装。这里并不会详细讲解,有兴趣的可移步到官方文档自行查阅:
    http://apscheduler.readthedocs.io/en/latest/userguide.html
    定时发送消息的代码示例如下:

    import itchat
    from apscheduler.schedulers.blocking import BlockingScheduler
    import time


    # 发送信息
    def send_msg():
    user_info = itchat.search_friends(name='培杰')
    if len(user_info) > 0:
    user_name = user_info[0]['UserName']
    itchat.send_msg('生日快乐哦!', toUserName=user_name)


    def after_login():
    sched.add_job(send_msg, 'cron', year=2018, month=7, day=28, hour=16, minute=5, second=30)
    sched.start()


    def after_logout():
    sched.shutdown()


    if __name__ == '__main__':
    sched = BlockingScheduler()
    itchat.auto_login(loginCallback=after_login, exitCallback=after_login)
    itchat.run()

     

    19.4 实用示例:集成图灵API制作聊天机器人

    import itchat
    import requests
    from itchat.content import TEXT
    def get_response(msg):
      apiUrl1="https://api.jisuapi.com/iqa/query?"
      data1={'appkey':'a5ff0f0ec15f06be','question':msg,}
      r = requests.get(apiUrl1, data1).json()
      t=r.get("result")
      return(t.get('content'))


    @itchat.msg_register(itchat.content.TEXT)
    def print_content(msg):
      print(msg['Text'])
      r=get_response(msg['Text'])
      itchat.send_msg(r, msg['FromUserName'])
    itchat.auto_login()
    itchat.run()

    19.5.4 定时清理缓存

    另外,我们的信息都是用一个字典存着的,时间长了的话,数据会很多,而且图片文件这些会越攒越多,我们可以添加一个定时任务,比如每隔五分钟清理一下创建时长超过2分钟的信息和对应的文件。相关代码如下:

    # 每隔五种分钟执行一次清理任务
    def clear_cache():
    # 当前时间
    cur_time = time.time()
    # 遍历字典,如果有创建时间超过2分钟(120s)的记录,删除,非文本的话,连文件也删除
    for key in list(rec_msg_dict.keys()):
    if int(cur_time) - int(rec_msg_dict.get(key).get('msg_create_time')) > 120:
    if not rec_msg_dict.get(key).get('msg_type') == 'Text':
    file_path = os.path.join(rec_tmp_dir, rec_msg_dict.get(key).get('msg_content'))
    print(file_path)
    if os.path.exists(file_path):
    os.remove(file_path)
    rec_msg_dict.pop(key)

    # 开始轮询任务
    def start_schedule():
    sched.add_job(clear_cache, 'interval', minutes=2)
    sched.start()


    # 退出停止所有任务并清空缓存文件夹
    def after_logout():
    sched.shutdown()
    shutil.rmtree(rec_tmp_dir)

    if __name__ == '__main__':
    sched = BlockingScheduler()
    if not os.path.exists(rec_tmp_dir):
    os.mkdir(rec_tmp_dir)
    itchat.auto_login(exitCallback=after_logout)
    itchat.run(blockThread=False)
    start_schedule()
    ————————————————


    https://blog.csdn.net/coder_pig/article/details/81357810?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0.essearch_pc_relevant&spm=1001.2101.3001.4242.1
     
     
  • 相关阅读:
    资料下载
    sublime安装AngularJS插件
    Zen Coding: 一种快速编写HTML/CSS代码的方法[Emmet]
    手机号码归属地API
    浅谈JavaScript中的作用域
    原生ajax、jsoup
    Java排序:选择排序
    Java排序:冒泡排序
    Oracle系列一、基本术语
    linux jdk tomcat 安装
  • 原文地址:https://www.cnblogs.com/zhifeiji822/p/15588622.html
Copyright © 2011-2022 走看看