4

Vpimを使用して、ユーザーがアドレス帳にインポートできる .vcf ファイルを生成しています。私が抱えている問題は、彼らのダウンロードが企業向けであり、個人向けではないという情報であるため、カードにそのようにマークする必要があることです. Vpim を使用してこれを行う方法はありますか、またはこれを達成するために使用できる別の宝石はありますか?

def to_vcf
  card = Vpim::Vcard::Maker.make2 do |maker|
  ...
  end
end

アドレス帳からの名刺のソース

BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

アドレス帳からの非名刺のソース

BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

明らかに、これらのコード サンプルには 2 つの主な違いがあります。

  • ORG:フロー スケートパーク。
  • X-ABShowAs:COMPANY

ただし、これが Vpim にどのように変換されるかはわかりません。

ここに画像の説明を入力

4

2 に答える 2

3

迅速で汚い実装、私はあなたを正しく理解したことを願っています:

require 'vpim/vcard'

vcards = <<VCARD
BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
VCARD

contacts = []
Vpim::Vcard.decode(vcards).each do |vcard|
  contacts << {
    first_name:        vcard.name      ? vcard.name.given         : '',
    last_name:         vcard.name      ? vcard.name.family        : '',
    organisation_name: vcard.org       ? vcard.org.first          : '',
  }
end

def to_vcard(card)
  Vpim::Vcard::Maker.make2 do |maker|
    maker.add_name do |name|
      name.given = card[:first_name] unless card[:first_name].empty? || card[:first_name].nil?
      name.family = card[:last_name] unless card[:last_name].empty?  || card[:last_name].nil?
    end
    maker.org = card[:organisation_name] unless card[:organisation_name].empty? || card[:organisation_name].nil?
  end
end

contacts.each_with_index do |contact, idx|
  File.open("contact#{idx}.vcf", 'w') {|f| f.write(to_vcard(contact)) }  
end

通常vs会社

于 2011-07-11T19:34:21.273 に答える
0

maker オブジェクトには、ORG を設定するために使用できる org= メソッドがあるようです。X-ABShowAs に関しては、メーカーには add_field メソッドがあります。そのためには、おそらく独自のフィールド (http://vpim.rubyforge.org/classes/Vpim/DirectoryInfo/Field.html) を作成できます。

于 2011-07-10T09:25:21.230 に答える