Sha256: b7cedf9a0860131a8ac29a6db6c75b9ba8743e2216058324e1be8fd03ae888f1

Contents?: true

Size: 1.77 KB

Versions: 3

Compression:

Stored size: 1.77 KB

Contents

require 'blackbook/importer/page_scraper'

##
# Imports contacts from GMail

class Blackbook::Importer::Gmail < Blackbook::Importer::PageScraper

  ##
  # Matches this importer to an user's name/address

  def =~(options = {})
    options && options[:username] =~ /@gmail.com$/i ? true : false
  end
  
  ##
  # login to gmail

  def login
    page = agent.get('http://mail.google.com/mail/')
    form = page.forms.first
    form.Email = options[:username]
    form.Passwd = options[:password]
    page = agent.submit(form,form.buttons.first)
    
    raise( Blackbook::BadCredentialsError, "That username and password was not accepted. Please check them and try again." ) if page.body =~ /Username and password do not match/
    
    if page.search('//meta').first.attributes['content'] =~ /url='?(http.+?)'?$/i
      page = agent.get $1
    end
  end
  
  ##
  # prepare this importer

  def prepare
    login
  end
  
  ##
  # scrape gmail contacts for this importer

  def scrape_contacts
    unless agent.cookies.find{|c| c.name == 'GAUSR' && 
                           c.value == "mail:#{options[:username]}"}
      raise( Blackbook::BadCredentialsError, "Must be authenticated to access contacts." )
    end
    
    page = agent.get('http://mail.google.com/mail/h/?v=cl&pnl=a')
    contact_rows = page.search("input[@name='c']/../..")
    contact_rows.collect do |row|
      columns = row/"td"
      email = columns[2].inner_html.gsub( /(\n|&nbsp;)/, '' ) # email
      clean_email = email[/[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\.)+[a-zA-Z]{2,4}/] 
      
      unless clean_email.empty?
        columns = row/"td"
        { 
          :name  => ( columns[1] / "b" ).inner_html, # name
          :email => clean_email
        } 
      end
    end.compact
  end
  
  Blackbook.register(:gmail, self)
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
alexjp-blackbook_csv-1.0.5 lib/blackbook/importer/gmail.rb
alexjp-blackbook_csv-3.0.1 lib/blackbook/importer/gmail.rb
alexjp-blackbook_csv-3.0.2 lib/blackbook/importer/gmail.rb