Importando seus contatos do Google para o Email Marketing Locaweb

É muito fácil escrever um programa em Ruby para importar todos os seus contatos do Google na sua conta de e-mail Marketing da Locaweb. Com um simples script de 25 linhas isso é possível. Veja:

EMAIL_MKT_CHAVE = "[SUA_CHAVE]"
GOOGLE_EMAIL = "[SEU EMAIL NO GOOGLE]"
GOOGLE_PASSWD = "[SENHA GOOGLE]"
EMAIL_MKT_HOST = "[MAQUINA EMAIL MKT]"
EMAIL_MKT_LISTS = "11115"
EMAIL_MKT_LOGIN = "[LOGIN EMAIL MKT]"
EMAIL_MKT_URL = "http://#{EMAIL_MKT_HOST}.locaweb.com.br/admin/api/#{EMAIL_MKT_LOGIN}/contatos/importacao/?chave=#{EMAIL_MKT_CHAVE}&listas=#{EMAIL_MKT_LISTS}"
 
login = {:accountType => "HOSTED_OR_GOOGLE",
	              :Email => GOOGLE_EMAIL,
	              :Passwd => GOOGLE_PASSWD,
	              :service => "cp",
	              :source => "danicuki-teste-1"
	             }
a = RestClient.post("https://www.google.com/accounts/ClientLogin", login)
auth = {"Authorization" => "GoogleLogin auth=#{a.split.last.split("=")[1]}"}
c = RestClient.get("https://www.google.com/m8/feeds/contacts/default/full?max-results=2000", auth)
contacts = Hash.from_xml(c)["feed"]["entry"]
emails = contacts.select {|c| !c["title"].blank?}.select {|c| !c["email"].blank?}
email_mkt_hash = emails.map do |c|
	{:nome => c["title"].split[0].camelize, :email => (c["email"][0] ? c["email"][0]["address"] : c["email"]["address"])}
end
RestClient.post(EMAIL_MKT_URL, email_mkt_hash.to_json)

Agora a descrição dos passos do código:

  1. Primeiro você define todos os parâmetros para a sua busca. Os dados sobre a sua conta de e-mail Marketing podem ser obtidos na documentação da API da Locaweb.
  2. Depois faz um post para obter a credencial do google, que será usada logo mais para buscar os contatos. A credencial é retornada em formato texto, uma string bem feiona tipo essa: SID=DQAAAJcAAAAGD-h4PWkAfqRPrDJcIVmiPg1qq1pDPCbY-1DykHzaSmxrpIqIYjUNdqYUjDgLJRmKZstgafFhHa0CIajl-SIlAKPLr2Ll-wuQhC5z-DFQ66mybDfiPlig5osdQ-Uf6JlFdfHGnKiQk4xfqHvg3xm0SFqwg2SQDIBXI-iidkkIjnS7F4Z8FYVP_bGj_26JYr7S6FTA3jNxiUS7QewUsk7d
    LSID=DQAAAJkAAAAPZxYEjHLtrIT6pO-E7hVvM_1khNV7FWfdsr1BMjqwHmfuuabdMSPwv9gHBvd8eHiO8lrMv2ugwGFB7eKxe5WiNQ_uBy3u9aOy8jrqCT_Gx_LRSEE2gyvX8aiGtdpLCiGxTjhCRz5S-wz2g4Qo6uwt-Rdh3xgocPEvSQeiF1Eqr5N5c8_eN0Kn-Gr6WBIsFm6mlyZqUKLSuROK1rL7WpMu
    Auth=DQAAAJkAAAAPZxYEjHLtrIT6pO-E7hVvM_1khNV7FWfdsr1BMjqwHmfuuabdMSPwv9gHBvd8eHh4LIFHdmGkr75M6OHTAjZf3T4n2Q8GwqyAu5G73NA9dnkDbC3q-AsdnZOV7eP6uSF_jhvZYrGmOzAARthZ9BCcmaz2y2eWCUdYzUE0vdNDgYlhAh2ybT21M4KHXFP5T6JfXN8wZVrVEiWhcaqP2MfI

    Para a chamada a API, a única coisa que interessa nessa string é o valor de Auth, que extraímos com o código

    a.split.last.split("=")[1]
  3. A API do Google Contacts é bem simples, porém o XML que ela retorna é um trambolho. Nesse momento estamos interessados em apenas montar um hash com o primeiro nome da pessoa e o e-mail. Fazemos isso nessas linhas:
    #contacts conterá um array de contatos
    contacts = Hash.from_xml(c)["feed"]["entry"]
    #filtra apenas contatos que tenha nome e email definidos
    emails = contacts.select {|c| !c["title"].blank?}.select {|c| !c["email"].blank?}
    #monta o hash - o nome é apenas a primeira parte do titulo 'camelized'
    # o email tenta o campo 0, se tiver coloca, senão é o próprio address (chatices...)
    email_mkt_hash = emails.map do |c|
    	{:nome => c["title"].split[0].camelize, :email => (c["email"][0] ? c["email"][0]["address"] : c["email"]["address"])}
    end
  4. Por último transformamos o hash em JSON e enviamos para o Web Service do Email Marketing.

Leave a Reply

Your email address will not be published. Required fields are marked *