Python:使用批量API V3向mailchimp添加订户

Python:使用批量API V3向mailchimp添加订户,python,mailchimp,mailchimp-api-v3.0,Python,Mailchimp,Mailchimp Api V3.0,我试图写一个函数来在mailchimp中创建订阅者,但是我得到了一个错误,我不明白是什么错了 我正在使用(是的,我有正确的列表id,而不是000000) 我的代码: from mailchimp3 import MailChimp def export_to_mailchimp(): #Get all users in DB users = User.objects.all() #Create list for dictionaries da

我试图写一个函数来在mailchimp中创建订阅者,但是我得到了一个错误,我不明白是什么错了

我正在使用(是的,我有正确的列表id,而不是000000)

我的代码:

from mailchimp3 import MailChimp
def export_to_mailchimp():

    #Get all users in DB
    users = User.objects.all()
    
    
    #Create list for dictionaries
    databody = []


    #loop through queryset
    for userobject in users:
    
        #Create dictionary
        databody_item = {
            "email_address": item.email,
            "status": "subscribed",
            "merge_fields": {
                "FNAME": item.first_name,
                "LNAME": item.last_name
            }
        }
        #Append to list
        databody.append(databody_item)    


    client = MailChimp(settings.MAILCHIMP_USER, settings.MAILCHIMP_KEY)
    batch = client.batches.create(data={"operations" : [{"method":"POST", "path":"/lists/00000/members/", "body":databody}]})    
以下是回溯:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/celery/local.py", line 188, in __call__
    return self._get_current_object()(*a, **kw)
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/celery/app/task.py", line 420, in __call__
    return self.run(*args, **kwargs)
  File "/home/USER/.virtualenvs/DOMAIN/PROJECT/apps/members/tasks.py", line 2340, in update_mailchimp
    batch = client.batches.create(data={"operations" : [{"method":"POST", "path":"/lists/000000/members/", "body":databody}]})
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/mailchimp3/entities/batches.py", line 53, in create
    return self._mc_client._post(url=self._build_path(), data=data)
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/mailchimp3/mailchimpclient.py", line 25, in wrapper
    return fn(self, *args, **kwargs)
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/mailchimp3/mailchimpclient.py", line 71, in _post
    r.raise_for_status()
  File "/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site-packages/requests/models.py", line 862, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: https://us12.api.mailchimp.com/3.0/batches
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/celery/local.py”,第188行,在调用中__
返回自我。获取当前对象()(*a,**kw)
文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/芹菜/app/task.py”,第420行,在调用中__
返回self.run(*args,**kwargs)
文件“/home/USER/.virtualenvs/DOMAIN/PROJECT/apps/members/tasks.py”,第2340行,在update\u mailchimp中
batch=client.batches.create(数据={“操作”:[{“方法”:“POST”,“路径”:“/lists/000000/members/”,“body”:databody}]})
文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/mailchimp3/entities/batches.py”,第53行,在create中
返回self.\u mc\u client.\u post(url=self.\u build\u path(),data=data)
包装器中的文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/mailchimp3/mailchimpclient.py”,第25行
返回fn(自身、*args、**kwargs)
文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/mailchimp3/mailchimpclient.py”,第71行,在文章中
r、 为_状态()提出_
文件“/home/USER/.virtualenvs/DOMAIN/lib/python3.4/site packages/requests/models.py”,第862行,处于raise\U状态
引发HTTPError(http\u error\u msg,response=self)
requests.exceptions.HTTPError:400客户端错误:url请求错误:https://us12.api.mailchimp.com/3.0/batches
有人知道我做错了什么吗

更新
如果我做了
“body”:json.dump(databody)
我不会得到同样的错误,但是
模式描述了对象,而数组被找到了

这是正确的方法

from mailchimp3 import MailChimp
def export_to_mailchimp():

    #Get all users in DB
    users = User.objects.all()


    #Create list for dictionaries
    operations = []


    #loop through queryset
    for userobject in users:

        #Create dictionary for body
        databody_item = {
            "email_address": item.email,
            "status": "subscribed",
            "merge_fields": {
                "FNAME": item.first_name,
                "LNAME": item.last_name
            }
        }
        #Create dictionary for a operation
        operation_item = {"method":"POST", "path":"/lists/000000/members/", "body":json.dumps(databody_item)}
        #Append to list
        operations.append(operation_item)    


    client = MailChimp(settings.MAILCHIMP_USER, settings.MAILCHIMP_KEY)
    batch = client.batches.create(data={"operations": operations})

这是一份工作报告:

client = MailChimp(USERNAME, APIKEY)
def fill_list(list_id, subscribers_data):
    data = {'operations': create_subscriptions_data(list_id, subscribers_data)}
    client.batches.create(data)

def create_subscriptions_data(list_id, users_data):
    return [{'method': 'PUT',
             'path': 'lists/{}/members/{}'.format(list_id, str(md5(user['email_address'].encode('utf-8')))),
             'body': json.dumps(user)} for user in users_data]
我猜这个问题与方法,需要张贴。有关更多详细信息,请使用下面的链接。我在那里找到了: