python之釘釘審批導出


釘釘審批導出需要管理員協助配合並且需要參考釘釘開發文檔。

1、獲取access_token

正常情況下access_token有效期為7200秒

釘釘開發指南:https://open-doc.dingtalk.com/microapp/serverapi2/eev437

appkey String 應用的唯一標識key
appsecret String 應用的密鑰

 

#!/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_code String 必須 PROC-FF6YR2IQO2-NP3LJ1J0SO4182NKX26K3-3N23J-PB 流程模板唯一標識,可在OA管理后台編輯審批表單部分查詢
start_time Number 必須 1496678400000 開始時間。Unix時間戳
end_time Number 可選 1496678400000 結束時間,默認取當前時間。Unix時間戳
size Number 可選 10 分頁參數,每頁大小,最多傳10,默認值:10
cursor Number 可選 0 分頁查詢的游標,最開始傳0,后續傳返回參數中的next_cursor值,默認值:0
userid_list String 可選 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()

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM