class PlayOverwatch::Scraper

This class represents a scraper that can be used to retrieve certain statistics.

Public Class Methods

new(battle_tag) click to toggle source

Creates a scraper with a specified battle tag. The battle_tag can be in the hex (#) or hyphenated (-) format. It IS case sensitive.

# File lib/playoverwatch-scraper/scraper.rb, line 14
def initialize(battle_tag)
  @player_page = Nokogiri::HTML(open("https://playoverwatch.com/en-us/career/pc/#{battle_tag.gsub(/#/, '-')}", "User-Agent" => CHROME_USER_AGENT))
  @player_data = JSON.parse open("https://playoverwatch.com/en-us/search/account-by-name/#{battle_tag.gsub(/#/, '-').gsub(/-/, '%23')}", "User-Agent" => CHROME_USER_AGENT).read
end

Public Instance Methods

endorsement_level() click to toggle source

Retrieve a player's endorsement level

# File lib/playoverwatch-scraper/scraper.rb, line 33
def endorsement_level
  @player_page.css('.EndorsementIcon-tooltip .u-center').first.content.to_i
end
main_comp() click to toggle source

Retrieve player's main Competitive hero, in lowercase form. You should check if the sr is -1 before attempting to call this.

# File lib/playoverwatch-scraper/scraper.rb, line 57
def main_comp
  hero_img = hidden_mains_style.content.scan(/\.competitive {.+?url\((.+?)\);/mis).flatten.first
  hero_img.scan(/\/hero\/(.+?)\/career/i).flatten.first
end
main_qp() click to toggle source

Retrieve player's main Quick Play hero, in lowercase form.

# File lib/playoverwatch-scraper/scraper.rb, line 49
def main_qp
  hero_img = hidden_mains_style.content.scan(/\.quickplay {.+?url\((.+?)\);/mis).flatten.first
  hero_img.scan(/\/hero\/(.+?)\/career/i).flatten.first
end
player_icon() click to toggle source

Retrieve the player's player icon. Returns an image URL.

# File lib/playoverwatch-scraper/scraper.rb, line 21
def player_icon
  @player_page.css('img.player-portrait').first["src"]
end
player_level() click to toggle source

Retrieve a player's level

# File lib/playoverwatch-scraper/scraper.rb, line 27
def player_level
  @player_data.first['level'].to_i
end
sr() click to toggle source

Retrieve a player's current competitive season ranking. Returns -1 if player did not complete placements.

# File lib/playoverwatch-scraper/scraper.rb, line 40
def sr
  comp_div = @player_page.css('.competitive-rank > .h5')
  return -1 if comp_div.empty?
  content = comp_div.first.content
  content.to_i if Integer(content) rescue -1
end

Private Instance Methods

hidden_mains_style() click to toggle source
# File lib/playoverwatch-scraper/scraper.rb, line 67
def hidden_mains_style
  @player_page.css('style').first
end
rank_map() click to toggle source
# File lib/playoverwatch-scraper/scraper.rb, line 63
def rank_map
  JSON.parse File.read(File.expand_path('./ranks.json', __dir__))
end