danesparza / MailChimp.NET

:envelope: .NET Wrapper for the MailChimp v2.0 API
MIT License
179 stars 119 forks source link

Examples needed #182

Closed JJGSS closed 8 years ago

JJGSS commented 8 years ago

Hi, I need an example to show retrieving the merge Vars: FNAME, LNAME etc for a list. Has anyone got one they can let be have to work on.

aksmith58 commented 8 years ago
static List<string> MergeFields()
{
    MailChimpManager mc = new MailChimpManager("YourApiKeyHere-us2");
    List<string> MergefieldsList = new List<string>();
    MergeVarResult MergeFields = mc.GetMergeVars(new List<string> { "ListIDHere" });
    foreach (MergeVarListResult fields in MergeFields.Data)
    {
        foreach (MergeVarItemResult field in fields.MergeVars)
        {
            MergefieldsList.Add(field.Tag);
        }

    }
    return MergefieldsList;
}
JJGSS commented 8 years ago

Thanks, that will really help.

aksmith58 commented 8 years ago

no problems, let me know if you run into any issues

JJGSS commented 8 years ago

Well... I can get the names of the fields from your code, but I can't seem to get the values. I changed the code so it receives the person, but it is wrong!

        private List<string> MergeFields(person p)
        {
            List<string> MergefieldsList = new List<string>();  //the result
            MergeVarResult MergeFields = mc.GetMergeVars(new List<string> { p.Id });

            foreach (MergeVarListResult fields in MergeFields.Data) {
                foreach (MergeVarItemResult field in fields.MergeVars) {
                    MessageBox.Show("Tag= " + field.Tag + " Name= " + field.Name);
                    MergefieldsList.Add(field.Tag);
                    //MergefieldsList.Add(field.Name);
                }
            }
            return MergefieldsList
aksmith58 commented 8 years ago

This should return the value of FNAME for each member in a list. It could be expanded out to include the other merge fields by using the code above. Let me know how you go.

public List<String> LoadContactList(string ListID)
{

    MailChimpManager mc = new MailChimp.MailChimpManager("APIKey here");

    List<String> contactList = new List<String>();

        int total = 25;
        int counter = 0;
        int subcounter = 0;

        while ((counter <= total))
        {
            MembersResult result = mc.GetAllMembersForList(ListID, start: subcounter, limit: 25);

            MergeVar MerageVars;
            foreach (MemberInfo member in result.Data)
            {

                MerageVars = member.MemberMergeInfo;

                string FirstName = "";

                if (MerageVars["FNAME"] != null)
                {
                    FirstName = MerageVars["FNAME"].ToString();
                }

                contactList.Add(FirstName);
            }

            total = result.Total;
            counter = (counter + 25);
            subcounter++;

        }

    return contactList;
}
JJGSS commented 8 years ago

Brilliant, that's what I needed, thanks.

JJGSS commented 8 years ago

My code is: ` private void ReadLists() { string LNAME=""; string FNAME=""; string MMERGE3=""; try { SetUpChimpLists();

            ListResult lists = mc.GetLists();
            string subscribed = "unsubscribed";
            int j;
            Boolean bSub;
            j = lists.Total;
            var members = new List<person>();
            string HashCode;
            //  For each list
            foreach (var list in lists.Data)
                {
                //  Write out the list name:
                textBox1.Text = textBox1.Text +  "Users for the list " + list.Name + Environment.NewLine;
                for (int k = 0; k < 2; k++) //Once for subscribed, once for unsubscribed
                { 
                    if (k == 1) subscribed = "subscribed";
                    else subscribed = "unsubscribed";
                    HashCode = list.Id;
                    Boolean cont = true;
                    int StartAt = 0;
                    while (cont)
                    {
                        MembersResult results = mc.GetAllMembersForList(HashCode, subscribed,  StartAt, 100);

                        int i = 0;
                        //Array.Clear(members, 0, members.Length);
                        members.Clear();
                        MergeVar MyMergeVars;
                        //  Write out each member's email address:
                        foreach (var member in results.Data)
                        {
                            if (list.Name == "Education HL359")
                            {
                                listBox1.Items.Add(member.Email.ToString() + ": " + subscribed);
                            }
                            else
                            {
                                listBox2.Items.Add(member.Email.ToString() + ": " + subscribed);
                            }
                            MyMergeVars = member.MemberMergeInfo;
                            try
                            {
                                FNAME = MyMergeVars["FNAME"].ToString();
                            }
                            catch { FNAME = ""; };
                            try { LNAME = MyMergeVars["LNAME"].ToString(); } catch { LNAME = ""; };
                            try { MMERGE3 = MyMergeVars["MMERGE3"].ToString(); } catch { MMERGE3 = ""; };
                            members.Add(new person {
                                Id = member.Id.ToString(),
                                Email = member.Email.ToString(),
                                FNAME = FNAME,
                                LNAME = LNAME,
                                MMERGE3 = MMERGE3
                            });              
                            i++;
                        }
                        bSub = (subscribed == "subscribed");

                        //MessageBox.Show(bSub.ToString());
                        UpdateSql(members, HashCode, bSub);

                        if (i >= 100) //used up all 100 places
                        {
                            StartAt ++;
                        }
                        else
                        {
                            cont = false;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }`