使用HubSpot GET方法批量提取Campaign ID详情存DataFrame遇404错误
解决HubSpot Campaign详情接口404错误
问题背景
我已经能从HubSpot接口获取包含campaign_ids的列表数据,数据如下:
{"campaigns": [{"id": 2341356301, "lastUpdatedTime": 16429283391399, "appId": 189891, "appName": "sample2"}, {"id": 18645336279, "lastUpdatedTime": 1684283410207, "appId": 36036, "appName": "sample1"}, {"id": 25529684, "lastUpdatedTime": 16429283391399, "appId": 272799, "appName": "sample"}], "hasMore":true, "offset":"ABCDZYW$AKLRD" }
但用Python通过GET请求批量提取每个campaign_id对应的详情信息并存储到DataFrame时,出现了404请求错误。我尝试的代码如下:
api_key= 'pat-na1-2023ghmc-bmc54-gomc38-1899-63yz459a3654' campaign_ids = ['2341356301', '18645336279', '25529684'] # Add all your campaign IDs here endpoint = 'https://api.hubapi.com/marketing/v3/campaigns/{campaign_ids}?hapikey=pat-na1-2023ghmc-bmc54-gomc38-1899-63yz459a3654' print("endpoint",endpoint) headers = { 'Authorization': 'Bearer pat-na1-2023ghmc-bmc54-gomc38-1899-63yz459a3654' } campaign_data=[] for campaign_id in campaign_ids: print("campaign_id",campaign_id) response= requests.get(endpoint.format(campaign_ids=campaign_id),headers=headers) print("response",response) if response.status_code==200: campaign_details=response.json() campaign_data.append(campaign_details) else: print('Error occurred',campaign_id)
错误原因及修复方案
1. 接口认证与路径冲突
- HubSpot的Pat Token认证只需要通过
Authorization: Bearer {token}请求头传递,URL里的hapikey参数属于旧版认证方式,两者同时使用会导致认证逻辑混乱,进而引发404错误。 - 确认接口路径正确性:单个Campaign详情的v3接口路径为
https://api.hubapi.com/marketing/v3/campaigns/{campaignId},你的代码占位符命名没问题,但冗余的hapikey参数必须移除。
2. 代码缩进逻辑错误
你写的if response.status_code==200代码块不在for循环内部,这意味着只有最后一个请求的响应会被判断和处理,前面所有请求的结果都会被忽略,属于逻辑漏洞。
修复后的完整代码
import requests import pandas as pd api_key = 'pat-na1-2023ghmc-bmc54-gomc38-1899-63yz459a3654' campaign_ids = ['2341356301', '18645336279', '25529684'] # 修正接口路径,移除冗余的hapikey参数 endpoint = 'https://api.hubapi.com/marketing/v3/campaigns/{}' headers = {'Authorization': f'Bearer {api_key}'} campaign_data = [] for campaign_id in campaign_ids: print(f"正在获取campaign_id: {campaign_id}") # 格式化路径,传入单个campaign_id response = requests.get(endpoint.format(campaign_id), headers=headers) print(f"响应状态码: {response.status_code}") # 将判断逻辑放入循环内,处理每个请求的响应 if response.status_code == 200: campaign_details = response.json() campaign_data.append(campaign_details) else: print(f"获取失败,campaign_id: {campaign_id},错误详情: {response.text}") # 转换为DataFrame df = pd.DataFrame(campaign_data) print(df.head())
额外注意事项
- 检查Pat Token是否拥有
Marketing Campaigns的读取权限,权限不足也可能伪装成404错误返回。 - 批量请求时要遵守HubSpot的API速率限制,可添加
time.sleep(1)这类延迟避免被限流。 - 优先用Postman等工具手动测试单个接口,确认路径和Token有效性后再编写批量代码。
内容的提问来源于stack exchange,提问作者s nandan
相关产品推荐
相关产品推荐

