Python+Requests实现ERP与CRM集成:重复产品发送问题求助
问题分析与修复方案
核心问题
你的代码里查询CRM产品的逻辑在for循环外面,导致循环只给cod_produto_bling赋值了最后一个ERP产品的SKU,之后只检查了这一个产品,其他产品完全没做存在性校验,自然会重复发送已存在的产品。另外,仅靠状态码判断产品是否存在也不严谨——200只是请求成功,不代表返回结果里有产品数据。
修复后的代码
ploomes_url = 'https://public5-api2.ploomes.com/Products' # 把查询逻辑放到for循环内部,每个ERP产品都做存在性检查 for product in produtos_bling: cod_produto_bling = product['codigo'] # 查询Ploomes中是否存在对应Code的产品 search_url = f'https://public5-api2.ploomes.com/Products?$filter=Code eq \'{cod_produto_bling}\'' response_search = requests.get(search_url, headers=headers_ploomes) if response_search.status_code == 200: search_result = response_search.json() # 检查返回的数据集是否有内容,有则代表产品已存在 if search_result.get('value') and len(search_result['value']) > 0: print(f"Produto '{cod_produto_bling}' já existe no Ploomes. Não será enviado novamente.") continue elif response_search.status_code != 404: # 非404的错误状态码,直接跳过当前产品 print(f"Erro ao consultar produto {cod_produto_bling} no Ploomes: {response_search.status_code}") continue # 此处添加同步产品到Ploomes的代码 # 示例: # product_payload = { # "Code": cod_produto_bling, # "Name": product['descricao'], # # 其他所需字段 # } # requests.post(ploomes_url, json=product_payload, headers=headers_ploomes)
额外优化建议
- 减少API请求次数:循环里每次查一个产品会频繁调用API,效率低。可以先批量拉取Ploomes所有产品的Code列表,本地比对后再同步:
# 先获取Ploomes所有产品的Code(只返回需要的字段,减少数据量) all_codes_url = 'https://public5-api2.ploomes.com/Products?$select=Code' response_all = requests.get(all_codes_url, headers=headers_ploomes) existing_codes = {item['Code'] for item in response_all.json().get('value', [])} # 本地循环比对,无需多次调用查询API for product in produtos_bling: cod_produto_bling = product['codigo'] if cod_produto_bling in existing_codes: print(f"Produto '{cod_produto_bling}' já existe no Ploomes.") continue # 执行同步逻辑
内容的提问来源于stack exchange,提问作者Amanda Araujo
相关产品推荐
相关产品推荐

