如何通过python成功地将批量联系人加载到常量联系API?

时间:2018-02-10 01:43:30

标签: python-2.7 api-design constantcontact

我需要通过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)

1 个答案:

答案 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文件就像日志一样。日志记录响应代码,响应文本并添加时间戳。

稍微弄清楚它并按照你喜欢的方式得到它。