将Pandas DataFrame数据导入HubSpot CRM时遇415错误的解决方法
解决HubSpot CRM导入DataFrame数据的415错误问题
错误原因
你遇到的415 Unsupported Media Type错误,核心问题有两个:
- 请求格式错误:HubSpot CRM v3的导入API不支持用
application/json格式直接传递CSV内容,必须用multipart/form-data来上传文件,同时附带导入配置信息。 - 缺少导入配置:原代码没有指定关键的导入规则(比如要导入到HubSpot的哪个对象、字段映射关系、导入行为),即使格式正确也会失败。
修正后的完整代码
以下是适配HubSpot导入API的正确实现,以导入联系人(Contacts)为例,你可以根据自己的业务需求调整对象类型和字段映射:
import pandas as pd import requests import json from io import BytesIO # 假设你的DataFrame已经存在(变量名df) # df = pd.read_csv("your_data.csv") # 示例:如果是从本地读取的话 # 将DataFrame转为CSV字节流(multipart上传需要bytes格式) csv_buffer = BytesIO() df.to_csv(csv_buffer, index=False, encoding='utf-8') csv_buffer.seek(0) # HubSpot配置 api_token = "your_private_app_token" # 替换成你的私有应用token endpoint = "https://api.hubapi.com/crm/v3/imports" # 核心导入配置:定义导入规则 import_config = { "name": "从DataFrame导入联系人数据", "files": [ { "fileName": "contacts_data.csv", "fileFormat": "CSV", "fileImportPage": { "hasHeader": True, "columnMappings": [ # 这里要严格对应你的DataFrame列和HubSpot属性 {"columnName": "email", "propertyName": "email", "columnObjectType": "contacts"}, {"columnName": "first_name", "propertyName": "firstname", "columnObjectType": "contacts"}, {"columnName": "last_name", "propertyName": "lastname", "columnObjectType": "contacts"}, # 更多字段映射请按需添加 ] } } ], "importRequest": { "objectTypeId": "0-1", # 0-1是联系人(contacts)的对象ID,公司(companies)是0-2,其他对象ID可查HubSpot文档 "name": "联系人批量导入", "updateStrategy": "UPSERT", # 策略:UPSERT=存在则更新,不存在则创建;还有CREATE_ONLY等选项 "fileId": 0 # 对应上面files数组的索引,这里只有一个文件所以是0 } } # 构造multipart请求:同时上传CSV文件和导入配置 files = { 'file': ('contacts_data.csv', csv_buffer, 'text/csv'), 'importRequest': ('', json.dumps(import_config), 'application/json') } headers = { "Authorization": f"Bearer {api_token}" } # 发送请求 response = requests.post(endpoint, files=files, headers=headers) # 处理响应 if response.status_code in (200, 201): print("数据导入成功!导入ID:", response.json()['id']) else: print(f"导入失败,状态码:{response.status_code},响应信息:{response.text}")
关键注意事项
- 对象ID对应:如果导入的是公司(Companies),把
objectTypeId改成0-2;其他对象类型的ID可在HubSpot开发者文档中查询。 - 字段映射:
columnMappings里的columnName必须和你的DataFrame列名完全一致,propertyName必须是HubSpot中对应对象的合法属性名(比如联系人的phone、company等)。 - 权限检查:确保你的私有应用token拥有对应的权限,比如
crm.objects.contacts.write(导入联系人需要)、crm.objects.companies.write(导入公司需要)。 - CSV编码:统一用UTF-8编码,避免中文乱码或解析错误。
内容的提问来源于stack exchange,提问作者IronMaiden
相关产品推荐
相关产品推荐

