diff --git a/lib/twitter/client/list.rb b/lib/twitter/client/list.rb index 986241873..17da22daf 100644 --- a/lib/twitter/client/list.rb +++ b/lib/twitter/client/list.rb @@ -2,11 +2,13 @@ module Twitter class Client module List def list_create(screen_name, name, options={}) + clean_screen_name!(screen_name) response = post("#{screen_name}/lists", options.merge(:name => name)) format.to_s.downcase == 'xml' ? response['list'] : response end def list_update(screen_name, name, options={}) + clean_screen_name!(screen_name) response = put("#{screen_name}/lists/#{name}", options) format.to_s.downcase == 'xml' ? response['list'] : response end @@ -15,6 +17,7 @@ def lists(*args) options = args.last.is_a?(Hash) ? args.pop : {} screen_name = args.first if screen_name + clean_screen_name!(screen_name) response = get("#{screen_name}/lists", options) else response = get('lists', options) @@ -23,26 +26,31 @@ def lists(*args) end def list(screen_name, name, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/lists/#{name}", options) format.to_s.downcase == 'xml' ? response['list'] : response end def list_delete(screen_name, name, options={}) + clean_screen_name!(screen_name) response = delete("#{screen_name}/lists/#{name}", options) format.to_s.downcase == 'xml' ? response['list'] : response end def list_timeline(screen_name, name, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/lists/#{name}/statuses", options) format.to_s.downcase == 'xml' ? response['statuses'] : response end def memberships(screen_name, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/lists/memberships", options) format.to_s.downcase == 'xml' ? response['lists_list'] : response end def subscriptions(screen_name, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/lists/subscriptions", options) format.to_s.downcase == 'xml' ? response['lists_list'] : response end diff --git a/lib/twitter/client/list_members.rb b/lib/twitter/client/list_members.rb index 82cf2d652..776e2c067 100644 --- a/lib/twitter/client/list_members.rb +++ b/lib/twitter/client/list_members.rb @@ -2,27 +2,32 @@ module Twitter class Client module ListMembers def list_members(screen_name, slug, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/#{slug}/members", options) format.to_s.downcase == 'xml' ? response['users_list'] : response end def list_add_member(screen_name, slug, user_id, options={}) + clean_screen_name!(screen_name) response = post("#{screen_name}/#{slug}/members", options.merge(:id => user_id)) format.to_s.downcase == 'xml' ? response['list'] : response end def list_add_members(screen_name, slug, users, options={}) + clean_screen_name!(screen_name) merge_users_into_options!(Array(users), options) response = post("#{screen_name}/#{slug}/create_all", options) format.to_s.downcase == 'xml' ? response['list'] : response end def list_remove_member(screen_name, slug, user_id, options={}) + clean_screen_name!(screen_name) response = delete("#{screen_name}/#{slug}/members", options.merge(:id => user_id)) format.to_s.downcase == 'xml' ? response['list'] : response end def is_list_member?(screen_name, slug, user_id, options={}) + clean_screen_name!(screen_name) begin get("#{screen_name}/#{slug}/members/#{user_id}", options) true diff --git a/lib/twitter/client/list_subscribers.rb b/lib/twitter/client/list_subscribers.rb index a134ac9a9..46f513b22 100644 --- a/lib/twitter/client/list_subscribers.rb +++ b/lib/twitter/client/list_subscribers.rb @@ -2,21 +2,25 @@ module Twitter class Client module ListSubscribers def list_subscribers(screen_name, slug, options={}) + clean_screen_name!(screen_name) response = get("#{screen_name}/#{slug}/subscribers", options) format.to_s.downcase == 'xml' ? response['users_list'] : response end def list_subscribe(screen_name, slug, options={}) + clean_screen_name!(screen_name) response = post("#{screen_name}/#{slug}/subscribers", options) format.to_s.downcase == 'xml' ? response['list'] : response end def list_unsubscribe(screen_name, slug, options={}) + clean_screen_name!(screen_name) response = delete("#{screen_name}/#{slug}/subscribers", options) format.to_s.downcase == 'xml' ? response['list'] : response end def is_subscriber?(screen_name, slug, user_id, options={}) + clean_screen_name!(screen_name) begin get("#{screen_name}/#{slug}/subscribers/#{user_id}", options) true diff --git a/lib/twitter/client/user.rb b/lib/twitter/client/user.rb index 82ce7d399..24dbbc014 100644 --- a/lib/twitter/client/user.rb +++ b/lib/twitter/client/user.rb @@ -23,7 +23,7 @@ def user(user, options={}) # Returns extended information of a given user # # @format :json, :xml - # @authenticated false + # @authenticated true # @rate_limited true # @param user [String, Integer] A Twitter user ID or screen name. # @param options [Hash] A customizable set of options. @@ -42,20 +42,60 @@ def users(*args) format.to_s.downcase == 'xml' ? response['users'] : response end + # Returns users that match the given query + # + # @format :json, :xml + # @authenticated true + # @rate_limited true + # @param query [String] The search query to run against people search. + # @param options [Hash] A customizable set of options. + # @option options [Integer] :per_page The number of people to retrieve. Maxiumum of 20 allowed per page. + # @option options [Integer] :page Specifies the page of results to retrieve. + # @option options [String] :include_entities Include {http://dev.twitter.com/pages/tweet_entities Tweet Entities} when set to true, 't' or 1. + # @return [Array] + # @see http://dev.twitter.com/doc/get/users/search + # @example Return users that match "Erik Michaels-Ober" + # Twitter.user_search("Erik Michaels-Ober") def user_search(query, options={}) response = get('users/search', options.merge(:q => query)) format.to_s.downcase == 'xml' ? response['users'] : response end + # Returns the list of suggested user categories or users in a given category + # + # @format :json, :xml + # @authenticated false + # @rate_limited true + # @param slug [String] The short name of list or a category. + # @param options [Hash] A customizable set of options. + # @return [Array] + # @see http://dev.twitter.com/doc/get/users/suggestions + # @see http://dev.twitter.com/doc/get/users/suggestions/:slug + # @example + # Twitter.suggestions # Return the list of suggested user categories + # Twitter.suggestions("art-design") # Return the users in the Art & Design category def suggestions(*args) options = args.last.is_a?(Hash) ? args.pop : {} - category = args.first - response = get(['users/suggestions', category].compact.join('/'), options) - xml_key = category ? 'category' : 'suggestions' + slug = args.first + response = get(['users/suggestions', slug].compact.join('/'), options) + xml_key = slug ? 'category' : 'suggestions' format.to_s.downcase == 'xml' ? response[xml_key] : response end + # Access the profile image in various sizes for the user with the indicated screen name + # + # @format :json, :xml + # @authenticated false + # @rate_limited false + # @param screen_name [String] The screen name of the user for whom to return results for. + # @param options [Hash] A customizable set of options. + # @option options [String] :size ('normal') Specifies the size of image to fetch. Valid options include: 'bigger' (73px by 73px), 'normal' (48px by 48px), and 'mini' (24px by 24px). + # @return [String] The URL for the requested user's profile image. + # @see http://dev.twitter.com/doc/get/users/profile_image/:screen_name + # @example Return the URL for the 24px by 24px version of @sferik's profile image + # Twitter.profile_image("sferik", :size => 'mini') def profile_image(screen_name, options={}) + clean_screen_name!(screen_name) get("users/profile_image/#{screen_name}", options, true).headers['location'] end diff --git a/lib/twitter/client/utils.rb b/lib/twitter/client/utils.rb index 371fd940a..cf8001c8f 100644 --- a/lib/twitter/client/utils.rb +++ b/lib/twitter/client/utils.rb @@ -4,12 +4,17 @@ class Client module Utils private + def clean_screen_name!(screen_name) + screen_name.gsub!(/[@@]/, '') if screen_name + end + def merge_user_into_options!(user_id_or_screen_name, options={}) case user_id_or_screen_name - when Fixnum - options[:user_id] = user_id_or_screen_name - when String - options[:screen_name] = user_id_or_screen_name.gsub('@', '') + when Fixnum + options[:user_id] = user_id_or_screen_name + when String + clean_screen_name!(user_id_or_screen_name) + options[:screen_name] = user_id_or_screen_name end options end @@ -18,10 +23,11 @@ def merge_users_into_options!(user_ids_or_screen_names, options={}) user_ids, screen_names = [], [] user_ids_or_screen_names.flatten.each do |user_id_or_screen_name| case user_id_or_screen_name - when Fixnum - user_ids << user_id_or_screen_name - when String - screen_names << user_id_or_screen_name.gsub('@', '') + when Fixnum + user_ids << user_id_or_screen_name + when String + clean_screen_name!(user_id_or_screen_name) + screen_names << user_id_or_screen_name end end options[:user_id] = user_ids.join(',') unless user_ids.empty?