Skip to content

Commit

Permalink
Imaginary friend list is now obtainable via the official friend list …
Browse files Browse the repository at this point in the history
…API.
  • Loading branch information
knu committed May 2, 2009
1 parent 5d6a1a9 commit a5401ab
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 49 deletions.
29 changes: 26 additions & 3 deletions lib/friendfeed.rb
Expand Up @@ -126,9 +126,32 @@ def get_profiles(nicknames)
# subscribing to.
def get_real_friends(nickname = @nickname)
nickname or require_api_login
get_profiles(get_profile(@nickname)['subscriptions'].map { |subscription|
subscription['nickname']
})
nicknames = []
get_profile(@nickname)['subscriptions'].each { |subscription|
if nickname = subscription['nickname']
nicknames << nickname
end
}
get_profiles(nicknames)
end

# Gets an array of profile information of the authenticated user's
# imaginary friends.
def get_imaginary_friends
nickname or require_api_login
profiles = []
get_profile(@nickname)['subscriptions'].each { |subscription|
if subscription['nickname'].nil?
profiles << get_profile(subscription['id'])
end
}
profiles
end

# Gets profile information of one of the authenticated user's
# imaginary friends.
def get_imaginary_friend(id)
get_profile(id)
end

# Gets an array of the most recent public entries.
Expand Down
46 changes: 0 additions & 46 deletions lib/friendfeed/unofficial.rb
Expand Up @@ -59,52 +59,6 @@ def login(nickname, password)
api_login(nickname, remote_key)
end

# Gets an array of profile information of the authenticated user's
# imaginary friends, in a format similar to
# get_real_friends(). [unofficial]
def get_imaginary_friends
agent = get_login_agent()

page = agent.get(IMAGINARY_URI)
page.parser.xpath("//div[@class='name']//a[@class='l_person']").map { |person_a|
get_imaginary_friend(person_a['uid'])
}
end

# Gets profile information of one of the authenticated user's
# imaginary friends, in a format similar to
# get_profile(). [unofficial]
def get_imaginary_friend(id)
agent = get_login_agent()

profile_uri = IMAGINARY_URI + ("/users/%s" % URI.encode(id))
profile_page = agent.get(profile_uri)
parser = profile_page.parser
{
'id' => id,
'nickname' => parser.xpath("//h1/a/text()").to_s,
'profileUrl' => profile_uri.to_s,
'services' => parser.xpath("//div[@class='servicefilter']//a[@class='l_filterservice']").map { |service_a|
servicename = service_a['servicename']
serviceid = if servicename == "internal"
nil
else
service_a['serviceid'] ||
begin
service_uri = profile_uri + ("?service=%s" % URI.encode(servicename))
page = agent.get(service_uri)
page.parser.xpath("//a[@class='l_refreshfeed']/@serviceid").to_s
end
end
{
'serviceid' => serviceid,
'name' => servicename,
'profileUrl' => (profile_uri + service_a['href']).to_s
}
},
}
end

# Posts a request to an internal API of FriendFeed and returns
# either a parser object for an HTML response or an object parsed
# from a JSON response). [unofficial]
Expand Down

0 comments on commit a5401ab

Please sign in to comment.