中文编程,最精致的python访客登记系统实例项目,微信机器人不再只当人工智障------05

中文编程,最精致的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.感觉如果是有稿费的话,可以骗好多期的稿费呢!

感谢各位阅读,望勿喷.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值