email marketing applicationをAPI経由でRubyから使うのは
MailChimpがよいとの話を聞いたので,
gibbonなるgemをインストールしてテストしてみた。
Google先生に聞いてもほとんどPHPのサンプルコードしかないのでRubyから使うのはちょいと苦労した。
API 2.0のドキュメントは少し不親切かも。
iContactだとActiveRecord的に購読者リストを扱えるasts_as_icontactってのがあるらしいが,調査した限りではMailChimpにそんなものはないらしい。
で,gibbonの使い方だが,まずは
Finding or generating your API keyにしたがってAPI keyを取得。コレひとつでAPIが利用できるので認証はチョー簡単。
Listへの登録
Listへの登録は lists.subscribe を使う。
以下の例では(Interests)Groupを対象Listに2個設定しているので,groupings というArrayに2個Hashを登録。CSVファイルからメールアドレス,組織名,姓,名,関連製品(購読者の関連製品を":"で区切ってある)を読み込んでListに追加。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'gibbon'
API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us8"
gb = Gibbon::API.new(API_KEY)
list_id = "1a2b3c4d5e"
io = open "contacts.csv"
while line = io.gets
puts line
email, org, sei, mei, title, products = line.split(",")
begin
merge_vars = Hash.new
merge_vars = {
:org => org,
:sei => sei,
:mei => mei,
:title => title,
:groupings => { 0 => { "id" => 10001, :groups => products.split(":")},
1 => { "id" => 10002, :groups => ["Customer" ]}
}
}
gb.lists.subscribe(:id => list_id,
:email => {:email => email},
:merge_vars => merge_vars,
:update_existing => true,
:replace_interests => true,
:double_optin => false)
rescue Gibbon::MailChimpError => e
puts e.message
puts e.code
end
end
io.close
Saved Segmentの設定
Campaignでメール配信する際にListを絞込するためのsegmentの定義。conditions の書式に留意。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'gibbon'
API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us8"
gb = Gibbon::API.new(API_KEY)
conditions = { 0 => {:field => 'interests-19999',
:op => 'one',
:value => 'product1'}}
time_added = Time.now.strftime("%y-%m-%d %H:%M")
list_id = "1a2b3c4d5e"
begin
segment_id = gb.lists.segment_add(:id => list_id,
:opts => {
:type => 'saved',
:name => "via Gibbon #{time_added}",
:segment_opts => {
:match => 'any',
:conditions => conditions}})
rescue Gibbon::MailChimpError => e
puts e.message
puts e.code
end
puts "segment created #{segment_id}"
MailChimpは無料で2,000購読者月12,000メール配信まで使える。