python之钉钉审批导出

news/2024/7/3 1:18:57

钉钉审批导出需要管理员协助配合并且需要参考钉钉开发文档。

1、获取access_token

正常情况下access_token有效期为7200秒

钉钉开发指南:https://open-doc.dingtalk.com/microapp/serverapi2/eev437

appkeyString应用的唯一标识key
appsecretString应用的密钥

 

#!/usr/bin/python3
# -*- coding: utf-8 -*-
import urllib.request
import urllib.parse
import requests
import json
import datetime
import time
import os
import sys
import csv
import pandas as pd

#获取access_token
def getToken():
    appkey       = '钉钉后台获取,需管理员协助'
    appsecret    = '钉钉后台获取,需管理员协助'
    headers      = {
        'Content-Type': 'application/json',
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
    }
    url          = 'https://oapi.dingtalk.com/gettoken?appkey=%s&appsecret=%s' % (appkey,appsecret)
    req          = urllib.request.Request(url,headers= headers)
    result       = urllib.request.urlopen(req)
    access_token = json.loads(result.read())
    return access_token['access_token']
accesstoken = getToken()

 

2、批量获取审批实例id

钉钉获取审批实例文档:https://open-doc.dingtalk.com/microapp/serverapi2/hh8lx5

名称类型是否必须示例值描述
process_codeString必须PROC-FF6YR2IQO2-NP3LJ1J0SO4182NKX26K3-3N23J-PB流程模板唯一标识,可在OA管理后台编辑审批表单部分查询
start_timeNumber必须1496678400000开始时间。Unix时间戳
end_timeNumber可选1496678400000结束时间,默认取当前时间。Unix时间戳
sizeNumber可选10分页参数,每页大小,最多传10,默认值:10
cursorNumber可选0分页查询的游标,最开始传0,后续传返回参数中的next_cursor值,默认值:0
userid_listString可选manager1发起人用户id列表,用逗号分隔,最大列表长度:10

1)由于钉钉限制I/O所以每次最多导出10条数据。

2)由于钉钉安全机制,需填写授权公网出口IP。

3、需通管理员获取相关服务的code

cursor1 = '0'
data       = { '钉钉后台获取,需管理员配合', 'start_time':'1538326800', 'size':'10', 'cursor':'1'}
data1      = json.dumps(data).encode(encoding='UTF8')
headers1      = { 'Content-Type': 'application/json',  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'}
url1       = 'https://oapi.dingtalk.com/topapi/processinstance/list?access_token=%s' % (accesstoken)
req        = urllib.request.Request(url = url1,headers = headers1,data = data1)
result     = urllib.request.urlopen(req)
dic        = json.loads(result.read())

4、切片排版,导出格式为.csv

list1  = (dic.get('result','none').get('list','none'))
result = dic['result']
next_cursor = result['next_cursor']
print(next_cursor)
headers = ['.csv格式自定义','格式自定义','格式自定义']
fp = open('saas.csv', 'a', encoding="utf-8_sig")
f_csv = csv.writer(fp)
f_csv.writerow(headers)
for list2 in list1:
    title = list2['title']
    create_time = list2['create_time']
    form_component_values = list2['form_component_values']
    name1 = form_component_values[1].get('name','none')
    value1 = form_component_values[1].get('value','none')
    name2 = form_component_values[2].get('name','none')
    value2 = form_component_values[2].get('value','none')
    name3 = form_component_values[3].get('name','none')
    value3 = form_component_values[3].get('value','none')
    name4 = form_component_values[3].get('name','none')
    value4 = form_component_values[4].get('value','none')
    name5 = form_component_values[5].get('name','none')
    value5 = form_component_values[5].get('value','none')
    name6 = form_component_values[6].get('name','none')
    value6 = form_component_values[6].get('value','none')
    rows = [
        (title,create_time,value1,value2,value3,value4,value5,value6)
    ]
    f_csv.writerows(rows)
fp.close()

  

 

转载于:https://www.cnblogs.com/xfyyxz/p/10488038.html


http://www.niftyadmin.cn/n/4556322.html

相关文章

【CDH学习之一】CDH简介

环境  虚拟机:VMware 10   Linux版本:CentOS-6.5-x86_64   客户端:Xshell4  FTP:Xftp4  jdk8  zookeeper-3.4.11 一、CDH在商业应用中,对于企业成百上千的机器集群进行安装hadoop一系列组件费时费力&#…

shh和maven项目报错

朋友整合ssh时突然报错, org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:441…

异常处理的python

Python异常 Python3的捕获异常语法 try:# 未声明的变量print(x) except Exception as e:print(e) Python常见异常和错误 NameError:尝试访问一个未申明的变量print(v) NameError: name v is not defined ZeroDivisionError:除数为0print(1/0) ZeroDivisi…

微信小程序 - loading(组件)

更新日期: 2019/3/8:首次发布 2019/3/12:增加loadOpacity透明度控制,默认0.5. 以及修改居中方式 Loading 参数: 1. type:loading(必需参数) 2. isLoading: 是否显示加载 3. loadColo…

Python 使用正则表达式匹配电子邮箱

如下: In [1]: import reIn [2]: email "1210640219qq.com"In [3]: regular re.compile(r[0-9a-zA-Z.][0-9a-zA-Z.]?com)In [4]: re.findall(regular, email) Out[4]: [1210640219qq.com] 转载于:https://www.cnblogs.com/pzk7788/p/10498176.html

C语言要用什么软件呀 麻烦各位帮个忙

答案补充 看你的思维模式 有需要可以向我要 Turbo C也不错 就看谭浩强的 C语言程序设计 习惯看国内的 用Visual C是比较好的选择 在windows下 我觉得 谭浩强教授写的那本是最好的我这有电子版 1、Tc 2.02、Vc 6.0等 答案补充 教材 绿色的 ||| 看你要在什么操作系统下编程

洛谷 - P1801 - 黑匣子 - 对顶堆

这道题是提高省选-的难度,做出来的话对数据结构题目的理解会增加很多。 可以使用一种叫做对顶堆的东西,对顶堆是在线维护第n小的logn的算法。大概的思路是,假如我们要找的是第n小,我们就维护一个大小为n的(位于下方的&…

周学习总结

花费时间:3.53.52.53.5215小时 代码行数:400左右 学习内容:jsp基本语法(学自jsp基础教程),java web(bilibili视频)。转载于:https://www.cnblogs.com/lianghang/p/10502654.html