tb2ldif.rb
Thunderbirdのアドレス帳からエクスポートしたcsvファイルをLDAPに登録するために変換するRubyスクリプトです。
前日書いたように、ひじきネットさんのスクリプトを参考にさせていただきました。ありがとうございます。
名前はユニークなものでなければならないので、uid項目にメールアドレスを登録してインデックスとしてみました。
そのほかの設定は改造して使ってください。
#!/usr/bin/env ruby
require ‘uconv’
require ‘base64’
unless ARGV[0]
print “tb2ldif.rb -Version0.1- 2008/6/22n”
print “t使用方法ntt./tb2ldif.rb csvfile(Thunderbirdからエクスポートしたcsvfile)nn”
exit 1
end
#---------------------------------------------------------#
# 設定項目ここから
#---------------------------------------------------------#
# 各種フラグ
fConv = 1 #文字コード変換CP932=>UTF8のフラグ
fEnc = 1 #BASE64変換のフラグ(一応multibyte判定)
fStartp = 1 #一行目を処理しない
keyNum = 4 #uidとする項目番号
fDebg = 0 #動作確認用に
# DN指定
baseDN = ‘ou=AddressBook,dc=reptec,dc=local’
# ヘッダ。ファイルのはじめに追加される
header = <<-"EOB"
dn: #{baseDN}
objectClass: organizationalUnit
objectClass: top
ou: AddressBook
EOB
# 登録に必要となるオブジェクトクラスを書く
objectClass = <<-"EOB"
objectClass: inetOrgPerson
objectClass: top
EOB
# スキーマに応じた選び出し対応表
relationTable = [['dn',38],
['givenName',0],
['sn',1],
['cn',2],
['displayName',3],
['mail',4],
['telephoneNumber',6],
['homePhone',7],
['facsimileTelephoneNumber',8],
['mobile',10],
['streetAddress',17],
['l',19],
['st',20],
['postalAddress',21],
['title',23],
['ou',24],
['o',25],
['labeledURI',26],
['description',35],
['uid',37]
]
#---------------------------------------------------------#
# 設定項目ここまで
#---------------------------------------------------------#
# ファイルを開く
file = open(ARGV[0])
# ヘッダ部分の出力
print header
lineNum = 0
while file.gets
next if $_.strip.empty?
lineNum += 1
if fStartp == 1
lineNum -= 1
fStartp = 0
next
end
if fConv == 1
data = Uconv.sjistou8($_)
else
data = $_
end
data = data.chomp!.split(",", -1)
#個別dn内容の用意
data.push(data[keyNum])
data.push("uid=" + data[keyNum] + "," + baseDN)
if fDebg == 1
print "-*-*-*-*-*-*-*-*-n"
print "data内容は:n"
p data
print "-*-*-*-*-*-*-*-*-n"
end
relationTable.each{ |item|
val = data[item[1]]
key = item[0]+":"
if fEnc == 1
if val =~ /[x80-xff]/
val = Base64.encode64(val).split.join
key << ":"
end
end
if !val.empty?
print "#{key} #{val}n"
if key =~ /^[dD][nN]:/
print objectClass
end
end
}
print "n"
end
# ファイルを閉じる
file.close
# Thunderbirdの標準的CSV並びと対応番号表
# 0=名
# 1=姓
# 2=表示名
# 3=ニックネーム
# 4=メールアドレス
# 5=別のメールアドレス
# 6=勤務先の電話番号
# 7=自宅の電話番号
# 8=FAX 番号
# 9=ポケットベル番号
# 10=携帯電話番号
# 11=番地 (自宅)
# 12=番地 (自宅) 2
# 13=市町村 (自宅)
# 14=都道府県 (自宅)
# 15=郵便番号 (自宅)
# 16=国 (自宅)
# 17=番地 (勤務先)
# 18=番地 (勤務先) 2
# 19=市町村 (勤務先)
# 20=都道府県 (勤務先)
# 21=郵便番号 (勤務先)
# 22=国 (勤務先)
# 23=役職
# 24=部門
# 25=組織
# 26=Web ページ 1
# 27=Web ページ 2
# 28=誕生年
# 29=誕生月
# 30=誕生日
# 31=追加情報 1
# 32=追加情報 2
# 33=追加情報 3
# 34=追加情報 4
# 35=メモ
# 36=処理の都合で必ず空になる(split -1なので)
# 37=keyNumで指定したものの値
# 38=個別DN(スクリプト内で使用)