vCard をいじるサンプル
今年になって Android 携帯からガラケーに戻したんですが、そこで困ったのがアドレス帳の移行。ガラケーからスマフォにする人の例はネットのあちこちに情報があるものの、その逆はみつからず(まぁそりゃそうか)。いろいろ考えて、vCard形式でエクスポートして直にいじってガラケーにインポートするのが一番はやいという結論に達し、ruby でスクリプト書いたときの備忘録です。
頭こんがらがるのでまず整理
vCard | 文字コード | 改行コード | |
自分の携帯 | 2.1 | Shift-JIS | CRLF |
Google コンタクト | 3.0 | UTF8 | CRLF |
作業用 Mac | - | UTF8 | CR |
vCard の dump (2.1/3.0どちらでもおk)
#!/usr/bin/env ruby # -*- coding: utf-8 -*- require 'rubygems' require 'vpim/vcard' ARGV.each do |file| cards = Vpim::Vcard.decode(open(file)) cards.each do |card| begin puts "#{card.name.fullname}" rescue puts "! failed to decode name!" end card.each do |field| puts " group=#{field.group}" if field.group puts "..#{field.name.capitalize}=#{field.value.inspect}" end puts "---" end end
vCard(2.1形式)作成
API を直に呼んだほうがよいっぽい
require 'nkf' require 'rubygems' require 'vpim/vcard' card = Vpim::DirectoryInfo.create( [Vpim::DirectoryInfo::Field.create('VERSION', '2.1')], 'VCARD') card << Vpim::DirectoryInfo::Field.create('N', 'Licca Kayama', 'CHARSET' => 'SHIFT_JIS') card << Vpim::DirectoryInfo::Field.create('SOUND', 'カヤマリカ', 'CHARSET' => 'SHIFT_JIS', 'TYPE' => 'X-IRMC-N') card << Vpim::DirectoryInfo::Field.create('TEL', '0336042000', 'TYPE' => 'VOICE') card << Vpim::DirectoryInfo::Field.create('EMAIL', 'hoge@example.com', 'TYPE' => 'INTERNET') card << Vpim::DirectoryInfo::Field.create('ADR', '東京都葛飾区立石7丁目9-10', 'CHARSET' => 'SHIFT_JIS', 'TYPE' => 'WORK') puts NKF.nkf('-sxm0', card.to_s.gsub("\n", "\r\n")) # shiftjis + CRLFに変換
ガラケーのフリガナは
SOUND;X-IRMC-N;CHARSET=SHIFT_JIS:カヤマリカ
という感じだけど Google コンタクトでは
X-PHONETIC-FIRST-NAME:リカ X-PHONETIC-LAST-NAME:カヤマ
な感じになってます。