2015-03-31 102 views
1

我试图下载列表中的所有成员(有超过50000个),但我找不到在MailChimp API中执行此操作的任何方法。另一方面,我试图使用下面的“GetAllMembersForList”方法,但它没有得到所有的(他只有600)。获取列表中的所有成员

任何人都可以让我知道是否有其他方式下载这些成员名单?

public List<string> GetListMembers(string membersList) 
    { 
     ListResult lists = mc.GetLists(); 
     List<string> li = new List<string>(); 
     foreach(var list in lists.Data) 
     { 
      if (list.Name == membersList) 
      { 
       MembersResult res; 
       for (int i = 0; i <= list.Stats.MemberCount; i = i + 100) 
       { 
        res = new MembersResult(); 
        res = mc.GetAllMembersForList(list.Id, "subscribed", i, 100); 

        foreach (var member in res.Data) 
         li.Add(member.Email); 
       } 
       break; 
      } 
     } 
     return li; 
    } 
+0

我编辑了自己的冠军。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 – 2015-03-31 16:31:03

+0

投票结束导致问题可能不是与您的代码,但正如下面指出的,你忽略了他们的限制/带宽限制。我已经实现了从MC获得非常大的数据集(比你在这里谈论的大一个或两个数量级)的解决方案,并且解决方案是放慢你的请求,并且容忍500的错误以及你作为他们节流的结果。 – evanmcdonnal 2015-03-31 16:35:28

回答

1

我终于找到了自己的解决方案。我在这里发现了https://apidocs.mailchimp.com/export/1.0/list.func.php,我实现了如下所示。 我完全相信有人可以改善这一点,但这是我当时需要的东西。

这里是代码,如果有人想实现:

 public List<string> GetListMembers(string membersList, string status, string since = "") 
    { 
     List<string> li = new List<string>(); 
     //to see what does <dc> means? follow this link https://apidocs.mailchimp.com/api/rtfm/ 
     string linkPage = @"http://<dc>.api.mailchimp.com/export/1.0/list/?apikey={0}&id={1}&status={2}{3}"; 
     ListInfo list = mc.GetLists().Data.Where(x => x.Name == membersList).FirstOrDefault(); 
     linkPage = string.Format(linkPage, conectionMailChimp, list.Id, status, !string.IsNullOrEmpty(since) ? "&since=" + since : string.Empty); 

     WebClient wc = new WebClient(); 
     string text = wc.DownloadString(linkPage); 
     text = text.Replace("\"", ""); 
     string[] res = text.Split(new[] { "]\n[" }, StringSplitOptions.None); 

     for (int i = 1; i < res.Length; i++) 
      li.Add(res[i].Split(new[] { "," }, StringSplitOptions.None)[0].ToString()); 

     return li; 
    } 
0

要在一次调用中获得所有成员(实际上很少需要),可以使用Export API。否则,最好的办法就是使用分页功能并一次下载600个。

+0

谢谢你,但没有C#的集成。你有什么?或者你能帮我整合一下吗?在此先感谢您的帮助。 – Jotch 2015-04-01 10:42:46