0

我需要通过 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 'add contact' to collection):

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)
4

1 回答 1

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

把它弄乱一点,然后按照你喜欢的方式得到它。

于 2018-02-27T22:08:49.867 回答