Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况

简介: 新冠疫情期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担

新冠疫情期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担任这家公司的人事主管,每天按部门来出员工考勤报表就不是一件容易事了,所以利用钉钉开放的接口,使用Django自己打造一套实时监控员工考勤的web平台是我们本次的目的。

项目背景是一家普通科技公司,大概有五个部门,每个部门100人左右

首先进入钉钉开放平台 :open-dev.dingtalk.com

在企业内部开发中,选择小程序,新建一个小程序应用,这里其实也还有别的选择,比如h5微应用,主要是小程序兼容性更好一点。

填写应用的名称、简介、Logo等基本信息这些按下不表,按照要求填写即可,也不必非得填写真实信息,这里有个坑就是一定不要忘了配置安全域名或者ip,安全域名是当我们的检测平台上线的时候部署的域名,应用可以跟指定的域名进行网络通信,如果不配置的话,请求钉钉接口会报403错误。

另外还有一个坑,也就是钉钉默认开放的接口仅限于基础权限接口

如果需要考勤或者签到接口的话,还得单独点击申请,这就有点让人看不懂了,那么多接口,全都得靠用鼠标点击开通,不开通就用不了,这个用户体验真是让人非常酸爽,产品设计成这样,钉钉的pm难辞其咎。

OK,前置准备工作就已经就绪了,现在我们只要根据官方文档来写接口就可以了,选择服务端api文档:https://ding-doc.dingtalk.com/doc#/serverapi2/gh60vz

钉钉考勤打卡的接口说明是这样的:

该接口用于返回企业内员工的实际打卡记录。比如,企业给一个员工设定的排班是上午9点和下午6点各打一次卡,但是员工在这期间打了多次,该接口会把所有的打卡记录都返回。

如果只要获取打卡结果数据,不需要详情数据,可使用获取打卡结果接口。

请求方式:POST(HTTPS)

请求地址:https://oapi.dingtalk.com/attendance/listRecord?access\_token=ACCESS\_TOKEN

请求包结构体:

{
"userIds": ["001","002"],
"checkDateFrom": "yyyy-MM-dd hh:mm:ss",
"checkDateTo": "yyyy-MM-dd hh:mm:ss",
"isI18n":"false"
}

这里每个接口都需要一个access\_token用来鉴权,这个token是用id和秘钥通过接口交换回来的,具体在应用详情里可以获取

这里我们封装成方法

import requests  
  
appkey = '你的key'  
appsecret = '你的秘钥'  
  
api_url = "https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s"%(appkey,appsecret)  
  
def get_token():  
    res = requests.get(api_url)  
    if res.status_code == 200:  
        str_res = res.text  
        token = (json.loads(str_res)).get('access_token')  
        return token

搞定了token,还需要获取您的部门下所有员工的员工id,因为考勤接口参数只能接受员工id,而非部门id

#获取用户id  

token = get_token()  
  
#获取用户id  
res = requests.get('https://oapi.dingtalk.com/user/simplelist?access_token=%s&department_id=235636048' % token)  
str_res = res.text  
res = json.loads(str_res)  
ids = []  
id_name = {}  
for val in res['userlist']:  
    ids.append(val['userid'])  
    id_name[val['userid']] = val['name']  
  
n = 50  #大列表中几个数据组成一个小列表  
l = ids  
biglist = [l[i:i + n] for i in range(0, len(l), n)]

最后请求考勤接口即可

result_all = []  
  
#请求打卡接口  
for x in biglist:  
    res = requests.post('https://oapi.dingtalk.com/attendance/list?access_token=%s' % token,json ={'access_token':token,'workDateFrom':'%s 00:00:00' % mydate,'workDateTo':'%s 10:00:00' % mydate,'userIdList':str(x),'offset':0,'limit':50})  
    str_res = res.text  
    #print(str_res)  
    res = json.loads(str_res)  
    for xy in res['recordresult']:  
        result_all.append(xy)  
  
slist = []  
for val in result_all:  
    if val['timeResult'] == 'NotSigned':  
        print(val['timeResult'])  
        mydic = {}  
        mydic[id_name[val['userId']]] = '未打卡'  
        slist.append(mydic)

完整的后台Django后台接口

import requests  
from rest_framework.response import Response  
from rest_framework.views import APIView  
import time  
  
appkey = '你的key'  
appsecret = '你的秘钥'  
  
api_url = "https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s"%(appkey,appsecret)  
  
def get_token():  
    res = requests.get(api_url)  
    if res.status_code == 200:  
        str_res = res.text  
        token = (json.loads(str_res)).get('access_token')  
        return token  
  
class GetQianHandler(APIView):  
  
    def get(self,request):  
  
  
        mydate = request.GET.get('date',None)  
  
        if mydate == None:  
  
            return Response({'message':'需要传递日期'})  
  
          
        dt_start = '%s 00:00:00' % mydate  
        dt_end = '%s 23:59:59' % mydate  
        ts_start = int(time.mktime(time.strptime(dt_start, "%Y-%m-%d %H:%M:%S"))) * 1000  
        ts_end = int(time.mktime(time.strptime(dt_end, "%Y-%m-%d %H:%M:%S"))) * 1000  
  
        token = get_token()  
  
        #获取用户id  
        res = requests.get('https://oapi.dingtalk.com/user/simplelist?access_token=%s&department_id=235636048' % token)  
        str_res = res.text  
        res = json.loads(str_res)  
        ids = []  
        id_name = {}  
        for val in res['userlist']:  
            ids.append(val['userid'])  
            id_name[val['userid']] = val['name']  
  
        n = 50  #大列表中几个数据组成一个小列表  
        l = ids  
        biglist = [l[i:i + n] for i in range(0, len(l), n)]  
  
        result_all = []  
  
        print('workDateFrom %s 00:00:00' % mydate)  
  
        #请求打卡接口  
        for x in biglist:  
            res = requests.post('https://oapi.dingtalk.com/attendance/list?access_token=%s' % token,json ={'access_token':token,'workDateFrom':'%s 00:00:00' % mydate,'workDateTo':'%s 10:00:00' % mydate,'userIdList':str(x),'offset':0,'limit':50})  
            str_res = res.text  
            #print(str_res)  
            res = json.loads(str_res)  
            for xy in res['recordresult']:  
                result_all.append(xy)  
  
        slist = []  
        for val in result_all:  
            if val['timeResult'] == 'NotSigned':  
                print(val['timeResult'])  
                mydic = {}  
                mydic[id_name[val['userId']]] = '未打卡'  
                slist.append(mydic)  
  
        return Response(slist)

这样,就可以愉快的通过线上平台来实时监测部门员工考勤了,效果是这样的:

相关文章
|
8月前
|
存储 监控 算法
员工电脑监控场景下 Python 红黑树算法的深度解析
在当代企业管理范式中,员工电脑监控业已成为一种广泛采用的策略性手段,其核心目标在于维护企业信息安全、提升工作效能并确保合规性。借助对员工电脑操作的实时监测机制,企业能够敏锐洞察潜在风险,诸如数据泄露、恶意软件侵袭等威胁。而员工电脑监控系统的高效运作,高度依赖于底层的数据结构与算法架构。本文旨在深入探究红黑树(Red - Black Tree)这一数据结构在员工电脑监控领域的应用,并通过 Python 代码实例详尽阐释其实现机制。
177 7
|
9月前
|
存储 监控 算法
基于 Python 哈希表算法的员工上网管理策略研究
于当下数字化办公环境而言,员工上网管理已成为企业运营管理的关键环节。企业有必要对员工的网络访问行为予以监控,以此确保信息安全并提升工作效率。在处理员工上网管理相关数据时,适宜的数据结构与算法起着举足轻重的作用。本文将深入探究哈希表这一数据结构在员工上网管理场景中的应用,并借助 Python 代码示例展开详尽阐述。
145 3
|
机器学习/深度学习 算法 数据挖掘
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
本文介绍了2023年第二届钉钉杯大学生大数据挑战赛初赛A题的Python代码分析,涉及智能手机用户监测数据分析中的聚类分析和APP使用情况的分类与回归问题。
357 0
2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析
|
9月前
|
API
钉钉宜搭--远程API,在其他人访问时无法生效
简介: 描述了一种远程API配置问题的场景。开发人员在本地可正常通过应用表单获取数据,但同组织的其他同事访问时无法获取数据,尽管已设置全部权限。问题是关于如何解决这种跨用户数据访问异常的情况,确保同事间能正常共享数据。
|
11月前
|
存储 监控 算法
员工电脑监控屏幕场景下 Python 哈希表算法的探索
在数字化办公时代,员工电脑监控屏幕是保障信息安全和提升效率的重要手段。本文探讨哈希表算法在该场景中的应用,通过Python代码例程展示如何使用哈希表存储和查询员工操作记录,并结合数据库实现数据持久化,助力企业打造高效、安全的办公环境。哈希表在快速检索员工信息、优化系统性能方面发挥关键作用,为企业管理提供有力支持。
145 20
|
11月前
|
存储 人工智能 算法
深度解密:员工飞单需要什么证据之Python算法洞察
员工飞单是企业运营中的隐性风险,严重侵蚀公司利润。为应对这一问题,精准搜集证据至关重要。本文探讨如何利用Python编程语言及其数据结构和算法,高效取证。通过创建Transaction类存储交易数据,使用列表管理订单信息,结合排序算法和正则表达式分析交易时间和聊天记录,帮助企业识别潜在的飞单行为。Python的强大功能使得从交易流水和沟通记录中提取关键证据变得更加系统化和高效,为企业维权提供有力支持。
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
545 2
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
存储 安全 API
"解锁企业级黑科技!用阿里云视觉智能打造钉钉级人脸打卡系统,安全高效,让考勤管理秒变智能范儿!"
【8月更文挑战第14天】随着数字化办公的发展,人脸打卡成为企业考勤的新标准。利用阿里云视觉智能开放平台构建类似钉钉的人脸打卡系统,其关键在于:高精度人脸识别API支持复杂场景下的快速检测与比对;活体检测技术防止非生物特征欺骗,确保安全性;云端存储与计算能力满足大数据处理需求;丰富的SDK与API简化集成过程,实现高效、安全的考勤管理。
420 2
|
数据采集 机器学习/深度学习 搜索推荐
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析
本文介绍了2023钉钉杯复赛A题的智能手机用户监测数据分析,包括数据预处理、特征提取、推荐模型建立与评价的Python代码实现,旨在通过用户使用记录预测APP使用情况并建立推荐系统。
295 0
【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析

推荐镜像

更多