http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection
このリソースを使用すると、最初の10メンバーのみを取得できます。すべてを入手するには?
答えは非常に簡単です-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
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を超える購読者をエラーなしでフェッチできます。
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")
Countだけで list root へのAPI呼び出しを行うことができるので、次のAPI呼び出しでcountパラメーターを含めて、すべてのリストメンバーを取得できます。
2600人のメンバーがいる適度なリストがあり、MailChimpがエラーをスローしていたため、これで問題が発生しましたが、1500人で動作しました。
したがって、1500を超えるメンバーのリストの場合、私は MailChimp export API を使用します。これは廃止されることになりますが、他の受け入れられる解決策は見つかりませんでした。
または、より大きなリスト(> 1500)の場合、メンバーの合計を取得して、 メンバーエンドポイント に対して複数のAPI呼び出しを行うこともできますが、私はそれが本当に嫌いです:(
誰かがより良い代替案を持っているなら、私はそれを聞いて本当に嬉しいでしょう。
オフセットとカウントはドキュメントの公式な方法ですが、問題は線形の速度低下です。 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」の正しい構文は何ですか を参照してください。
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;
}