class Contacts::AolImporter
Constants
- AOL_NUM
- CONTACT_LIST_CSV_URL
- CONTACT_LIST_URL
- LOGIN_REFERER_PATH
- LOGIN_REFERER_URL
- LOGIN_URL
- PROTOCOL_ERROR
- URL
Public Instance Methods
contacts()
click to toggle source
# File lib/contacts/aol_importer.rb, line 16 def contacts postdata = { "file" => 'contacts', "fileType" => 'csv' } return @contacts if @contacts if connected? data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] until forward.nil? data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] end if resp.code_type != Net::HTTPOK raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR) end # parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden"> doc = Hpricot(data) (doc/:input).each do |input| postdata["user"] = input.attributes["value"] if input.attributes["name"] == "user" end data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL] until forward.nil? data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] end if data.include?("error.gif") raise AuthenticationError, "Account invalid" end parse data end end
h_to_query_string(hash)
click to toggle source
# File lib/contacts/aol_importer.rb, line 143 def h_to_query_string(hash) u = ERB::Util.method(:u) hash.map{ |k, v| u.call(k) + "=" + u.call(v) }.join("&") end
parse(data, options={})
click to toggle source
# File lib/contacts/aol_importer.rb, line 135 def parse(data, options={}) data = CSV.parse(data) col_names = data.shift @contacts = data.map do |person| ["#{person[0]} #{person[1]}", person[4]] if person[4] && !person[4].empty? end.compact end
real_connect()
click to toggle source
# File lib/contacts/aol_importer.rb, line 55 def real_connect postdata = { "loginId" => login, "password" => password, "rememberMe" => "on", "_sns_fg_color_" => "", "_sns_err_color_" => "", "_sns_link_color_" => "", "_sns_width_" => "", "_sns_height_" => "", "offerId" => "mail-second-en-us", "_sns_bg_color_" => "", "sitedomain" => "sns.webmail.aol.com", "regPromoCode" => "", "mcState" => "initialized", "uitype" => "std", "siteId" => "", "lang" => "en", "locale" => "us", "authLev" => "0", "siteState" => "", "isSiteStateEncoded" => "false", "use_aam" => "0", "seamless" => "novl", "aolsubmit" => CGI.escape("Sign In"), "idType" => "SN", "usrd" => "", "doSSL" => "", "redirType" => "", "xchk" => "false" } # Get this cookie and stick it in the form to confirm to Aol that your cookies work data, resp, cookies, forward = get(URL) postdata["stips"] = cookie_hash_from_string(cookies)["stips"] postdata["tst"] = cookie_hash_from_string(cookies)["tst"] data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL] until forward.nil? data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] end data, resp, cookies, forward, old_url = get("#{LOGIN_URL}?#{LOGIN_REFERER_PATH}", cookies) + [LOGIN_REFERER_URL] until forward.nil? data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] end doc = Hpricot(data) (doc/:input).each do |input| postdata["usrd"] = input.attributes["value"] if input.attributes["name"] == "usrd" end # parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"] postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"] postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"] # raise data.inspect data, resp, cookies, forward, old_url = post(LOGIN_URL, h_to_query_string(postdata), cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL] until forward.nil? data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward] end if data.index("Invalid Password, Username or Email") raise AuthenticationError, "Username and password do not match" elsif data.index("Required field must not be blank") raise AuthenticationError, "Login and password must not be blank" elsif data.index("errormsg_0_logincaptcha") raise AuthenticationError, "Captcha error" elsif data.index("Invalid request") raise ConnectionError, PROTOCOL_ERROR elsif cookies == "" raise ConnectionError, PROTOCOL_ERROR end @cookies = cookies end