我需要通过Constant Contact API(http://developer.constantcontact.com/docs/contacts-api/contacts-collection.html?method=POST)将联系人批量加载到特定列表。
我可以使用下面相同的JSON字符串成功地将联系人添加到以下API GUI网站(https://constantcontact.mashery.com/io-docs(找到Tab POST'添加联系人'到集合):
update_contact = {"lists": [{"id": "1"}],"email_addresses": [{"email_address": "yasmin1.abob19955@gmail.com"}],"first_name": "Ronald","last_name": "Martone"}
然而,当我在我的python代码中运行相同的JSON字符串时,我收到错误400,其中包含来自我的响应对象的错误消息,如下所示:
[{"error_key":"query.param.invalid","error_message":"The query parameter first_name is not supported."},
{"error_key":"query.param.invalid","error_message":"The query parameter last_name is not supported."},{"error_key":"query.param.invalid","error_message":"The query parameter lists is not supported."},{"error_key":"query.param.invalid","error_message":"The query parameter email_addresses is not supported."}]
两个相同的API调用如何产生不同的结果?如何使我的python代码工作?
代码:
import requests
headers = {
'Authorization': 'Bearer X',
'X-Originating-Ip': '1',
'Content-Type': 'application/json'
}
update_contact = {"lists": [{"id": "1"}],"email_addresses": [{"email_address": "yasmin1.abob19955@gmail.com"}],"first_name": "Ronald","last_name": "Martone"}
r_2 = requests.post('https://api.constantcontact.com/v2/contacts?action_by=ACTION_BY_OWNER&api_key=x', headers=headers ,params = update_contact)
print(r_2.text)
答案 0 :(得分:1)
您需要将参数更改为数据
r_2 = requests.post('https://api.constantcontact.com/v2/contacts?action_by=ACTION_BY_OWNER&api_key=x', headers=headers ,data = update_contact)
此外,您还可以使用多部分端点上传联系人。我发现这很容易,特别是如果您的联系人在csv文件中。
示例代码如下所示:
import requests as r
import csv
from datetime import datetime
url = 'https://api.constantcontact.com/v2/activities/addcontacts?api_key=<your_api_key>'
headers = {'Authorization': 'Bearer <access_token>',
'X-Originating-Ip': '<ip>',
'content-type': 'multipart/form-data'}
files = {'file_name': 'Book1.csv',
'data': ('Book1.csv', open('Book1.csv', 'rb'),
'application/vnd.ms-excel', {'Expires': '0'}),
'lists':('<insert_listIds_seperated_by_commas>')}
response = r.post(url, headers=headers, files=files)
with open('CC_Upload_Response_Data.csv', 'a', newline='') as f:
writer = csv.writer(f)
time_stamp = datetime.now().strftime('%m-%d-%Y %H:%M')
row = [response, response.text, time_stamp]
writer.writerow(row)
csv文件的标题必须如此:“名字”“姓氏”“电子邮件地址”“自定义字段1”“自定义字段2”等。您可以在此处找到完整的列名列表:http://developer.constantcontact.com/docs/bulk_activities_api/bulk-activities-import-contacts.html
如果您要安排每晚运行.py文件,此代码附加的csv文件就像日志一样。日志记录响应代码,响应文本并添加时间戳。
稍微弄清楚它并按照你喜欢的方式得到它。