search
LoginSignup
2

More than 5 years have passed since last update.

posted at

updated at

gibbon gemでmailchimpのリストを作成しメンバーを追加する

ざっくりいうと

mailchimpをgibbonというgemで操作してみた。です。

APIを操作して

  • リストの作成
  • リストに対してメンバーを登録する(バルク)

をします。

環境

  • gibbon 2.2.4
  • mailchimp APIv3
MailChimp API v3.0 is now live!
Prior versions will no longer be supported after 2016, so all API users should begin transitioning to v3.0.
Check out the API v3.0 Documentation for more details.

v2おわるよーとのこと(自分が見たとき公式gemがv2相当のように見えた、はて?)

手順

API キーをゲットする

公式のページが動画で紹介しているので迷わずゲットできそう。
http://kb.mailchimp.com/integrations/api-integrations/about-api-keys#Find-or-Generate-Your-API-Key

gibbonのインストール

gemから

$ gem install gibbon

です。

コード部分

まずはrequire

require 'gibbon'

次に先程取得したAPI KEYを設定します。

gibbon = Gibbon::Request.new(api_key: <取得した api_key>)

リストの作成

APIのページはこちら => http://developer.mailchimp.com/documentation/mailchimp/reference/lists/#create-post_lists

API的には post /list にlistを作成するためのデータを与えてcreateする感じです。
そのパラメータが必須なものが結構多く、下みたいな感じになりました。
ここに入力する内容は、mailchimpのGUIでリスト作成時に入力している内容を見てみるとわかりやすいかも。

list_params = {
  name: @list_name,
  contact: {
    company: 'company name',
    address1: '0-0, XXXXX',
    address2: 'XXXX Bldg',
    city: 'XXXXX-ku',
    state: 'Tokyo',
    zip: '000-0000',
    country: 'JP',
  },
  permission_reminder: 'message',
  campaign_defaults: {
    from_name: 'NAME',
    from_email: 'test@example.com',
    subject: '',
    language: 'ja',
  },
  email_type_option: true,
}

# 次でlistのidをとるためにresponseに入れている
responce = gibbon.lists.create(body: list_params)

こんな感じでbodyに与えてあげると作成できました。

作ったリストにアドレスを追加

次にリストにアドレスを追加します。普通にアドレスを1個ずついれるだけであれば
gibbonの公式を見ればそのままやり方が書いてあった気がするのでそちらを試していただくと良さそう。
わたしは数千、数万登録をする必要があったのですが、一斉登録で登録できる件数が500アドレスまでと決まっていてそれ以上はbulk処理をする必要があるとのことで以下はその感じになります。

# 2件しか書いてませんがいっぱいあるイメージ
emails = [
  { email_address: 'receiver1@example.com', status: "subscribed" },
  { email_address: 'receiver2@example.com', status: "subscribed" },
  ...
]

# バッチ処理用のオペレーションパラメータを作成
# 本来1つずつ飛ばすAPI呼び出しをoperationsの中にガンガン突っ込んでいく
operations = []
emails.each_slice(500) do |emails_block| # 一つ分のAPI呼び出しにつき500件までな為配列から500ずつ取り出す
  operations << {
    method: 'POST',
    path: "/lists/#{response['id']}",  # response['id']はさっき作成したリストのID
    body: { members: emails_block }.to_json # <= ここのjsonにするタイミングが公式見てもよくわからず恐ろしくハマった。
  }

# バッチを呼び出して実行
batch_response = gibbon.batches.create(body: { operations: operations })

これで作成出来ました。
バッチは少し時間がかかるので、ちょっとまってから管理画面を見てみると反映されていたりします。
コード上ではバッチもIDを持っているのでそれに対して、retriveしてあげるとレスポンスにstatusというものがあるのでそれをみてあげると start/pending/finishが確認できます。

response = gibbon.batches(batch_response['id']).retrieve
response['status'] #=> "finished"

の感じ。
バッチ処理のパラメータの渡し方はあまり検索していても乗っていなくて、かなりハマったので、もしかしたらご覧になっている方の環境では動かないかもしれないので、何卒。参考になれば幸いです。

メモを残していたものから走り書きしたので、何かと間違っていたらゴメンなさい。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
2