You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:52:49