outlookからMacのアドレスブックへのインポート
異動や入社・退職があるたび社内メールのアドレス帳を各部署に配布しているのですが、これまたOutlookのpstファイルで配布していてマックチームはここから取り残されています。これまで異動分は手作業で個人がメンテしていたらしいのですがこれを聞いてまた発憤!
OSXのアドレスブックはもちろんvCard対応なのでこの形式で配布してあげればいいわけで今回は簡単です。ホントはLDAPサーバでも立ち上げればいいのかもしれませんがそこまでも...
配布するOutlook用のpstファイルのメンテはまた別の人がやっているので、配布のpstファイルから一旦自分のパソコンのOutlookに取り込んで、CSVファイルにエクスポート。そいつをvCardに変換してやることにしました。CSVをvCard形式に変換するツールはたくさんあるみたいですが、一応調べてみたらRubyにもちゃんとvpimというライブラリがありました。「あるものは使え」ってのが基本的なスタンスなんですけど、今回は勉強のためこのライブラリを使って自分で変換することにしました。(ちなみに入力のCSV形式は姓,名,Mailアドレスです)
n = s = ''
f = ARGV.shift || exit
CSV::Reader.create(File.open(f)).sort { | a, b |
a[2].data <=> b[2].data
}.each_with_index { | r , k |
vcard = Vpim::Vcard.create()
r.each_with_index { | c , i |
case i
when 0 then
n = "#{c.data}"
when 1 then
if !c.nil? && c.data.length > 0
vcard << Vpim::DirectoryInfo::Field.create('N',"#{n};#{c.data}")
vcard << Vpim::DirectoryInfo::Field.create('FN',"#{n} #{c.data}")
else
vcard << Vpim::DirectoryInfo::Field.create('N',"#{n}")
vcard << Vpim::DirectoryInfo::Field.create('FN',"#{n}")
end
when 2 then
vcard << Vpim::DirectoryInfo::Field.create('EMAIL',"#{c.data}",'type'=>['PREF','INTERNET'])
end
}
vcard << Vpim::DirectoryInfo::Field.create('REV',"#{Time.now.strftime('%Y%m%dT%H%M%SZ')}")
puts vcard.to_s
}
vCardに関する情報はあまりいいドキュメントがなくてPersonal Data Interchangeが公式なページになるのでしょうか?もう少し分かりやすくまとめて欲しかったなぁ。OSXのアドレスブックの出力するvCardにはカテゴリとかの情報もあるみたいでしたがよく分からなかったのでこれらは無視して作成しました。
もちろん、例によって何も考えないでUTF-8で出力したら、やっぱり文字化けでした。...アドレスブックはUTF-16でお願いします。やれやれ...










Comments