From ee35021969816691e461ebbae7a5a4a7708b309c Mon Sep 17 00:00:00 2001 From: root Date: Sun, 28 Sep 2025 15:33:15 +0800 Subject: [PATCH] add workflow partner1site,dev --- .../part_summary_visit_feign.py | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/dev/workflow/TK_Cust/partner1site/获取客户拜访数据/part_summary_visit_feign.py b/dev/workflow/TK_Cust/partner1site/获取客户拜访数据/part_summary_visit_feign.py index 0d67643..0e8d5ad 100644 --- a/dev/workflow/TK_Cust/partner1site/获取客户拜访数据/part_summary_visit_feign.py +++ b/dev/workflow/TK_Cust/partner1site/获取客户拜访数据/part_summary_visit_feign.py @@ -1,8 +1,8 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ -partner1site 多数据来源 API 请求模块 -支持自动分页,并存储到 PostgreSQL +Partner1site 全接口抓取脚本 +分页结束条件:hasNext == False """ import random @@ -13,14 +13,14 @@ import requests import json import uuid from datetime import datetime, timezone, timedelta -from typing import List, Dict, Any +from typing import Dict, Any import psycopg2 # ======= 配置区 ======= ACCESS_KEY = "75c4ab4d-6a67-4aed-8b1d-5bb64fd36afc" SECRET_KEY = "117347a7dd066a50a4d2973c5f3d5ba9101094c5" -# URL 用占位符,外部替换 +# URL 用占位符(外部替换) BASE_URLS = { "visits": "http://onesite.tek.cn/api/summary/visits", # 客户拜访数据 "reports": "http://onesite.tek.cn/api/summary/visits", # 报备数据 @@ -41,9 +41,7 @@ API_ID = "2460976d-00c1-47d9-84b2-33e66d68" # 外部传入 api_id,占位符 class Partner1SiteClient: - """ - partner1site API 客户端 - """ + """Partner1site API 客户端""" def __init__(self, access_key: str, secret_key: str): self.ak = access_key @@ -54,7 +52,7 @@ class Partner1SiteClient: return base64.urlsafe_b64encode(data).decode() def gen_token(self, expire_sec: int = 600) -> str: - """生成 token —— 按调通算法""" + """生成 API Token""" random_num = str(random.randint(100000, 999999)) deadline = int(datetime.now(timezone.utc).timestamp()) + expire_sec parm_str = f"{random_num}:{deadline}" @@ -64,14 +62,14 @@ class Partner1SiteClient: return f"{self.ak}:{enc_sign}:{enc_parm}" def fetch_all_pages(self, api_name: str, params: Dict[str, Any]): - """通用分页请求""" + """通用分页请求(结束条件:hasNext == False)""" if api_name not in BASE_URLS: raise ValueError(f"未知 API 数据来源: {api_name}") base_url = BASE_URLS[api_name] all_data = [] page_num = 0 - page_size = 50 # 固定页容量 + page_size = 50 # 固定每页大小 while True: token = self.gen_token() @@ -82,7 +80,7 @@ class Partner1SiteClient: "page": page_num }) - resp = requests.get(base_url, params=params_with_paging, timeout=15) + resp = requests.get(base_url, params=params_with_paging, timeout=30) resp.raise_for_status() data_json = resp.json() @@ -91,9 +89,12 @@ class Partner1SiteClient: content = data_json.get("data", {}).get("content", []) all_data.extend(content) - print(f"[{api_name}] 页码 {page_num} -> 本页 {len(content)} 条") + total_elements = data_json.get("data", {}).get("totalElements") + has_next = data_json.get("data", {}).get("hasNext", False) - if data_json.get("data", {}).get("last", True): + print(f"[{api_name}] 页码 {page_num} -> 本页 {len(content)} 条,累计 {len(all_data)} 条 / 总数 {total_elements}") + + if not has_next: break page_num += 1 @@ -131,44 +132,43 @@ def save_json_to_pg(data: list, api_id: str) -> None: def get_previous_date(days: int = 0) -> str: - """获取 N 天前的日期字符串""" return (datetime.now() - timedelta(days=days)).strftime("%Y-%m-%d") def main(): client = Partner1SiteClient(ACCESS_KEY, SECRET_KEY) - # ✅ 1️⃣ 客户拜访数据 + # ✅ 客户拜访数据(执行) visits_data = client.fetch_all_pages( api_name="visits", - # params={"startInsertDate": get_previous_date(5), "endInsertDate": get_previous_date(0)} - params={} + params={} # 拉全量,若有默认时间限制可改成 {"startInsertDate":"2000-01-01","endInsertDate":get_previous_date(0)} + params={"startInsertDate":"2025-08-20","endInsertDate":get_previous_date(0)} ) save_json_to_pg(visits_data, API_ID) - # ❌ 2️⃣ 报备数据(注释掉,后续可启用) + # ❌ 报备数据(暂时注释) """ reports_data = client.fetch_all_pages( api_name="reports", - params={"startApplyDate": get_previous_date(5), "endApplyDate": get_previous_date(0)} + params={} ) save_json_to_pg(reports_data, API_ID) """ - # ❌ 3️⃣ POS 数据(注释掉,后续可启用) + # ❌ POS 数据(暂时注释) """ pos_data = client.fetch_all_pages( api_name="pos_datas", - params={"startPosInsertDate": get_previous_date(10), "endPosInsertDate": get_previous_date(0)} + params={} ) save_json_to_pg(pos_data, API_ID) """ - # ❌ 4️⃣ 客户及联系人数据(注释掉,后续可启用) + # ❌ 客户及联系人数据(暂时注释) """ cust_contact_data = client.fetch_all_pages( api_name="customer_and_contact_datas", - params={"customerId": 0, "customerContactId": 0} + params={} ) save_json_to_pg(cust_contact_data, API_ID) """