Python使用createsend库对接Campaign Monitor时无法解析clicks返回数据的问题咨询
问题根因
你遇到的返回异常是两个实操层面的问题,和Campaign Monitor接口权限、密钥有效性无关:
- 不带括号调用
campaign1.clicks时,拿到的是Campaign类挂载的方法本身,不是执行请求后的返回值,所以会打印成绑定方法的内存对象标识 - 带括号调用
campaign1.clicks()执行成功后,拿到的是createsend库自定义的CreateSendModel实例,这个类没有重写自定义打印逻辑,直接print实例只会显示类的类型标识,不会自动把内部存储的业务数据输出到控制台
这个自定义类的实现逻辑非常直白:把接口返回的JSON内容全量映射成对象的可访问属性,不是完全封装的黑盒结构。
具体操作步骤
1. 正确执行接口请求
首先确保调用时给方法加上括号,实际发起API请求拿到返回结果对象:
from createsend import * auth = {'api_key': '你的专属API密钥'} # 替换成你要查询的目标活动ID target_campaign = Campaign(auth, '待查询的目标营销活动ID') # 加括号实际执行请求,拿到点击统计结果对象 clicks_result = target_campaign.clicks()
2. 读取对象内部的结构化数据
因为这个对象没有自定义打印逻辑,你不需要翻文档猜有哪些字段,直接通过两种方式读取数据:
- 快速导出全量内部存储数据:通过
__dict__属性拿到所有接口返回的键值对,这是Python对象自带的属性,存了对象挂载的所有实际数据:
# 拿到全量点击统计的字典格式数据 all_click_data = clicks_result.__dict__ # 此时打印就能看到所有实际统计值,比如总点击、独立点击、退信数等 print(all_click_data)
- 定向读取指定字段:如果你知道需要的字段名,可以直接通过属性访问,比如:
print("活动总点击数:", clicks_result.TotalClicks) print("活动独立点击数:", clicks_result.UniqueClicks) print("关联退订点击数:", clicks_result.Unsubscribes)
3. 适配BI工具上传的格式转换
你日常使用R对数据框结构比较熟悉,可以直接把拿到的结构化数据转成pandas数据框,导出为通用CSV格式上传内部BI:
import pandas as pd # 基础统计数据转成单行数据框 stats_df = pd.DataFrame([all_click_data]) # 导出CSV,编码适配中文BI工具的读取要求 stats_df.to_csv("campaign_click_stats.csv", index=False, encoding="utf-8-sig") # 如果需要拉取逐次点击的明细数据,可以通过clicks方法的分页参数拉取全量明细 # 拉取第1页、每页100条的点击明细 detail_result = target_campaign.clicks(page=1, page_size=100) # 明细数据存在Results属性中 click_detail_df = pd.DataFrame(detail_result.Results) click_detail_df.to_csv("campaign_click_detail.csv", index=False, encoding="utf-8-sig")
实操注意事项
- 所有需要发起API请求的接口都是对象挂载的方法,必须加括号才会实际执行网络请求,不然拿到的只是方法的引用,和R里调用自定义函数必须写函数名加括号的逻辑一致,只是Python把方法挂在了类实例上
- 访问字段时如果报“属性不存在”的错误,先打印
__dict__里的实际键名,老版本库的字段名存在大小写差异,不要硬套文档上的字段名做猜测 - 之前代码里的
campaign_ids = cs.clients()属于冗余赋值,不影响运行,但没有实际作用,可以删除减少代码干扰
内容的提问来源于stack exchange,提问作者jefflmp585
相关产品推荐
相关产品推荐

