web-dev-qa-db-ja.com

MailChimp API 3.0を使用して、メーリングリストからすべてのメンバーを取得する

http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection

このリソースを使用すると、最初の10メンバーのみを取得できます。すべてを入手するには?

15
graceman9

答えは非常に簡単です-URLクエリでoffsetおよびcountパラメータを使用します:

https://us10.api.mailchimp.com/3.0/lists/b5b5fdc2fa/members?offset=150&count=10

最後に、PHP MailChimp API v3のAPIクライアント: https://github.com/pacely/mailchimp-api-v が見つかりました。

そして、ページネーションに関する公式ドキュメント..私は前にそれを見逃しました:( http://kb.mailchimp.com/api/article/api-3-overview

18
graceman9

MC API 3.0でもすべてのリストメンバーを取得する方法を調べているときに、これに遭遇しました。 1つのページですべてのリストメンバーを取得しようとすると、APIがタイムアウトするというコメントがあることに気付きました。私も最初にこれに遭遇しましたが、 'fields'パラメータを使用して結果のフィールドを制限することで克服できました。私のコードは一括削除プログラム用なので、本当に必要なのは、一括削除リクエストをまとめるための各メンバーのIDだけでした。これが私のフェッチリクエストがどのように見えるかです(疑似コード):

$total_members = $result['total_items'];//get number of members in list via previous request
https://usXX.api.mailchimp.com/3.0/lists/foobarx/members?fields=members.id&count=total_members

このようにして、1ページで15,000を超える購読者をエラーなしでフェッチできます。

6
Tate Harmann

offsetおよびcountパラメータの使用は、他のいくつかの回答で述べたように正しいですが、大きなリストの場合は退屈になります。

より効率的な方法は、MailChimp APIのクライアントを使用することです。私は pythonのmailchimp を使用しました。これを使用すると、ページ付けを処理するため、リストのすべてのメンバーを簡単に取得できます。これを行う方法は次のとおりです。

from mailchimp3 import MailChimp

client = MailChimp('YOUR_USERNAME', 'YOUR_SECRET_KEY')
client.lists.members.all('YOUR_LIST_ID', get_all=True, fields="members.email_address")
2

Countだけで list root へのAPI呼び出しを行うことができるので、次のAPI呼び出しでcountパラメーターを含めて、すべてのリストメンバーを取得できます。

2600人のメンバーがいる適度なリストがあり、MailChimpがエラーをスローしていたため、これで問題が発生しましたが、1500人で動作しました。

したがって、1500を超えるメンバーのリストの場合、私は MailChimp export API を使用します。これは廃止されることになりますが、他の受け入れられる解決策は見つかりませんでした。

または、より大きなリスト(> 1500)の場合、メンバーの合計を取得して、 メンバーエンドポイント に対して複数のAPI呼び出しを行うこともできますが、私はそれが本当に嫌いです:(

誰かがより良い代替案を持っているなら、私はそれを聞いて本当に嬉しいでしょう。

2

オフセットとカウントはドキュメントの公式な方法ですが、問題は線形の速度低下です。 n ^ 2のソリューションのように見えるので、アイテム数が20,000だと困ります。彼らのドキュメント http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#read-get_lists_list_id_members オフセットを使用しないよう警告します。

他のフィルター(since_last_changedなど)の使用が許可されている場合は、すぐに実行できます。日時の形式については MailChimp API 3.0の「timeframe」の正しい構文は何ですか を参照してください。

1
Mike S

MailChimp.Net。
オフセット値を使用します。

List<Member> listMembers = new List<Member>();
IMailChimpManager manager = new MailChimpManager(MailChimpApiKey);
bool moreAvailable = true;
int offset = 0;
while (moreAvailable)
{
    var listMembers = manager.Members.GetAllAsync(yourListId, new MemberRequest
    {
        Status = Status.Subscribed,
        Limit = 250,
        Offset = offset
    }).ConfigureAwait(false);

    var Allmembers = listMembers.GetAwaiter().GetResult();
    foreach(Member member in Allmembers)
    {
        listMembers.Add(member);
    }
    if (Allmembers.Count() == 250)
        //if the count is < of 250 then it means that there aren't more results
        offset += 250;
    else
        moreAvailable = false;
}