Python3 获取钉钉OA审批数据

本文档介绍如何利用Python3遵循钉钉最新开发文档,构建一个获取OA审批数据的连接器。步骤包括创建钉钉应用并获取app key和app secret,赋予应用读写通讯录及OA审批权限,以及获取审批模板编号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据钉钉最新的开发文档,使用python实现的获取钉钉OA审批数据内容的连接器。

使用条件:

        1、创建一个钉钉应用,复制app key与app secret(在应用信息->应用凭证中)。

        2、赋予这个应用读写通讯录与OA审批功能权限。

        3、获取钉钉OA审批模板编号(在审批模板基础设置页面最下面)

config.ini

# 连接器
[connector]
# app key
key =
# app secret
secret =
# OA审批编号
process =

# 消息推送机器人
[robot]
# 自定义标签
token =
# 推送地址
url =

 

connector.py

"""
@pingfan
获取钉钉审批数据,没有使用钉钉SDK,轻便快捷。
"""
import time
import datetime
import json
import configparser

import requests


class DingOaConnect:
    """
    钉钉OA审批连接器
    用于读取钉钉OA审批数据
    1、getUserId->通过手机号获取用户id
    2、getOaId->通过用户id获取OA审批id
    3、getOaData->通过OA审批id获取OA审批数据
    """

    def __init__(self):
        # 获取配置
        self.config = self.initConfig('config.ini')
        # 企业凭证
        self.token = self.getToken(self.config['key'], self.config['secret'])

    @staticmethod
    def initConfig(filePath):
        """
        初始化配置
        key: app_key
        secret: app_secret
        process: OA审批编号
        """
        cfg 
### 如何从钉钉 OA 审批中导出数据 要实现从钉钉 OA 审批中导出数据,可以借助 Python 编写脚本来完成这一任务。以下是具体方法以及相关技术细节: #### 1. 使用 Python 脚本获取钉钉 OA 审批数据 通过调用钉钉开放平台 API 接口来获取审批记录并将其存储为 JSON 文件或其他格式。以下是一个基本流程说明。 - **初始化连接器** 需要创建一个类用于封装与钉钉交互的功能。例如,在 `connector.py` 中定义了一个名为 `DingOaConnect` 的类[^1]。 - **获取用户 ID 列表** 可以通过手机号码批量查询对应的用户 ID。此功能由 `getUserId()` 方法提供支持。 - **获取 OA 审批 ID 列表** 基于指定的时间范围和已知的用户 ID 来检索相关的审批实例 IDs。这一步骤依赖于 `getOaId()` 函数。 - **提取实际审批详情** 对上述获得的所有审批实例执行进一步请求操作以取得完整的审批内容。这部分逻辑体现在 `getOaData()` 上述代码片段里。 ```python from connector import DingOaConnect dc = DingOaConnect() uidList = dc.getUserId([&#39;手机号&#39;]) oidList = dc.getOaId(uidList, &#39;起始时间&#39;, &#39;结束时间&#39;) data = dc.getOaData(oidList) print(data) ``` #### 2. 处理返回的数据结构 通常情况下,API 返回的结果是以字典形式表示的一系列键值对集合。为了便于后续分析或者展示给最终使用者查看,建议将这些原始信息转换成更易读的形式比如 CSV 表格文件。 下面给出一段简单的例子用来演示如果把之前提到过的那种复杂嵌套式的JSON对象解析开来存入CSV文档当中去: ```python import csv import json def save_to_csv(json_data, filename=&#39;output.csv&#39;): with open(filename, mode=&#39;w&#39;, newline=&#39;&#39;, encoding=&#39;utf-8&#39;) as file: writer = csv.writer(file) headers_written = False for item in json_data: flat_item = flatten_dict(item) # 展平多层字典 if not headers_written: header = list(flat_item.keys()) writer.writerow(header) headers_written = True row = [flat_item[col] if col in flat_item else &#39;&#39; for col in header] writer.writerow(row) # 辅助函数: 将深层字典展平 def flatten_dict(d, parent_key=&#39;&#39;, sep=&#39;_&#39;): items = [] for k, v in d.items(): new_key = f"{parent_key}{sep}{k}" if parent_key else k if isinstance(v, dict): items.extend(flatten_dict(v, new_key, sep=sep).items()) elif isinstance(v, list): # 如果遇到列表,则遍历其中每一个元素再递归处理 index = 0 while index < len(v): element = v[index] if type(element)==dict or type(element)==list : sub_items = flatten_dict({str(index):element},new_key,sep) items.append((sub_items)) else : items.append((f&#39;{new_key}[{index}]&#39;,v[index])) index +=1 else: items.append((new_key, v)) return dict(items) save_to_csv(data,&#39;example_output.csv&#39;) ``` 以上代码实现了两个重要功能:一是能够自动检测输入数据中的字段名称作为列头;二是对于那些具有层次关系的对象属性也做了相应的拆解以便更好地适应表格型布局需求。 #### 3. 注意事项 在开发过程中需要注意以下几个方面: - 确保已经注册好企业内部使用的第三方应用,并正确填写 AppKey 和 AppSecret 参数; - 根据实际情况调整日期区间以及其他筛选条件; - 当前示例仅限本地测试环境部署运行,请勿直接暴露公网接口以免造成敏感信息安全风险。 --- ####
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值