bnet_scraper 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,12 @@
1
1
  # Changelog!
2
2
 
3
+ ## 0.6.0 (May 09 2013)
4
+
5
+ * Adds GrandmasterScraper to pull all grandmasters by region
6
+ * Updates Portrait names for anniversary
7
+ * Improves portait code
8
+ * Documentation updates
9
+
3
10
  ## 0.5.0 (Mar 29 2013)
4
11
 
5
12
  * Adds Heart of the Swarm Portrait Names
data/README.md CHANGED
@@ -168,6 +168,17 @@ BnetScraper::Starcraft2::Status.fetch # => [
168
168
  ]
169
169
  ```
170
170
 
171
+ ## BnetScraper::Starcraft2::GrandmasterScraper
172
+
173
+ This pulls the list of 200 Grandmasters for a given region. Each player is returned as a hash.
174
+
175
+ ``` ruby
176
+ scraper = BnetScraper::Starcraft2::GrandmasterScraper.new(region: :na)
177
+ players = scraper.scraper
178
+ players.size # => 200
179
+ players[0].keys # => [:rank, :name, :race, :points, :wins, :losses]
180
+ ```
181
+
171
182
  # Contribute!
172
183
 
173
184
  I would love to see contributions! Please send a pull request with a feature branch containing specs
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "bnet_scraper"
6
- s.version = "0.5.0"
6
+ s.version = "0.6.0"
7
7
  s.authors = ["Andrew Nordman"]
8
8
  s.email = ["cadwallion@gmail.com"]
9
9
  s.homepage = "https://github.com/agoragames/bnet_scraper/"
@@ -4,6 +4,7 @@ require 'bnet_scraper/starcraft2/league_scraper'
4
4
  require 'bnet_scraper/starcraft2/achievement_scraper'
5
5
  require 'bnet_scraper/starcraft2/match_history_scraper'
6
6
  require 'bnet_scraper/starcraft2/status_scraper'
7
+ require 'bnet_scraper/starcraft2/grandmaster_scraper'
7
8
 
8
9
  module BnetScraper
9
10
  # This module contains everything about scraping Starcraft 2 Battle.net accounts.
@@ -27,60 +28,7 @@ module BnetScraper
27
28
  'tw.battle.net' => 'fea'
28
29
  }
29
30
 
30
- # The armory uses spritemaps that are sequentially named and have a fixed
31
- # 6x6 grid. We'll simply use the portrait names, left to right, top to
32
- # bottom.
33
- #
34
- # Note: I couldn't identify the exact names of some of these and instead of
35
- # guessing, I didn't name them. Some appear in multiple files too, which
36
- # is odd.
37
- #
38
- # I decided th pad the arrays even if there are no images to make various
39
- # helping functionality (e.g. retrieving position for a name) easier.
40
- # I've also kept them in 6x6 here for better overview.
41
-
42
- PORTRAITS = [
43
- [
44
- 'Kachinsky', 'Cade', 'Thatcher', 'Hall', 'Tiger Marine', 'Panda Marine',
45
- 'General Warfield', 'Jim Raynor', 'Arcturus Mengsk', 'Sarah Kerrigan', 'Kate Lockwell', 'Rory Swann',
46
- 'Egon Stetmann', 'Hill', 'Adjutant', 'Dr. Ariel Hanson', 'Gabriel Tosh', 'Matt Horner',
47
- 'Tychus Findlay', 'Zeratul', 'Valerian Mengsk', 'Spectre', 'Raynor Marine', 'Tauren Marine',
48
- 'Night Elf Banshee', 'Diablo Marine', 'SCV', 'Firebat', 'Vulture', 'Hellion',
49
- 'Medic', 'Spartan Company', 'Wraith', 'Diamondback', 'Probe', 'Scout'
50
- ],
51
- [
52
- 'Tauren Marine', 'Night Elf Banshee', 'Diablo Marine', 'Worgen Marine', 'Goblin Marine', 'PanTerran Marine',
53
- 'Wizard Templar', 'Tyrael Marine', 'Witch Doctor Zergling', 'Stank', 'Night Elf Templar', 'Infested Orc',
54
- '', 'Diablo Marine', '', 'Pandaren Firebat', 'Prince Valerian', 'Zagara',
55
- 'Lasarra', 'Dehaka', 'Infested Stukov', 'Mira Horner', 'Primal Queen', 'Izsha',
56
- 'Abathur', 'Ghost Kerrigan', 'Zurvan', 'Narud', '', '',
57
- '', '', '', '', '', ''
58
- ],
59
- [
60
- 'Ghost', 'Thor', 'Battlecruiser', 'Nova', 'Zealot', 'Stalker',
61
- 'Phoenix', 'Immortal', 'Void Ray', 'Colossus', 'Carrier', 'Tassadar',
62
- 'Reaper', 'Sentry', 'Overseer', 'Viking', 'High Templar', 'Mutalisk',
63
- 'Banshee', 'Hybrid Destroyer', 'Dark Voice', 'Urubu', 'Lyote', 'Automaton 2000',
64
- 'Orian', 'Wolf Marine', 'Murloc Marine', 'Worgen Marine', 'Goblin Marine', 'Zealot Chef',
65
- 'Stank', 'Ornatus', 'Facebook Corps Members', 'Lion Marines', 'Dragons', 'Raynor Marine'
66
- ],
67
- [
68
- 'Urun', 'Nyon', 'Executor', 'Mohandar', 'Selendis', 'Artanis',
69
- 'Drone', 'Infested Colonist', 'Infested Marine', 'Corruptor', 'Aberration', 'Broodlord',
70
- 'Overmind', 'Leviathan', 'Overlord', 'Hydralisk Marine', "Zer'atai Dark Templar", 'Goliath',
71
- 'Lenassa Dark Templar', 'Mira Han', 'Archon', 'Hybrid Reaver', 'Predator', 'Unknown',
72
- 'Zergling', 'Roach', 'Baneling', 'Hydralisk', 'Queen', 'Infestor',
73
- 'Ultralisk', 'Queen of Blades', 'Marine', 'Marauder', 'Medivac', 'Siege Tank'
74
- ],
75
- [
76
- 'Level 3 Zealot', 'Level 5 Stalker', 'Level 8 Sentinel', 'Level 11 Immortal', 'Level 14 Oracle', 'Level 17 High Templar',
77
- 'Level 21 Tempest', 'Level 23 Colossus', 'Level 27 Carrier', 'Level 29 Zeratul', 'Level 3 Marine', 'Level 5 Marauder',
78
- 'Level 8 Hellbat', 'Level 11 Widow Mine', 'Level 14 Medivac', 'Level 17 Banshee', 'Level 21 Ghost', 'Level 23 Thor',
79
- 'Level 27 Battlecruiser', 'Level 29 Raynor', 'Level 3 Zergling', 'Level 5 Roach', 'Level 8 Hydralisk', 'Level 11 Locust',
80
- 'Level 14 Swarm Host', 'Level 17 Infestor', 'Level 21 Viper', 'Level 23 Broodlord', 'Level 27 Ultralisk', 'Level 29 Kerrigan',
81
- 'Protoss Champion',' Terran Champion', 'Zerg Champion', '', '', ''
82
- ]
83
- ]
31
+
84
32
 
85
33
  # This is a convenience method that chains calls to ProfileScraper,
86
34
  # followed by a scrape of each league returned in the `leagues` array
@@ -0,0 +1,49 @@
1
+ module BnetScraper
2
+ module Starcraft2
3
+ class GrandmasterScraper < BaseScraper
4
+ attr_reader :players
5
+ REGIONS = [:us, :eu, :kr, :tw, :sea]
6
+
7
+ def initialize options = {}
8
+ @players = []
9
+ if REGIONS.include? options[:region]
10
+ @url = "https://#{options[:region]}.battle.net/sc2/en/ladder/grandmaster/heart-of-the-swarm"
11
+ else
12
+ raise "Invalid Region #{options[:region]}"
13
+ end
14
+ end
15
+
16
+ def scrape
17
+ html = retrieve_data
18
+
19
+ get_grandmasters html
20
+
21
+ @players
22
+ end
23
+
24
+ def retrieve_data
25
+ response = Faraday.get @url
26
+
27
+ if response.success?
28
+ Nokogiri::HTML(response.body)
29
+ end
30
+ end
31
+
32
+ def get_grandmasters html
33
+ html.css("#ladder tbody tr").each do |player_data|
34
+ player_cells = player_data.css("td[class='align-center']")
35
+ player = {
36
+ name: player_data.css("td a").inner_text.strip,
37
+ points: player_cells[2].inner_text,
38
+ wins: player_cells[3].inner_text,
39
+ losses: player_cells[4].inner_text,
40
+ race: player_data.css("td a").attr('class').value.sub('race-', ''),
41
+ rank: player_cells[1].inner_text.strip
42
+ }
43
+
44
+ @players << player
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,82 @@
1
+ module BnetScraper
2
+ module Starcraft2
3
+ # Portrait information pulled from the Armory. Portraits are 90-pixel jpgs that are either viewed as a single
4
+ # image or as part of a 6x6 spritesheet. There are several spritesheets with a few cells in the sheets not yet
5
+ # filled but will be in the future.
6
+ #
7
+ # The Profile page uses the spritesheet version of the Portrait with an X/Y background position. This is
8
+ # converted into sheet, column, and row, which allows us to know the name and map to the single image url as
9
+ # well.
10
+ class Portrait
11
+ # The armory uses spritemaps that are sequentially named and have a fixed
12
+ # 6x6 grid. We'll simply use the portrait names, left to right, top to
13
+ # bottom. The sheets are padded even when no portrait is present to account for the 36-image sheet
14
+ NAMES = [
15
+ # SPRITESHEET 1
16
+ 'Kachinsky', 'Cade', 'Thatcher', 'Hall', 'Tiger Marine', 'Panda Marine',
17
+ 'General Warfield', 'Jim Raynor', 'Arcturus Mengsk', 'Sarah Kerrigan', 'Kate Lockwell', 'Rory Swann',
18
+ 'Egon Stetmann', 'Hill', 'Adjutant', 'Dr. Ariel Hanson', 'Gabriel Tosh', 'Matt Horner',
19
+ 'Tychus Findlay', 'Zeratul', 'Valerian Mengsk', 'Spectre', 'Raynor Marine', 'Tauren Marine',
20
+ 'Night Elf Banshee', 'Diablo Marine', 'SCV', 'Firebat', 'Vulture', 'Hellion',
21
+ 'Medic', 'Spartan Company', 'Wraith', 'Diamondback', 'Probe', 'Scout',
22
+ # SPRITESHEET 2
23
+ 'Tauren Marine', 'Night Elf Banshee', 'Diablo Marine', 'Worgen Marine', 'Goblin Marine', 'PanTerran Marine',
24
+ 'Wizard Templar', 'Tyrael Marine', 'Witch Doctor Zergling', 'Stank', 'Night Elf Templar', 'Infested Orc',
25
+ '', 'Diablo Marine', '', 'Pandaren Firebat', 'Prince Valerian', 'Zagara',
26
+ 'Lasarra', 'Dehaka', 'Infested Stukov', 'Mira Horner', 'Primal Queen', 'Izsha',
27
+ 'Abathur', 'Ghost Kerrigan', 'Zurvan', 'Narud', '', '15 Year Terran',
28
+ '15 Year Protoss', '15 Year Zerg', '', '', '', '',
29
+ # SPRITESHEET 3
30
+ 'Ghost', 'Thor', 'Battlecruiser', 'Nova', 'Zealot', 'Stalker',
31
+ 'Phoenix', 'Immortal', 'Void Ray', 'Colossus', 'Carrier', 'Tassadar',
32
+ 'Reaper', 'Sentry', 'Overseer', 'Viking', 'High Templar', 'Mutalisk',
33
+ 'Banshee', 'Hybrid Destroyer', 'Dark Voice', 'Urubu', 'Lyote', 'Automaton 2000',
34
+ 'Orian', 'Wolf Marine', 'Murloc Marine', 'Worgen Marine', 'Goblin Marine', 'Zealot Chef',
35
+ 'Stank', 'Ornatus', 'Facebook Corps Members', 'Lion Marines', 'Dragons', 'Raynor Marine',
36
+ # SPRITESHEET 4
37
+ 'Urun', 'Nyon', 'Executor', 'Mohandar', 'Selendis', 'Artanis',
38
+ 'Drone', 'Infested Colonist', 'Infested Marine', 'Corruptor', 'Aberration', 'Broodlord',
39
+ 'Overmind', 'Leviathan', 'Overlord', 'Hydralisk Marine', "Zer'atai Dark Templar", 'Goliath',
40
+ 'Lenassa Dark Templar', 'Mira Han', 'Archon', 'Hybrid Reaver', 'Predator', 'Unknown',
41
+ 'Zergling', 'Roach', 'Baneling', 'Hydralisk', 'Queen', 'Infestor',
42
+ 'Ultralisk', 'Queen of Blades', 'Marine', 'Marauder', 'Medivac', 'Siege Tank',
43
+ # SPRITESHEET 5
44
+ 'Level 3 Zealot', 'Level 5 Stalker', 'Level 8 Sentinel', 'Level 11 Immortal', 'Level 14 Oracle', 'Level 17 High Templar',
45
+ 'Level 21 Tempest', 'Level 23 Colossus', 'Level 27 Carrier', 'Level 29 Zeratul', 'Level 3 Marine', 'Level 5 Marauder',
46
+ 'Level 8 Hellbat', 'Level 11 Widow Mine', 'Level 14 Medivac', 'Level 17 Banshee', 'Level 21 Ghost', 'Level 23 Thor',
47
+ 'Level 27 Battlecruiser', 'Level 29 Raynor', 'Level 11 Locust', 'Level 3 Zergling', 'Level 5 Roach', 'Level 8 Hydralisk',
48
+ 'Level 14 Swarm Host', 'Level 17 Infestor', 'Level 21 Viper', 'Level 23 Broodlord', 'Level 27 Ultralisk', 'Level 29 Kerrigan',
49
+ 'Protoss Champion',' Terran Champion', 'Zerg Champion', '', '', ''
50
+ ]
51
+ attr_reader :name, :sheet, :row, :column
52
+ def initialize sheet, pixel_size, pixel_column, pixel_row
53
+ @sheet = sheet
54
+ @column = pixel_column / pixel_size
55
+ @row = pixel_row / pixel_size
56
+ @name = name_from_position
57
+ end
58
+
59
+ def name_from_position
60
+ index = (@sheet * 36) + image_position
61
+ NAMES[index]
62
+ end
63
+
64
+ # @return [String] The URL to the portrait image iteslf
65
+ def url
66
+ "http://media.blizzard.com/sc2/portraits/#{@sheet}-#{image_position}.jpg"
67
+ end
68
+
69
+ # @return [String] The URL to the spritesheet the portrait is part of
70
+ def spritesheet_url
71
+ "http://media.blizzard.com/sc2/portraits/#{@sheet}-90.jpg"
72
+ end
73
+
74
+ # The image position within a given 6x6 spritesheet
75
+ #
76
+ # @return [Fixnum] image position within the spritesheet
77
+ def image_position
78
+ (@row * 6) + @column
79
+ end
80
+ end
81
+ end
82
+ end
@@ -1,4 +1,5 @@
1
1
  require 'bnet_scraper/starcraft2/profile'
2
+ require 'bnet_scraper/starcraft2/portrait'
2
3
 
3
4
  module BnetScraper
4
5
  module Starcraft2
@@ -82,15 +83,9 @@ module BnetScraper
82
83
  # is the position within the spritesheet
83
84
  #
84
85
  # @param [Nokogiri::XML] html node
85
- # @return [String] Portrait name
86
+ # @return [BnetScraper::Starcraft2::Portrait] Portrait containing spritesheet information
86
87
  def get_portrait html
87
- @profile.portrait = begin
88
- portrait_info = extract_portrait_info html
89
- position = get_portrait_position html, portrait_info
90
- PORTRAITS[portrait_info[0].to_i][position-1]
91
- rescue
92
- nil
93
- end
88
+ @profile.portrait = Portrait.new(*extract_portrait_info(html))
94
89
  end
95
90
 
96
91
  # Extracts portrait information (spritesheet page, portsize size, X, Y) from HTML page
@@ -98,21 +93,7 @@ module BnetScraper
98
93
  # @param [Nokogiri::XML] html node
99
94
  # @return [Fixnum, Fixnum, Fixnum, Fixnum] Array of sprite information
100
95
  def extract_portrait_info html
101
- html.css("#portrait .icon-frame").attr('style').to_s.scan(/url\('.+(\d+)-(\d+)\.jpg'\) ([\-\d]+)px ([\-\d]+)px/).flatten
102
- end
103
-
104
- # Translates x/y positions of the background spritesheet into an array index. There are
105
- # 6 pictures per row, but X/Y is in pixels, so account for portrait size in the incrementor
106
- #
107
- # @param [Nokogiri::HTML] html node
108
- # @param [Fixnum] size of portrait in pixels
109
- # @return [Fixnum] index position of portrait spritesheet
110
- def get_portrait_position html, portrait_info
111
- size = portrait_info[1].to_i
112
- x = portrait_info[2].to_i
113
- y = portrait_info[3].to_i
114
-
115
- ((-y/size) * 6) + (-x/size + 1)
96
+ html.css("#portrait .icon-frame").attr('style').to_s.scan(/url\('.+(\d+)-(\d+)\.jpg'\) -{0,1}(\d+)px -{0,1}(\d+)px/).flatten.map(&:to_i)
116
97
  end
117
98
 
118
99
  # Extracts the current and highest ever solo league achieved
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ describe BnetScraper::Starcraft2::GrandmasterScraper do
4
+ describe '#scrape' do
5
+ let(:scraper) { BnetScraper::Starcraft2::GrandmasterScraper.new(region: :us) }
6
+ subject { scraper }
7
+ before do
8
+ VCR.use_cassette('grandmaster_na', record: :new_episodes) do
9
+ scraper.scrape
10
+ end
11
+ end
12
+ it { should have(200).players }
13
+
14
+ context 'player statistics' do
15
+ let(:player) { scraper.players[0] }
16
+
17
+ it 'should have rank 1' do
18
+ player[:rank].should == '1st'
19
+ end
20
+
21
+ it 'should have a race' do
22
+ player[:race].should == 'zerg'
23
+ end
24
+
25
+ it 'should have a name' do
26
+ player[:name].should == '[Qntc] QuanticHyuN'
27
+ end
28
+
29
+ it 'should have points' do
30
+ player[:points].should == '953'
31
+ end
32
+
33
+ it 'should have wins' do
34
+ player[:wins].should == '71'
35
+ end
36
+
37
+ it 'should have losses' do
38
+ player[:losses].should == '11'
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe BnetScraper::Starcraft2::Portrait do
4
+ subject { BnetScraper::Starcraft2::Portrait.new(3, 90, 360, 0) }
5
+ its(:name) { should == 'Selendis' }
6
+ its(:sheet) { should == 3 }
7
+ its(:row) { should == 0 }
8
+ its(:column) { should == 4 }
9
+ its(:image_position) { should == 4 }
10
+ its(:url) { should == 'http://media.blizzard.com/sc2/portraits/3-4.jpg' }
11
+ its(:spritesheet_url) { should == 'http://media.blizzard.com/sc2/portraits/3-90.jpg' }
12
+ end
@@ -9,12 +9,14 @@ describe BnetScraper::Starcraft2::ProfileScraper do
9
9
  let(:scraper) { BnetScraper::Starcraft2::ProfileScraper.new(bnet_id: '2377239', account: 'Demon') }
10
10
 
11
11
  describe '#scrape' do
12
- subject do
12
+ let(:output) do
13
13
  VCR.use_cassette('demon_profile', record: :new_episodes) do
14
14
  scraper.scrape
15
15
  end
16
16
  end
17
17
 
18
+ subject { output }
19
+
18
20
  its(:achievement_points) { should == '4890' }
19
21
  its(:current_solo_league) { should == 'None' }
20
22
  its(:highest_solo_league) { should == 'Platinum' }
@@ -22,11 +24,15 @@ describe BnetScraper::Starcraft2::ProfileScraper do
22
24
  its(:highest_team_league) { should == 'Master' }
23
25
  its(:career_games) { should == '1804' }
24
26
  its(:games_this_season) { should == '27' }
25
- its(:portrait) { should == 'Mohandar' }
26
27
  its(:terran_swarm_level) { should == 0 }
27
28
  its(:protoss_swarm_level) { should == 12 }
28
29
  its(:zerg_swarm_level) { should == 0 }
29
30
 
31
+ it 'should have a scraped portrait' do
32
+ output.portrait.name.should == 'Mohandar'
33
+ output.portrait.url.should == 'http://media.blizzard.com/sc2/portraits/3-3.jpg'
34
+ end
35
+
30
36
  context 'first league ever' do
31
37
  let(:scraper) { BnetScraper::Starcraft2::ProfileScraper.new url: 'http://us.battle.net/sc2/en/profile/3513522/1/Heritic/' }
32
38
 
@@ -0,0 +1,456 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://us.battle.net/sc2/en/ladder/grandmaster/heart-of-the-swarm
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ user-agent:
11
+ - Faraday v0.8.7
12
+ accept-encoding:
13
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
+ accept:
15
+ - ! '*/*'
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: OK
20
+ headers:
21
+ date:
22
+ - Fri, 10 May 2013 04:17:31 GMT
23
+ server:
24
+ - Apache
25
+ x-frame-options:
26
+ - SAMEORIGIN
27
+ set-cookie:
28
+ - perm=1; Domain=battle.net; Path=/
29
+ content-language:
30
+ - en-US
31
+ vary:
32
+ - Accept-Encoding
33
+ content-encoding:
34
+ - gzip
35
+ connection:
36
+ - close
37
+ transfer-encoding:
38
+ - chunked
39
+ content-type:
40
+ - application/xhtml+xml;charset=UTF-8
41
+ body:
42
+ encoding: ASCII-8BIT
43
+ string: !binary |-
44
+ H4sIAAAAAAAAA+y963LbSLIu+rsnYt4BzV6xZZ/dvOBKwm55QpZsWW3Jdlty
45
+ d093MDpAskTCAgEOAOri2R2xf5yXOP9W7B874sSJ2A8xj7Ke5GRWFcgCRckp
46
+ lewlCKtnLYu4fVko5FeZWVmXHyb5NDLOp1GcbTYmeT570m6fnZ21zuxWko7b
47
+ pu/77XO8p4E3PYmCeLzZYHFznjWMYRRkWXH07K9/+WHCgpHAepKMF3DJeNaa
48
+ snacfdeQF48Hly+2jwffcZA8zCP2bDcN4tE0yHKWGvssGM+Z0TR2gykzdufh
49
+ CA8O8yDdToPj3Njb+6EtnoLHpywPjGES5yzONxvHQZSxhoHCmuwf8/B0sxFO
50
+ gzHLkyQaBGnDaF9+Zu/FJhuN2ffDSZpM2aZZfvzX5oet5nYynQV5OIiYRIjC
51
+ +MRIWbTZyCZJmg/nuRECIDyasuPNRjsbWu0sh0eG7SgZBlFzmEynSdzmhYF3
52
+ D07x9gzva8GvhpFfzJgsa/u8ybFWBbEgHU6KO4PZLAqHIABAkxmLxdURy4Zp
53
+ OMOz//0cv6Eojqz7edYaBDnUWytmeZt/xvYoyAMFAOCxYjcbzxc3Gofyymp5
54
+ 8ouIZRPG8qJMOTvP28MMNGXKRmEAhYyiz9YI3N8WP1vw82+njislfdts/h4e
55
+ G3sv+s+MLym2GbJVyb+zeBQe95vNUjkM78uXxCMWpfvli9K9tihcttSVBTP/
56
+ 9X/+9e97e8DVN+wsK0ljcfuYsVE75hcuq3CQJ1Ohsfx9ggjagTjI2SUS3PpF
57
+ 8d2QbfylLPcO1RmRo2A0Yqn8syLjzhVZvspCca2vprhLyR5R9J0p6lJ091rR
58
+ ogFUwT8Gp4E42zCydHiN/n/M2vkkTEfNWZDmF+2P/5iz9KL1UbDg2Q9tgXIH
59
+ UoZJyr4ELpq5PJythV5Rh2slwf3tNlTs9s7W0dbvf/1Lnl4Y/zRGyXA+BZPZ
60
+ YudsCCZxCib70cbzYHgyTpN5PNpD67UdDCds43uDW+LvjTyds8fGnwbwfDh5
61
+ BD//+Sdi9/tYJLV09I+4WrhtrExRIR/SyNg0NpQq2nha3DAJUjY6LG4r31Wq
62
+ yMUjgyBjKiJbXpqlyUc2zJWri0vDUSxPS7PL9bo1iMJPn4J01AIhy0LNZzNw
63
+ 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
453
+ 8tpypZMf2tjP/uz/FwAAAP//AwDOa6eLf9ACAA==
454
+ http_version: '1.1'
455
+ recorded_at: Fri, 10 May 2013 04:17:31 GMT
456
+ recorded_with: VCR 2.4.0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bnet_scraper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-29 00:00:00.000000000 Z
12
+ date: 2013-05-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -146,19 +146,23 @@ files:
146
146
  - lib/bnet_scraper/starcraft2/achievement.rb
147
147
  - lib/bnet_scraper/starcraft2/achievement_scraper.rb
148
148
  - lib/bnet_scraper/starcraft2/base_scraper.rb
149
+ - lib/bnet_scraper/starcraft2/grandmaster_scraper.rb
149
150
  - lib/bnet_scraper/starcraft2/league.rb
150
151
  - lib/bnet_scraper/starcraft2/league_scraper.rb
151
152
  - lib/bnet_scraper/starcraft2/match.rb
152
153
  - lib/bnet_scraper/starcraft2/match_history_scraper.rb
154
+ - lib/bnet_scraper/starcraft2/portrait.rb
153
155
  - lib/bnet_scraper/starcraft2/profile.rb
154
156
  - lib/bnet_scraper/starcraft2/profile_scraper.rb
155
157
  - lib/bnet_scraper/starcraft2/status_scraper.rb
156
158
  - spec/spec_helper.rb
157
159
  - spec/starcraft2/achievement_scraper_spec.rb
158
160
  - spec/starcraft2/base_scraper_spec.rb
161
+ - spec/starcraft2/grandmaster_scraper_spec.rb
159
162
  - spec/starcraft2/league_scraper_spec.rb
160
163
  - spec/starcraft2/league_spec.rb
161
164
  - spec/starcraft2/match_history_scraper_spec.rb
165
+ - spec/starcraft2/portrait_spec.rb
162
166
  - spec/starcraft2/profile_scraper_spec.rb
163
167
  - spec/starcraft2/profile_spec.rb
164
168
  - spec/starcraft2/status_scraper_spec.rb
@@ -170,6 +174,7 @@ files:
170
174
  - spec/support/fixtures/vcr_cassettes/demon_profile.yml
171
175
  - spec/support/fixtures/vcr_cassettes/demon_profile_leagues.yml
172
176
  - spec/support/fixtures/vcr_cassettes/full_demon_scrape.yml
177
+ - spec/support/fixtures/vcr_cassettes/grandmaster_na.yml
173
178
  - spec/support/fixtures/vcr_cassettes/invalid_achievement.yml
174
179
  - spec/support/fixtures/vcr_cassettes/invalid_leagues.yml
175
180
  - spec/support/fixtures/vcr_cassettes/invalid_matches.yml
@@ -207,9 +212,11 @@ test_files:
207
212
  - spec/spec_helper.rb
208
213
  - spec/starcraft2/achievement_scraper_spec.rb
209
214
  - spec/starcraft2/base_scraper_spec.rb
215
+ - spec/starcraft2/grandmaster_scraper_spec.rb
210
216
  - spec/starcraft2/league_scraper_spec.rb
211
217
  - spec/starcraft2/league_spec.rb
212
218
  - spec/starcraft2/match_history_scraper_spec.rb
219
+ - spec/starcraft2/portrait_spec.rb
213
220
  - spec/starcraft2/profile_scraper_spec.rb
214
221
  - spec/starcraft2/profile_spec.rb
215
222
  - spec/starcraft2/status_scraper_spec.rb
@@ -221,6 +228,7 @@ test_files:
221
228
  - spec/support/fixtures/vcr_cassettes/demon_profile.yml
222
229
  - spec/support/fixtures/vcr_cassettes/demon_profile_leagues.yml
223
230
  - spec/support/fixtures/vcr_cassettes/full_demon_scrape.yml
231
+ - spec/support/fixtures/vcr_cassettes/grandmaster_na.yml
224
232
  - spec/support/fixtures/vcr_cassettes/invalid_achievement.yml
225
233
  - spec/support/fixtures/vcr_cassettes/invalid_leagues.yml
226
234
  - spec/support/fixtures/vcr_cassettes/invalid_matches.yml
@@ -230,4 +238,3 @@ test_files:
230
238
  - spec/support/fixtures/vcr_cassettes/profile_not_laddered.yml
231
239
  - spec/support/fixtures/vcr_cassettes/realm_status.yml
232
240
  - spec/support/shared/sc2_scraper.rb
233
- has_rdoc: