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
tags_api() click to toggle source
# File lib/network_profile/extractors/stackoverflow_profile.rb, line 69
def tags_api
  @tags_api ||=
    begin
      url = "https://api.stackexchange.com/2.2/users/#{user_id}/top-tags?pagesize=10&site=#{site[1]}"
      api_call(url).dig('items')
    end
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