2017-02-11 2 views
1

Ich verwende mailchimp3 in Python. Ich schaffte es Batch-Einfügung von Benutzern zu machen mit dieser Funktion:Wie kann ich Listenmitglieder mit Mailchimp3 in Python abmelden/löschen?

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] 

Hier ist, wie ein Benutzer dict wie folgt aussieht:

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

Dann wollte ich ähnliche Methode verwenden Liste der Benutzer abmelden. Um das zu erreichen, habe ich versucht, die gleiche Logik zu verwenden, nur um die Benutzerobjekte zu ändern. Jetzt habe ich dieses Benutzerformat verwendet:

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

Es aktualisiert den Subskriptionsstatus nicht. Wenn ich alle Benutzer manuell gelöscht habe (über die Webschnittstelle) und den gleichen Befehl ausprobiert habe, habe ich erfolgreich Benutzer mit "status" erstellt: "abgemeldet". Ich frage mich, warum dieser Ansatz den Status nicht ändern kann? Ich habe auch versucht, POST anstelle von PUT zu verwenden, aber es hat nicht funktioniert. Irgendeine Idee, was kann das Problem sein?

Ich habe diese Referenz https://devs.mailchimp.com/blog/batch-operations-and-put-in-api-v3-0/ und es erwähnt, dass dieser Ansatz auch für Updates gut funktionieren sollte.

Vielen Dank im Voraus!

Antwort

0

Eigentlich war ich mit ein paar falschen Funktionen, so Hier ist der feste Code. Ich hatte auch einige Probleme mit der Größe der Chargen. Die maximale Stapelgröße beträgt 500, daher habe ich einige Datenabschnitte über mehrere Stapel verteilt. Hier ist ein einfacher Code, wie das Einfügen getan werden sollte:

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

Jedes Mitglied in members_data hat Daten wie folgt aus:

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

Und hier kommt die wichtigste Funktion:

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

Danach, in der Hauptsache des Skripts:

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

Die einzige Möglichkeit, einen bereits abonnierten Benutzer abzumelden, besteht darin, mit einer Listen-ID und einem MD5-Hash der Kleinbuchstabenversion der E-Mail-Adresse des Listenmitglieds zu aktualisieren.

client.lists.members.update ('LIST_ID', 'MD5 HASH', { "Status": "unsubscribed"})

Verwandte Themen