2017-02-11 10 views
1

Я использую mailchimp3 в Python. Мне удалось сделать пакетный ввод пользователей, использующих эту функцию:Как отменить подписку/удалить список участников с помощью Mailchimp3 в Python?

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] 

Вот как один пользователь ДИКТ выглядит:

{"email_address": "[email protected]", "status": "subscribed"} 

Тогда я хотел использовать подобный метод отписать список пользователей. Для этого я попытался использовать ту же логику, просто чтобы изменить пользовательские объекты. Теперь я использовал этот формат пользователя:

{"email_address": "[email protected]", "status": "unsubscribed"} 

Он не обновляет статус подписки. Когда я удалил всех пользователей вручную (используя веб-интерфейс) и попробовал ту же команду, я успешно создал пользователей с «статусом»: «Отписано». Мне интересно, почему этот подход не может изменить статус? Я попытался использовать POST вместо PUT, но это не сработало. Любая идея, что может быть проблемой?

Я использовал эту ссылку https://devs.mailchimp.com/blog/batch-operations-and-put-in-api-v3-0/, и он упоминает, что этот подход также должен отлично работать и для обновлений.

Спасибо заранее!

ответ

0

На самом деле, я использовал некоторые неправильные функции, так вот фиксированный код. У меня также были некоторые проблемы с размером партий. Максимальный размер партии - 500, поэтому я сделал несколько разделов данных несколькими партиями. Вот простой код, как введение должно быть сделано:

client = MailChimp(USERNAME, APIKEY) 

def _update_list(list_id: str, members_data: list): 
    client.lists.update_members(list_id, {'members': members_data, 'update_existing': True}) 

Каждый участник members_data имеет данные, как это:

mailchimp_user = { 
     'email_address': user.email, 
     'status': user.subscription_status, 
     'merge_fields': { 
      'FNAME': user.first_name, 
      'LNAME': user.last_name 
     }, 
     'interests': {} 
    } 

И вот наступает самый важный функция:

def fill_in_multiple_batches(list_id, mailchimp_members): 
    step_size = 400 

    for i in range(0, len(mailchimp_members), step_size): 
     batch_start_idx = i 
     batch_end_idx = min(i + step_size, len(mailchimp_members)) 
     this_batch_of_members = mailchimp_members[batch_start_idx:batch_end_idx] 

     client.lists.update_members(list_id, {'members': members_data, 'update_existing': True}) 

После этого в главном сценарии:

if __name__ == '__main__': 
    fill_in_multiple_batches('your_list_id', your_data_list) 
1

Единственный способ отменить подписку на уже подписанный пользователь - это обновить идентификатор списка и хэш MD5 строчной версии адреса электронной почты члена списка.

client.lists.members.update ('LIST_ID', 'MD5 HASH', { "Статус": "отписался"})