别再手动算考勤了!我用Python+企业微信API写了个自动统计脚本(附源码)
告别手工考勤Python企业微信API自动化统计实战指南每次月底统计考勤时行政同事总要加班到深夜手动核对上百条打卡记录。迟到、早退、外勤打卡...各种状态让人眼花缭乱。作为技术团队的一员我决定用Python企业微信API打造一个自动化解决方案。这个脚本不仅能自动获取打卡数据还能智能分析考勤状态最终生成可视化报表。整个过程无需复杂数据库只需50行核心代码特别适合中小企业的技术团队快速部署。1. 企业微信API准备与配置企业微信提供了完善的打卡接口但使用前需要完成几个必要步骤。首先登录企业微信管理后台进入「应用管理」→「打卡」记录下你的CorpID和Secret。这两个参数相当于API访问的钥匙。注意Secret只在创建时显示一次务必妥善保存。如果遗失需要重新生成。接下来创建接收数据的应用。在「应用与小程序」中新建一个自建应用设置可见范围后记下AgentId。这三个参数构成API调用的基础# 配置参数示例 config { corp_id: wwxxxxxxxxxx, secret: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, agent_id: 1000002 }企业微信API采用OAuth2.0认证我们需要先获取access_token。这个token有效期2小时建议在脚本中加入自动刷新逻辑import requests import json def get_access_token(corp_id, secret): url fhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{corp_id}corpsecret{secret} response requests.get(url) return response.json().get(access_token)2. 打卡数据获取与解析获取到access_token后就可以调取打卡数据了。企业微信提供两种接口打卡记录获取原始打卡流水打卡规则获取班次、考勤组等配置信息我们主要使用第一个接口。关键参数包括start_time/end_time查询时间范围userid_list指定员工列表为空则查全部def get_checkin_data(token, start_date, end_date, userid_listNone): url https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckindata params { access_token: token, starttime: int(start_date.timestamp()), endtime: int(end_date.timestamp()), useridlist: userid_list or [] } response requests.post(url, jsonparams) return response.json().get(checkindata, [])返回的JSON数据结构复杂主要包含这些关键字段userid员工企业微信IDcheckin_type打卡类型上班/下班exception_type异常类型0正常1迟到2早退等location_title打卡位置wifiname连接WiFi名称3. 考勤状态智能判断逻辑原始数据需要转换为可读的考勤状态。我们定义一个状态映射字典STATUS_MAPPING { (0, 上班打卡): 正常上班, (0, 下班打卡): 正常下班, (1, 上班打卡): 迟到, (2, 下班打卡): 早退, (3, None): 缺卡, (4, None): 外勤打卡 }实际处理时还需要考虑这些特殊情况多次打卡取最早上班和最晚下班记录请假时段需要对接请假系统数据跨日班次夜班人员的特殊处理建议使用pandas进行数据处理import pandas as pd def process_checkin_data(raw_data): df pd.DataFrame(raw_data) # 转换时间戳 df[datetime] pd.to_datetime(df[checkin_time], units) # 按用户分组 grouped df.groupby(userid) # 计算最早上班和最晚下班 result grouped.agg({ datetime: [min, max], exception_type: first }) return result4. 完整脚本实现与部署方案将上述模块组合成完整解决方案。脚本主要流程获取access_token拉取打卡原始数据处理分析考勤状态生成可视化报表核心代码结构如下# main.py import config from datetime import datetime, timedelta from data_fetcher import get_checkin_data from processor import process_checkin_data def main(): # 1. 认证 token get_access_token(config.corp_id, config.secret) # 2. 获取数据默认查询昨天 end_date datetime.now() start_date end_date - timedelta(days1) raw_data get_checkin_data(token, start_date, end_date) # 3. 处理数据 report process_checkin_data(raw_data) # 4. 输出结果 print(report.to_markdown()) if __name__ __main__: main()部署时建议采用定时任务。Linux服务器可以使用crontab# 每天上午9点运行 0 9 * * * /usr/bin/python3 /path/to/main.py /var/log/checkin.log对于Windows服务器可以创建计划任务或使用Python的APScheduler库实现内部定时。5. 异常处理与性能优化实际运行中可能遇到各种问题需要完善的错误处理try: token get_access_token(config.corp_id, config.secret) if not token: raise ValueError(获取token失败) except requests.exceptions.RequestException as e: print(f网络请求异常: {e}) except json.JSONDecodeError: print(API返回数据解析失败)性能优化建议缓存机制将access_token缓存到文件/内存避免频繁获取增量查询记录上次查询时间只获取新数据批量处理当员工数量多时分批查询避免超时# 分批查询示例 def batch_query(user_ids, batch_size50): for i in range(0, len(user_ids), batch_size): batch user_ids[i:i batch_size] data get_checkin_data(token, start_date, end_date, batch) yield from data6. 数据可视化与报表输出最终结果可以多种形式呈现控制台表格适合快速查看Excel报表便于行政存档可视化图表直观展示考勤趋势使用pandas的样式功能可以美化控制台输出def format_report(df): styled df.style\ .applymap(color_status)\ .set_caption(每日考勤统计)\ .format({工作时长: {:.1f}小时}) return styled def color_status(val): if val 迟到: return color: red elif val 早退: return color: orange return color: green生成Excel报表也很简单df.to_excel(考勤统计.xlsx, sheet_name月度汇总, freeze_panes(1,0))对于长期运行的系统建议将数据保存到数据库。SQLite是轻量级选择import sqlite3 def save_to_db(data): conn sqlite3.connect(attendance.db) data.to_sql(checkin_records, conn, if_existsappend) conn.close()我在实际部署中发现最实用的功能是自动发送日报到管理群。添加企业微信消息接口即可实现def send_report(report, token): url fhttps://qyapi.weixin.qq.com/cgi-bin/message/send?access_token{token} payload { touser: all, msgtype: markdown, agentid: config.agent_id, markdown: { content: f**今日考勤报告**\n{report} } } requests.post(url, jsonpayload)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2627506.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!