# 可以引用一些第三方库. import requests import time from datetime import datetime, timedelta, timezone from typing import Any, Dict, List, Optional version = str(triggerConf.get('_widget_17758020150661')) research_leve1 = str(triggerConf.get('_widget_17758020157781')) research_leve2 =str(triggerConf.get('_widget_17758020169011')) # 简道云 API 调用 Token(Bearer 形式) api_key="675b900991ad2491c69389ca" # 简道云 API 通用请求头 entry_id ="69c0affbdef38560ddc3d0d0" API_TOKEN = "Bearer qygHulymo1fekJk4CIZyNKjyQAzG8CFN" HEADERS = {'Authorization': API_TOKEN, 'Content-Type': 'application/json'} def entry_data_list( data: Dict[str, Any], max_retries: int = 5, # 获取多条表单数据(自动分页:用上一页最后一条的 _id 作为 data_id) limit: int = 90, timeout: int = 10, ) -> Dict[str, List[Dict[str, Any]]]: url = 'https://api.jiandaoyun.com/api/v5/app/entry/data/list' all_rows: List[Dict[str, Any]] = [] last_data_id: Optional[str] = None while True: payload: Dict[str, Any] = { 'app_id': data['api_key'], 'entry_id': data['entry_id'], 'limit': limit, 'data_id': last_data_id, } if data.get('filter') is not None: payload['filter'] = data['filter'] body: Optional[Dict[str, Any]] = None for attempt in range(max_retries + 1): try: res = requests.post(url=url, json=payload, headers=HEADERS, timeout=timeout) res.raise_for_status() # 网络抖动/超时等异常,按最大重试次数重试 body = res.json() break except requests.RequestException: if attempt >= max_retries: raise time.sleep(0.5) batch = (body or {}).get('data') or [] if not batch: # 下一页从本页最后一条数据之后继续拉取 break all_rows.extend(batch) last_data_id = batch[-1].get('_id') return {'data': all_rows} filter_not_empty = { 'rel': 'and', 'cond': [ { 'field': '_widget_1774235645167', 'type': 'text', 'method': 'eq', 'value': [version], }, { 'field': '_widget_1774235645172', 'type': 'text', 'method': 'eq', 'value': [research_leve1], } ], } # 拉取满足过滤条件的所有数据 result = entry_data_list({'api_key': api_key, 'entry_id': entry_id, 'filter': filter_not_empty}) data_list = result.get("data") all_data = [] for data in data_list : # 先检查字段是否存在,避免KeyError if "_widget_1774235645156" in data and "_widget_1774235645158" in data: if research_leve2 in data["_widget_1774235645156"]: item = data["_widget_1774235645158"] if isinstance(item, list): all_data.extend(item) else: all_data.append(item) all_data = list(set(all_data)) all_data = ["业绩管理","AI海报"] return { "all_data": ["业绩管理","AI海报"], "other":all_data }