如何从Pipedrive获取含当前阶段的线索?代码问题排查
解决Pipedrive API无法返回线索阶段信息的问题
问题分析
你的代码无法返回阶段信息,主要存在以下几个问题:
- 分页逻辑失效:
get_next_link_from_pagination函数未定义,导致无法正确遍历所有线索;且初始start=1000会直接跳过前1000条线索,数据获取不完整。 - 阶段数据解析错误:Pipedrive API返回的线索阶段结构并非
stages[-1].get("stage_id").get("name"),实际字段路径不符。 - 请求效率低下:逐个线索调用API获取阶段信息,触发大量请求,易触发API限流,且增加不必要的耗时。
- 缺少异常处理:未处理API请求失败、字段缺失等情况,程序易中途中断。
解决方案
以下是修正后的完整代码,解决了上述所有问题,同时满足你获取当前阶段、创建日期、最后阶段更新日期的需求:
import requests import pandas as pd # 替换为你的Pipedrive API Token API_TOKEN = "YOUR_API_TOKEN_HERE" def fetch_leads(): leads = [] start = 0 limit = 500 while True: # 请求时直接指定需要的字段,包含阶段相关数据,避免额外API调用 url = ( f"https://api.pipedrive.com/v1/leads?api_token={API_TOKEN}" f"&start={start}&limit={limit}&include_deleted=0" f"&fields=id,add_time,update_time,stage_id,lead_flow_stages" ) try: response = requests.get(url) response.raise_for_status() # 抛出HTTP请求异常 except requests.exceptions.RequestException as e: print(f"获取线索列表失败: {e}") break data = response.json() leads_data = data.get("data", []) if not leads_data: break leads.extend(leads_data) # 检查分页,判断是否还有更多数据 pagination = data.get("additional_data", {}).get("pagination", {}) if not pagination.get("more_items_in_collection"): break start = pagination.get("next_start", start + limit) return leads # 初始化DataFrame df = pd.DataFrame(columns=[ "Lead ID", "Current Stage", "Creation Date", "Last Stage Update Date" ]) # 获取所有线索数据 leads = fetch_leads() # 处理每条线索的信息 for lead in leads: lead_id = lead.get("id") creation_date = lead.get("add_time") # 获取当前阶段名称 current_stage = lead.get("stage_id", {}).get("name", "无阶段") # 获取最后阶段更新日期(从阶段历史中提取) last_stage_update = None lead_flow_stages = lead.get("lead_flow_stages", []) if lead_flow_stages: last_stage_update = lead_flow_stages[-1].get("update_time") # 添加到DataFrame df.loc[len(df)] = { "Lead ID": lead_id, "Current Stage": current_stage, "Creation Date": creation_date, "Last Stage Update Date": last_stage_update } # 输出结果 print(df)
关键修正点说明
- 修复分页逻辑:使用Pipedrive API返回的
pagination字段判断是否有下一页,初始start设为0,确保获取所有线索。 - 批量获取字段:在请求线索列表时直接指定需要的字段(包括
stage_id和lead_flow_stages),无需单独调用API获取阶段信息,提升效率。 - 正确解析阶段数据:通过
stage_id直接获取当前阶段名称,通过lead_flow_stages列表的最后一项获取阶段的最后更新日期。 - 添加异常处理:用
try-except捕获HTTP请求异常,避免程序因单次请求失败而中断。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

