# -*- coding:utf-8 -*-
import requests
import json
import datetime,time
import math
from jdy_util.sql_util import MySQLUtil,Mysql_jdy_utils
class APIUtils:
WEBSITE = "https://api.jiandaoyun.com"
RETRY_IF_LIMITED = True
# 构造函数
def __init__(self, appId, entryId, api_key):
self.url_get_widgets = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/widgets'
self.url_get_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data'
self.url_retrieve_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data_retrieve'
self.url_update_data = APIUtils.WEBSITE + '/api/v2/app/' + appId + '/entry/' + entryId + '/data_update'
self.url_create_data = APIUtils.WEBSITE + '/api/v2/app/' + appId + '/entry/' + entryId + '/data_create'
self.url_delete_data = APIUtils.WEBSITE + '/api/v1/app/' + appId + '/entry/' + entryId + '/data_delete'
self.api_key = api_key
# 带有认证信息的请求头
def get_req_header(self):
return {
'Authorization': 'Bearer ' + self.api_key,
'Content-Type': 'application/json;charset=utf-8'
}
# 发送http请求
def send_request(self, method, request_url, data):
headers = self.get_req_header()
if method == 'GET':
res = requests.get(request_url, params = data, headers = headers, verify = False)
if method == 'POST':
res = requests.post(request_url, data = json.dumps(data), headers = headers, verify = False)
result = res.json()
if res.status_code >= 400:
if result['code'] == 8303 and APIUtils.RETRY_IF_LIMITED:
# 5s后重试
time.sleep(5)
return self.send_request(method, request_url, data)
else:
raise Exception('请求错误!', result)
else:
return result
# 获取表单字段
def get_form_widgets(self):
result = self.send_request('POST', self.url_get_widgets, {})
return result['widgets']
# 根据条件获取表单中的数据
def get_form_data(self, dataId, limit, fields, data_filter):
result = self.send_request('POST', self.url_get_data, {
'data_id': dataId,
'limit': limit,
'fields': fields,
'filter': data_filter
})
print("这是get_form_data根据查询参数查到的简道云表单的数据:",result)
return result['data']
# 获取表单中满足条件的所有数据
def get_all_data(self, fields, data_filter):
form_data = []
# 递归取下一页数据
def get_next_page(dataId):
data = self.get_form_data(dataId, 100, fields, data_filter)
if data:
for v in data:
form_data.append(v)
dataId = data[len(data) - 1]['_id']
get_next_page(dataId)
get_next_page('')
return form_data
# 检索一条数据
def retrieve_data(self, dataId):
result = self.send_request('POST', self.url_retrieve_data, {
'data_id': dataId
})
return result['data']
# 创建一条数据
def create_data(self, data):
result = self.send_request('POST', self.url_create_data, {
'data': data,
"is_start_trigger": True
})
return result['data']
# 更新数据
def update_data(self, dataId, data):
result = self.send_request('POST', self.url_update_data, {
'data_id': dataId,
'data': data,
"is_start_trigger": True
})
return result['data']
# 删除数据
def delete_data(self, dataId):
result = self.send_request('POST', self.url_delete_data, {
'data_id': dataId,
"is_start_trigger": True
})
return result
# 根据关键字段获取数据
def get_dataId(self, data_filter): # 根据字段的值查询dataid
form_dataId = []
result = self.get_form_data(None,100,None,data_filter)
if result:
for v in result:
temp_dataId = v['_id']
# print('v中的dataId:', temp_dataId)
form_dataId.append(temp_dataId)
# print('添加后的form_dataId:', form_dataId)
print("这是根据查询参数查到的简道云表单的dataID:", form_dataId)
return form_dataId
# 根据关键字段获取数据,这段代码是调试原来搜索错误的时候,想运用这一个进行纠错的,先放这儿,不删除
def get_dataId_from_dataid_and_filter(self, data_id, data_filter): # 根据字段的值查询dataid
form_dataId = []
print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的data_filter:",data_filter)
result = self.get_form_data(data_id,100,None,data_filter)
print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的result:",result)
if result:
for v in result:
temp_dataId = v['_id']
# print('v中的dataId:', temp_dataId)
form_dataId.append(temp_dataId)
# print('添加后的form_dataId:', form_dataId)
print("这是get_dataId_from_dataid_and_filter根据查询参数查到的简道云表单的dataID:", len(form_dataId))
return form_dataId
def get_form_data_from_dataId(self, dataId, limit):
result = self.send_request('POST', self.url_get_data, {
'data_id': dataId,
'limit': limit
})
return result['data']
'''根据data_filter的值查找所有的dataid'''
def get_all_dataId(self, data_filter):
form_dataId = self.get_dataId(data_filter)
print("这里是get_all_dataId第一步所取的长度:",len(form_dataId))
if len(form_dataId) == 100:
print("执行了dataid长度等于100的代码")
temp_dataId = form_dataId[len(form_dataId) - 1]
print("get_form_data:",temp_dataId)
# 递归取下一页数据
def get_next_page(temp_dataId,data_filter):
data = self.get_dataId_from_dataid_and_filter(temp_dataId, data_filter)
print('get_next_page查询的data:', data)
if len(data)==100:
for v in data:
temp_dataId = v
# print('v中的dataId:', temp_dataId)
form_dataId.append(temp_dataId)
# print('添加后的form_dataId:', form_dataId)
get_next_page(temp_dataId,data_filter)
elif data:
for v in data:
temp_dataId = v
# print('v中的dataId:', temp_dataId)
form_dataId.append(temp_dataId)
# print('添加后的form_dataId:', form_dataId)
return form_dataId
form_dataId = get_next_page(temp_dataId,data_filter)
print("这是根据查询参数查到的简道云表单的所有dataID的长度:", len(form_dataId))
return form_dataId
'''修改,先根据filter的值进行查找,再一一修改'''
def update_from_filter(self, data, data_filter):
# 判断查找的结果是否为空,如果不为空,则修改
form_dataId = self.get_all_dataId(data_filter)
if form_dataId:
num_update = 0
for dataId in form_dataId:
print(dataId)
self.update_data(dataId, data)
num_update += 1
print("修改的数据数:",num_update)
return num_update
# 返回修改的条数
'''修改或新增,先根据data_filter的值进行查找,有则修改,无则新增'''
def update_or_create(self, data, data_filter):
# 判断查找的结果是否为空,如果不为空,则修改
form_dataId = self.get_all_dataId(data_filter)
if form_dataId:
num_update = 0
for dataId in form_dataId:
print(dataId)
self.update_data(dataId, data)
num_update += 1
print("修改的数据数:",num_update)
return num_update
# 返回修改的条数
else:
# self.create_data(data)
result = self.create_data(data)
print('新增数据:',result)
简道云api增删改查的类—python书写
最新推荐文章于 2024-04-30 20:34:27 发布