class SocialCount::FacebookUser
Constants
- DOMAIN
Private Class Methods
access_token()
click to toggle source
# File lib/social_count/facebook_user.rb, line 43 def access_token return @access_token unless @access_token.nil? response = get_http_response(access_url) unless response.is_a?(Net::HTTPOK) response = JSON.parse(response.body) raise SocialCount::FacebookApiError.new("Facebook API returned the following error: #{response["error"]["message"]}", response["error"]["code"]) end @access_token = response.body.split("access_token=")[1] end
access_url()
click to toggle source
# File lib/social_count/facebook_user.rb, line 53 def access_url @access_url ||= "#{DOMAIN}/oauth/access_token?client_id=#{credentials.fb_app_id}&client_secret=#{credentials.fb_app_secret}&grant_type=client_credentials" end
Public Instance Methods
follower_count()
click to toggle source
# File lib/social_count/facebook_user.rb, line 22 def follower_count count = run_query(:subscriber) count.to_i.zero? ? nil : count end
friend_count()
click to toggle source
# File lib/social_count/facebook_user.rb, line 19 def friend_count run_query(:friend) end
id()
click to toggle source
# File lib/social_count/facebook_user.rb, line 15 def id return unless valid? @id ||= user.identifier.to_i end
user()
click to toggle source
# File lib/social_count/facebook_user.rb, line 11 def user return unless valid? @user ||= FbGraph::User.fetch(name, :access_token => URI.escape(self.class.access_token)) end
valid?()
click to toggle source
# File lib/social_count/facebook_user.rb, line 7 def valid? return @valid unless @valid.nil? @valid = self.class.get_http_response("#{DOMAIN}/#{name}").is_a?(Net::HTTPOK) end
Private Instance Methods
query(column)
click to toggle source
# File lib/social_count/facebook_user.rb, line 38 def query(column) "SELECT #{column}_count FROM user WHERE uid=#{id}" end
run_query(column)
click to toggle source
# File lib/social_count/facebook_user.rb, line 27 def run_query(column) return unless valid? url = "#{DOMAIN}/fql?q=#{query(column)}" response = self.class.get_http_response(url) response = JSON.parse(response.body) data = response['data'] raise SocialCount::FacebookApiError.new("The social_count gem could not parse the response from the Facebook Graph API: #{response}", 0) unless data.is_a?(Array) return nil if data.empty? raise SocialCount::FacebookApiError.new("The social_count gem could not parse the response from the Facebook Graph API: #{response}", 0) unless data[0].is_a?(Hash) data[0]["#{column}_count"] end