class NetworkProfile::StackoverflowProfile
Tags: api.stackexchange.com/2.2/users/220292/top-tags?pagesize=10&site=stackoverflow
Constants
- SITES
Public Class Methods
handle?(link)
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 25 def self.handle?(link) SITES.any? { |s, _, _| link.include?(s + "/users/") } end
Public Instance Methods
extra_data()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 44 def extra_data { reputation: user_api.dig('reputation'), created: Time.at(user_api['creation_date']).to_date, location: user_api.dig('location'), site: site[2], site_logo: "https://cdn.sstatic.net/Sites/#{site[1]}/img/apple-touch-icon.png", tags: tags_api.map { |j| [j['tag_name'], j['answer_score'] + j['question_score']] } } end
image()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 37 def image user_api['profile_image'] end
site()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 29 def site @site ||= SITES.find { |s, _, _| @link.include?(s) } end
text()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 41 def text end
title()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 33 def title user_api['display_name'] end
user_id()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 55 def user_id URI.parse(@link).path[%r{/users/(\d+)/?}, 1] end
Private Instance Methods
api_call(url)
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 77 def api_call(url) JSON.parse(Typhoeus.get(url, accept_encoding: 'gzip').body) end
user_api()
click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 61 def user_api @user_api ||= begin url = "https://api.stackexchange.com/2.2/users/#{user_id}?order=desc&sort=reputation&site=#{site[1]}" api_call(url).dig('items', 0) end end