微信自动回复机器人

微信机器人

你可以使用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
 
 
原文地址:https://www.cnblogs.com/zhifeiji822/p/15588622.html