Sha256: ab2debe159ca1a4d808f31b34ecf083c69d3b076bde1bb122a04d636e3a622e9

Contents?: true

Size: 1.76 KB

Versions: 14

Compression:

Stored size: 1.76 KB

Contents

require 'blackbook/importer/page_scraper'

class Blackbook::Importer::GMX < Blackbook::Importer::PageScraper
  LOGIN_URL = "https://www.gmx.net/"

  def =~( options )
    options && options[:username] =~ /@gmx\.(de|net)$/i
  end

  def login
    username, password = options[:username], options[:password]

    begin
      page = agent.get LOGIN_URL

      form = page.forms.with.name("login").first
      form.id = username
      form.p = password
      page = form.submit
      @next = page

      if (page.at("div.index") && page.at("div.index").inner_html == "Passwort vergessen?") ||
        page.uri.to_s.match(/login-failed/)
        raise Blackbook::BadCredentialsError.new
      end
    rescue => e
      raise e || Blackbook::BlackbookError.new
    end
  end

  def prepare
    login
  end

  def scrape_contacts
    page = @next

    # Go to E-Mails
    page = page.links.select { |link| link.text =~ /E-Mail/ }.first.click

    contacts = [/Posteingang/, /Archiv/, /Gesendet/].map do |folder|
      # puts "folder: #{folder}"
      # puts "page title: #{page.title}"
      # puts "page links: #{page.links.select { |link| link.text =~ folder }}"
      page = page.links.select { |link| link.text =~ folder }.first.click
      find_contacts(page)
    end

    contacts.inject([]) do |memo, contact|
      memo << contact unless memo.include? contact
      memo
    end.flatten
  end

  protected

    def find_contacts(page)
      links = page.search("form#MI a").select { |link| link.attributes["title"] =~ /@/ }
      links.map do |link|
        recp = link.attributes["title"].gsub(/\n/, "").split(/\s/)
        email = recp.pop.gsub(/[<>]/, "")
        fullname = recp.join(" ")

        { :name => fullname, :email => email }
      end
    end
    Blackbook.register :gmx, self
end

Version data entries

14 entries across 14 versions & 3 rubygems

Version Path
bcardarella-blackbook-1.0.10 lib/blackbook/importer/gmx.rb
bcardarella-blackbook-1.0.11 lib/blackbook/importer/gmx.rb
bcardarella-blackbook-1.0.7 lib/blackbook/importer/gmx.rb
bcardarella-blackbook-1.0.8 lib/blackbook/importer/gmx.rb
bcardarella-blackbook-1.0.9 lib/blackbook/importer/gmx.rb
briancollins-blackbook-1.0.15 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.12 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.13 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.14 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.15 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.16 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.17 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.18 lib/blackbook/importer/gmx.rb
rakutenusa-blackbook-1.0.19 lib/blackbook/importer/gmx.rb