Mailchimp APIをRuby(Rails)で操作しよう


メールマガジン配信ツールMailchimp( http://mailchimp.com/ )をRuby(Rails)で取り扱い
会員サービスを運営時に会員が退会した際や、メールアドレスを変更した際にメールマガジンのアドレスも削除・変更を行うようにする

## 前提条件
* Mailchimpのサービスのアカウント作成済み
* Mailchimpのメーリングリストを作成済みであること

## APIキーの取得

MailchimpにログインしAPIキーを発行する。下記URLのやり方を参考にすれば簡単

http://kb.mailchimp.com/accounts/management/about-api-keys/#Find-or-Generate-Your-API-Key

### accountセッティングを開き
![account_settings.png](https://qiita-image-store.s3.amazonaws.com/0/5390/e7435611-b2e2-0fd9-49fd-2bfdaed19c03.png "account_settings.png")

### extras から API keysを選択する
![スクリーンショット 2016-03-16 11.52.57.png](https://qiita-image-store.s3.amazonaws.com/0/5390/b0cef8a7-5930-7432-0d45-305aaf56f73d.png "スクリーンショット 2016-03-16 11.52.57.png")

### Create A Key のリンクをクリックすると
![スクリーンショット 2016-03-16 11.53.02.png](https://qiita-image-store.s3.amazonaws.com/0/5390/19f58fae-d1dc-350b-4961-535a474632f0.png "スクリーンショット 2016-03-16 11.53.02.png")


### このようにAPIを出力する

![api_key.png](https://qiita-image-store.s3.amazonaws.com/0/5390/bd45d1dc-49f1-64f8-e0d1-586681d4dfdd.png "api_key.png")


# Ruby(Rails)で操作する

Mailchimpの公式のgem mailchimp-api-ruby がありこれを利用する
https://bitbucket.org/mailchimp/mailchimp-api-ruby/


## APIのドキュメントページ 
http://www.rubydoc.info/gems/mailchimp-api/2.0.6

## Railsの場合実装例

基本的にはドキュメントを読んで、やりたい内容をパラメタをつけてラップしたメソッドを用意してやると
アプリケーション上で使いやすいだろう

Gemfileにmailchimp-apiを追加

```Gemfile
gem "mailchimp-api", require: "mailchimp"
```
　
app/models/mail_magazine.rb を以下のように作成する
それぞれのメソッドの説明は後述

```mail_magazine.rb
class MailMagazine
  attr_accessor :mailchimp
  API_KEY = "YOUR_API_KEY_XXXXXXXXXXXXXXXXXXXXX"

  def initialize
    @mailchimp = Mailchimp::API.new(API_KEY)
  end

　# リストの情報を取得する
  def fetch_mailing_list
   # DOC: http://www.rubydoc.info/gems/mailchimp-api/2.0.6/Mailchimp/Lists#list-instance_method
   @mailchimp.lists.list
  end
  
  # リストに対象のメールアドレスがあるか？
  def member?(list_id, email)
    # 個別のリストの該当のユーザの情報を問い合わせてる、1ユーザの問い合わせだが引数が配列である必要がある。
    # 返り値のハッシュsuccess_countが1であればsubscribedな状態のユーザが存在する事となる
    # DOC: http://www.rubydoc.info/gems/mailchimp-api/2.0.4/Mailchimp%2FLists%3Amember_info
    result = @mailchimp.lists.member_info(list_id, [{email: email}])["success_count"]
	result > 0
  end

  # リストに追加
  def add_member(list_id, email)
    # 追加したことを相手に確認メールをせずに追加する
    # DOC: http://www.rubydoc.info/gems/mailchimp-api/2.0.4/Mailchimp%2FLists%3Asubscribe
    @mailchimp.lists.subscribe(
        list_id, {email: email}, {FNAME: user.first_name, LNAME: user.last_name}, "html", false)
  end

  # リストから削除
  def remove_member(list_id, email)
　　 # 相手に確認を取らずにリストから削除する
 　　# DOC: http://www.rubydoc.info/gems/mailchimp-api/2.0.4/Mailchimp%2FLists%3Aunsubscribe
    @mailchimp.lists.unsubscribe(list_id, {email: email}, true, false, false)
  end
```

## 使い方

### メルマガのリストからハッシュを取ることが出来る

```
mail_magazine = MailMagazine.new
mail_magazine.fetch_mailing_list
```

### 対象のメアドがリストに存在するかチェック

```
mail_magazine = MailMagazine.new
mail_magazine. member?("id_xxxxx", "test@example.com")
```


### 対象のメアドをリストに追加する

```
mail_magazine = MailMagazine.new
mail_magazine.add_member("id_xxxxx", "test@example.com")
```


### 対象のメアドをリストから削除する

```
mail_magazine = MailMagazine.new
mail_magazine.remove_member("id_xxxxx", "test@example.com")
```