中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------05 - 浩海泛舟的文章 - 知乎 https://zhuanlan.zhihu.com/p/51276692
泛舟上一篇画了一幅看着头晕的流程图以后,一夜思考.好吧,其实比之前都睡得早.由于文字信息的步骤判断有五个,再加上图片判断,就算按步骤来,每步判断,一样是这么复杂的情况,所以就算了,就按这个流程图来吧.今天直接上代码.不知各位读者能否看得懂?欢迎给泛舟留言…..
先看流程图,大致是一样的,有细节上的改动,我上传到网盘了. 链接:https://pan.baidu.com/s/1LCKFTlO2N7jeFK7zgJPqmA 提取码:yd9h
这里是代码:
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 30 17:48:12 2018
模块 itchat ,中文测试
@author: 浩海泛舟
"""
import time as 包_时间
import itchat as 包_微信机器人
import 身份证识别 as 包_身份证识别 #import 包名不能是中文
import pandas as 包_科学计算
from pandas.core.frame import DataFrame as 包_制表
# =============================================================================
# def 方法_步骤1关键字处理(消息,回复微信号的机器码):
# if 消息['Text'] == '来访登记':
# 回复 = 包_微信机器人.send('请给我发送清晰的身份证图片,以便提取身份证信息!',公司微信机器码)
# print(回复['BaseResponse']['ErrMsg'])
# #记录任务记录表,添加步骤1.
# 任务记录表.append('步骤1')
# else:
# 回复 = 包_微信机器人.send('上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记',公司微信机器码)
# print(回复['BaseResponse']['ErrMsg'])
# #改写任务记录表,只保留第一项时间项.
# 任务记录表 = 任务记录表[0:1]
# return
# =============================================================================
def 方法_更新excel记录(数据):
#读取excel文档
电子表格1 = './excel/访客登记表.xlsx'
数据表1 = 包_科学计算.read_excel(电子表格1, sheet_name=None)['Sheet1']
#数据 = [['张一','sxxx0089','面试','2018-11-30 14:35']]
数据表 = []
数据表.append(数据)
数据表2 = 包_制表(数据表)
数据表2.columns = ['姓名','身份证号码','来访目的','来访时间']
#合并两个表
数据列 = [数据表1,数据表2]
数据表3 = 包_科学计算.concat(数据列)
数据表3.to_excel(电子表格1,index = False)
def 方法_图片检测(消息,回复微信号的机器码):
if 消息['Type'] != 'Text':
图片名称 = 消息['FileName'].split('.')[0] #图片名称分割,去掉扩展名
图片路径 = './pic/%s.jpg'%图片名称
print(图片路径)
消息['Text'](图片路径)
图片 = 包_身份证识别.方法_获取图片码(图片路径)
#print(图片)
try:
姓名,性别,民族,出生日期,地址,身份证号码 = 包_身份证识别.方法_获取身份证信息(图片)
回复 = 包_微信机器人.send('姓名:%s \n性别:%s \n民族:%s \n出生日期:%s \n地址:%s \n身份证号码:%s \n请确认身份证信息是否正确 \n请回复 是或否'
%(姓名,性别,民族,出生日期,地址,身份证号码),公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
信息列表 = [姓名,性别,民族,出生日期,地址,身份证号码]
return 信息列表
except:
回复 = 包_微信机器人.send('图片处理失败,请发送正确的身份证图片,或者选择更清晰的身份证图片发送!',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
return
else:
print('信息类型错误,请输入图片类信息')
return
包_微信机器人.auto_login(hotReload=True) # itchat.auto_login(hotReload=True) 推出程序后暂存登陆状态,即一段时间不用扫码。
#获取公司微信号机器码,用于后面作判断
朋友列表 = 包_微信机器人.search_friends(name = '公司微信号')
公司微信机器码 = 朋友列表[0]['UserName']
#print(朋友列表)
#创建任务记录表
回复信息记录 = ''
任务记录表 = []
身份证信息临时表 = []
来访目的 = ''
访客信息记录表 = []
#时间戳
时间戳 = int(包_时间.time())
#时间戳添加到任务记录第一项
任务记录表.append(时间戳)
#注册信息类型,作用是当微信收到文本信息,或者图片信息时,执行下面的程序.
@包_微信机器人.msg_register([包_微信机器人.content.TEXT,包_微信机器人.content.PICTURE])
def 方法_消息处理(消息):
#使用全局变量
global 回复信息记录
global 任务记录表
global 访客信息记录表
global 身份证信息临时表
global 来访目的
#判读是否公司微信号
if str(消息['FromUserName']) == 公司微信机器码:
print('判断成功!')
#判断时间
消息时间 = int(消息['CreateTime'])
任务记录表长度 = len(任务记录表)
if 0 < (消息时间-任务记录表[0]) < 301: #判读时间差,是不是5分钟之内.
if 消息['Type'] != 'Text': #如果接收到图片信息
if 任务记录表长度 == 1:
回复 = 包_微信机器人.send('上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
elif 任务记录表长度 == 2:
信息列表 = 方法_图片检测(消息,公司微信机器码)
身份证信息临时表 = 信息列表[:]
任务记录表[0] = 消息时间
任务记录表.append('步骤2')
#回复信息记录 = '请确认身份证信息是否正确 \n请回复 是或否'
else:
回复 = 包_微信机器人.send(回复信息记录,公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
else: #如果接受到文字信息
if 任务记录表长度 == 1: #记录步骤0
if 消息['Text'] == '来访登记':
回复 = 包_微信机器人.send('请给我发送清晰的身份证图片,以便提取身份证信息!',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
#记录任务记录表,添加步骤1.
任务记录表[0] = 消息时间
任务记录表.append('步骤1')
回复信息记录 = '请给我发送清晰的身份证图片,以便提取身份证信息!'
else:
回复 = 包_微信机器人.send('上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
elif 任务记录表长度 == 2: #记录步骤1
回复 = 包_微信机器人.send(回复信息记录,公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
elif 任务记录表长度 == 3: #记录步骤2
if 消息['Text'] in ['是','否']:
if 消息['Text'] == '是':
回复 = 包_微信机器人.send('请输入来访目的',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
任务记录表[0] = 消息时间
任务记录表.append('步骤3')
访客信息记录表 = [身份证信息临时表[0],身份证信息临时表[-1]]
回复信息记录 = '请输入来访目的'
else:
回复 = 包_微信机器人.send('请重新发送清晰身份证图片',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
任务记录表[0] = 消息时间
任务记录表.pop() #删除任务列表最后一项,即步骤2
回复信息记录 = '请重新发送清晰身份证图片'
else:
回复 = 包_微信机器人.send('请确认身份证信息是否正确 \n请回复 是或否',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
elif 任务记录表长度 == 4: #记录步骤3
回复 = 包_微信机器人.send('确认来访目的是否正确,请输入 是或否 ',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
任务记录表.append('步骤4')
来访目的 = 消息['Text']
回复信息记录 = '确认来访目的是否正确,请输入 是或否 '
elif 任务记录表长度 == 5: #记录步骤4
if 消息['Text'] in ['是','否']:
if 消息['Text'] == '是':
回复 = 包_微信机器人.send('正在登记来访信息!',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
任务记录表[0] = 消息时间
任务记录表.append('步骤5')
访客信息记录表.append(来访目的)
来访时间 = 包_时间.strftime("%Y-%m-%d %H:%M",包_时间.localtime())
访客信息记录表.append(来访时间)
方法_更新excel记录(访客信息记录表)
任务记录表 = 任务记录表[0:1]
回复 = 包_微信机器人.send('登记完成,谢谢!',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
else:
回复 = 包_微信机器人.send('请重新发送来访目的',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
任务记录表[0] = 消息时间
任务记录表.pop() #删除任务列表最后一项,即步骤4
回复信息记录 = '请重新发送来访目的'
else:
回复 = 包_微信机器人.send('确认来访目的是否正确,请输入 是或否 ',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
else: #判读时间差,是不是5分钟之内.
if 消息['Type'] != 'Text':
回复 = 包_微信机器人.send('上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
else:
if 消息['Text'] == '来访登记':
回复 = 包_微信机器人.send('请给我发送清晰的身份证图片,以便提取身份证信息!',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
#记录任务记录表,添加步骤1.
任务记录表[0] = 消息时间
任务记录表.append('步骤1')
else:
回复 = 包_微信机器人.send('上一次操超时或没有对应的关键字,您是需要登记来访信息吗?请重新输入关键字:来访登记',公司微信机器码)
print(回复['BaseResponse']['ErrMsg'])
#改写任务记录表,只保留第一项时间项.
任务记录表 = 任务记录表[0:1]
else:
print('不是公司账号,不处理!')
if __name__ == '__main__':
包_微信机器人.auto_login()
包_时间.sleep(1)
包_微信机器人.send("文件助手你好哦", toUserName="filehelper")
包_微信机器人.run()
这段代码吸收了第三期身份证检测的代码,重新按流程写的.看着是不是一堆麻?
没事,泛舟会在下一篇进行解析,然后接着做代码优化.
Ps.感觉如果是有稿费的话,可以骗好多期的稿费呢!
感谢各位阅读,望勿喷.