宜搭api完善

This commit is contained in:
z66
2025-10-11 15:35:15 +08:00
parent 47c42d1a19
commit d6c6ead9f3
10 changed files with 6611 additions and 34 deletions
+58 -2
View File
@@ -90,6 +90,7 @@ class API:
all_data_batches = [] # 用于存储每次请求返回的数据批次
last_data_id = None
exit_flag = False
count = 0
while True:
payload = json.dumps({
"app_id": data['api_key'], # 应用ID
@@ -106,7 +107,7 @@ class API:
if data_get["data"]:
all_data_batches.extend(data_get['data'])
last_data_id = data_get['data'][-1].get('_id')
logger.info(f"已获取 {len(all_data_batches)} 条数据")
print(f"已获取 {len(all_data_batches)} 条数据")
break # 成功则跳出循环
else:
if 'data' not in data_get or len(data_get['data']) == 0:
@@ -130,6 +131,7 @@ class API:
final_data = {
'data': all_data_batches # 'data' 键对应的值是列表的列表
}
logger.info(f"获取了{len(all_data_batches)}条数据")
if replace:
print("进行了替换")
return_data = self.field_replacement(data, final_data) # 字段替换,由id替换为标签名
@@ -370,6 +372,60 @@ class API:
continue
return data_get
@staticmethod
def entry_data_banch_update(data: dict, max_retries: int = 20, chunk_size: int = 90) -> list[dict]: # 修改数据
"""
批量修改数据
:param max_retries: 最大重试次数,此处设置100次
:param data: 简道云插件发送过来的data,包含应用id、表单id、数据id等信息
:return: 修改数据后简道云返回的结果
"""
url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/batch_update'
headers = {
'Authorization': Config.JIANDAOYUN_API_TOKEN, # 曹伟应用api测试 appKey
'Content-Type': 'application/json'
}
# 获取data_list长度
total_length = len(data['data_ids'])
logger.info(f"多数据写入行数: {total_length}")
# 计算需要发送的次数
num_chunks = (total_length + chunk_size - 1) // chunk_size # //整除向下取证,需要加上chunk_size - 1保证不会有缺失数据
data_get_list = []
for i in range(num_chunks):
start_index = i * chunk_size
end_index = min(start_index + chunk_size, total_length)
payload = json.dumps({
"app_id": data['api_key'], # 应用ID
"entry_id": data['entry_id'], # 表单ID
"data_list": data['data_ids'][start_index:end_index],
"data": data['data']
}, cls=NpEncoder)
retries = 0
while retries <= max_retries:
try:
res: requests.Response = requests.post(url=url, data=payload, headers=headers, timeout=10)
res.raise_for_status() # 检查HTTP响应状态码,如果不等于200会抛出异常
data_get = res.json()
# print(data_get)
if res.status_code == 200:
data_get_list.append(data_get)
break # 成功则跳出循环
else:
logger.warning(f"请求异常, 将重新请求")
retries += 1
time.sleep(3) # 在重试之间稍作停顿
except requests.exceptions.RequestException as e:
logger.warning(f"请求异常: {e}, 将重新请求")
retries += 1
time.sleep(10) # 在重试之间稍作停顿
if retries > max_retries:
error_task_logger.error(f"任务 {data['data_id']} 连续{max_retries}次请求失败,放弃此次请求。")
continue
return data_get_list
@staticmethod
def entry_data_delete(data: dict, max_retries: int = 20, ) -> dict:
"""
@@ -409,7 +465,7 @@ class API:
# 检查其他状态码
res.raise_for_status() # 只对非 4001 的状态码进行检查
logger.info(f"返回结果:, {delete_status}")
# logger.info(f"返回结果:, {delete_status}")
if res.status_code == 200:
break # 成功则跳出循环
else: