Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Branch: patch-3
Fetching contributors…

Cannot retrieve contributors at this time

68 lines (59 sloc) 2.514 kB
require "omnicontacts/middleware/oauth1"
require "json"
module OmniContacts
module Importer
class Yahoo < Middleware::OAuth1
attr_reader :auth_host, :auth_token_path, :auth_path, :access_token_path
def initialize *args
super *args
@auth_host = "api.login.yahoo.com"
@auth_token_path = "/oauth/v2/get_request_token"
@auth_path = "/oauth/v2/request_auth"
@access_token_path = "/oauth/v2/get_token"
@contacts_host = "social.yahooapis.com"
@max_results = (args[3] && args[3][:max_results]) || 100 # use 'max' for all
end
def fetch_contacts_from_token_and_verifier auth_token, auth_token_secret, auth_verifier
(access_token, access_token_secret, guid) = fetch_access_token(auth_token, auth_token_secret, auth_verifier, ["xoauth_yahoo_guid"])
contacts_path = "/v1/user/#{guid}/contacts"
contacts_response = http_get(@contacts_host, contacts_path, contacts_req_params(access_token, access_token_secret, contacts_path))
contacts_from_response contacts_response
end
private
def contacts_req_params access_token, access_token_secret, contacts_path
params = {
:format => "json",
:oauth_consumer_key => consumer_key,
:oauth_nonce => encode(random_string),
:oauth_signature_method => "HMAC-SHA1",
:oauth_timestamp => timestamp,
:oauth_token => access_token,
:oauth_version => OmniContacts::Authorization::OAuth1::OAUTH_VERSION,
:view => "compact",
:count => @max_results.to_s
}
contacts_url = "http://#{@contacts_host}#{contacts_path}"
params["oauth_signature"] = oauth_signature("GET", contacts_url, params, access_token_secret)
params
end
def contacts_from_response contacts_as_json
json = JSON.parse(contacts_as_json)
result = []
return result unless json["contacts"]["contact"]
json["contacts"]["contact"].each do |entry|
contact = {}
entry["fields"].each do |field|
contact[:email] = field["value"] if field["type"] == "email"
if field["type"] == "name"
name = field["value"]["givenName"]
surname = field["value"]["familyName"]
contact[:name] = "#{name} #{surname}" if name && surname
end
end
result << contact if contact[:email]
end
result
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.