Importar endereços do Claws no Evolution (entre outros)
Publicado por Felipe Rafailov (última atualização em 24/11/2009)
[ Hits: 4.571 ]
Este script em Ruby lê o arquivo XML de endereços do Claws-Mail e os escreve em formato vCard, que pode ser facilmente importado pelo Evolution ou outro programa de e-mail que aceite este formato.
Serve também de estudo para manipulação de arquivos XML e vCard com Ruby.
Requer o "gem" vpim, que pode ser encontrado em: http://vpim.rubyforge.org/ (ou pelo comando "gem install vpim").
#!/usr/bin/ruby
require 'rubygems'
require 'rexml/document'
# O 'gem' vpim pode ser encontrado em http://vpim.rubyforge.org/
# ou instalado através do comando 'gem install vpim' (como root).
require 'vpim/vcard'
include REXML
file = File.new(ARGV.first)
doc = Document.new(file)
root = doc.root
root.each_element('//person') do |person|
card = Vpim::Vcard::Maker.make2 do |maker|
maker.add_name do |name|
if person.attributes['first-name'].empty?
name.given = person.attributes['cn'].split.first
else
name.given = person.attributes['first-name']
end
if person.attributes['last-name'].empty?
name.family = person.attributes['cn'].split.last
else
name.family = person.attributes['last-name']
end
name.fullname = person.attributes['cn']
end
maker.nickname = person.attributes['nick-name']
person.children[1].each_element do |emailaddr|
maker.add_email(emailaddr.attributes['email'])
end
person.children[3].each_element do |property|
case property.attributes['name']
when /^endereço( do trabalho)?$/ then
maker.add_addr do |addr|
addr.location = $1 ? 'work' : 'home'
addr.preferred = true unless $1
addr.street = property.text
end
when "data de nascimento" then
maker.birthday = Time.parse(property.text)
when "fax" then
maker.add_tel(property.text) do |t|
t.location = 'work'
t.capability = 'fax'
end
when "organização" then
# TODO: achar uma maneira de colocar o nome da empresa no Vcard
when "sítio na Internet"
# TODO: achar uma maneira de colocar o endereço de Internat da empresa no Vcard
when /^telefone( celular| do trabalho)?/
maker.add_tel(property.text) do |tel|
if $1 == " celular"
tel.location = 'mobile'
elsif $1 == " do trabalho"
tel.location = 'work'
else
tel.location = 'home'
end
end
end
end
end
puts card
end
Agenda telefônica em Ruby que grava os dados em um txt
Algoritmo de Fatoração de Fermat (FFA) em Ruby
Exportar endereços do Evolution para vCard
Uso simples de if e else em Ruby
Controle de maior e menor de idade em Ruby
Migração de Arch Linux para repositórios CachyOS (Uso de Instruções v3 e v4)
Boas Práticas e Padrões Idiomáticos em Go e C
Vale a pena ter mais de uma interface grafica no seu Linux?
[Resolvido] Google Chrome reclamando de perfil em uso após mudar hostname
Instalando o Tema de Ícones Tela Circle
Copiar Para e Mover Para no menu de contexto do Nautilus e Dolphin
Dotando o Thunar das opcoes Copiar para e Mover para no menu de contexto
Instalação Dual Boot Linux+Windows 11 (4)
No Ubuntu 26.04, sudo passou a mostrar os asteriscos ao digitar por pa... (5)
Como instalar Warsaw no Gentoo? (0)
Como insiro e excluo um elemento XML e JSON ao código Javascript (1)









