bnet_scraper 0.0.2 → 0.1.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.
- data/CHANGELOG.md +18 -0
- data/bnet_scraper.gemspec +2 -1
- data/lib/bnet_scraper.rb +2 -2
- data/lib/bnet_scraper/starcraft2/achievement_scraper.rb +6 -1
- data/lib/bnet_scraper/starcraft2/league_scraper.rb +14 -9
- data/lib/bnet_scraper/starcraft2/match_history_scraper.rb +7 -1
- data/lib/bnet_scraper/starcraft2/profile_scraper.rb +22 -11
- data/lib/bnet_scraper/starcraft2/status_scraper.rb +2 -1
- data/spec/starcraft2/achievement_scraper_spec.rb +6 -0
- data/spec/starcraft2/league_scraper_spec.rb +6 -0
- data/spec/starcraft2/match_history_scraper_spec.rb +6 -0
- data/spec/starcraft2/profile_scraper_spec.rb +5 -0
- data/spec/support/failure.html +565 -0
- data/spec/support/load_fakeweb.rb +5 -0
- metadata +26 -12
    
        data/CHANGELOG.md
    ADDED
    
    | @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            # Changelog!
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ## 0.1.0 (Jul 06 2012)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Replaces open-uri with Faraday
         | 
| 6 | 
            +
            * Adds BnetScraper::InvalidProfileError when unsuccessfully scraping
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ## 0.2.0 (Apr 20 2012)
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * Adds Battle.net Status API
         | 
| 11 | 
            +
            * Adds Match History scraping
         | 
| 12 | 
            +
            * Adds Achievement scraping
         | 
| 13 | 
            +
            * Documentation Improvements
         | 
| 14 | 
            +
            * Adds Travis-CI Support
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## 0.1.0 (Mar 13 2012)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * Initial Release
         | 
    
        data/bnet_scraper.gemspec
    CHANGED
    
    | @@ -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.0 | 
| 6 | 
            +
              s.version     = "0.1.0"
         | 
| 7 7 | 
             
              s.authors     = ["Andrew Nordman"]
         | 
| 8 8 | 
             
              s.email       = ["anordman@majorleaguegaming.com"]
         | 
| 9 9 | 
             
              s.homepage    = "https://github.com/agoragames/bnet_scraper/"
         | 
| @@ -16,6 +16,7 @@ Gem::Specification.new do |s| | |
| 16 16 | 
             
              s.require_paths = ["lib"]
         | 
| 17 17 |  | 
| 18 18 | 
             
              s.add_runtime_dependency 'nokogiri'
         | 
| 19 | 
            +
              s.add_runtime_dependency 'faraday'
         | 
| 19 20 | 
             
              s.add_development_dependency 'rake'
         | 
| 20 21 | 
             
              s.add_development_dependency 'rspec'
         | 
| 21 22 | 
             
              s.add_development_dependency 'fakeweb'
         | 
    
        data/lib/bnet_scraper.rb
    CHANGED
    
    
| @@ -43,7 +43,12 @@ module BnetScraper | |
| 43 43 |  | 
| 44 44 | 
             
                  # retrieves the account's achievements overview page HTML for scraping
         | 
| 45 45 | 
             
                  def get_response
         | 
| 46 | 
            -
                     | 
| 46 | 
            +
                    response = Faraday.get "#{profile_url}achievements/"
         | 
| 47 | 
            +
                    if response.success?
         | 
| 48 | 
            +
                      @response = Nokogiri::HTML(response.body) 
         | 
| 49 | 
            +
                    else
         | 
| 50 | 
            +
                      raise BnetScraper::InvalidProfileError
         | 
| 51 | 
            +
                    end
         | 
| 47 52 | 
             
                  end
         | 
| 48 53 |  | 
| 49 54 | 
             
                  # scrapes the recent achievements from the account's achievements overview page
         | 
| @@ -30,15 +30,20 @@ module BnetScraper | |
| 30 30 | 
             
                  end
         | 
| 31 31 |  | 
| 32 32 | 
             
                  def scrape
         | 
| 33 | 
            -
                    @response =  | 
| 34 | 
            -
                     | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 33 | 
            +
                    @response = Faraday.get @url
         | 
| 34 | 
            +
                    if @response.success?
         | 
| 35 | 
            +
                      @response = Nokogiri::HTML(@response.body)
         | 
| 36 | 
            +
                      value = @response.css(".data-title .data-label h3").inner_text().strip 
         | 
| 37 | 
            +
                      header_regex = /Season (\d{1}) - \s+(\dv\d)( Random)? (\w+)\s+Division (.+)/
         | 
| 38 | 
            +
                      header_values = value.match(header_regex).to_a
         | 
| 39 | 
            +
                      header_values.shift()
         | 
| 40 | 
            +
                      @season, @size, @random, @division, @name = header_values
         | 
| 41 | 
            +
                      
         | 
| 42 | 
            +
                      @random = !@random.nil?
         | 
| 43 | 
            +
                      output
         | 
| 44 | 
            +
                    else
         | 
| 45 | 
            +
                      raise BnetScraper::InvalidProfileError
         | 
| 46 | 
            +
                    end
         | 
| 42 47 | 
             
                  end
         | 
| 43 48 |  | 
| 44 49 | 
             
                  def output
         | 
| @@ -25,7 +25,13 @@ module BnetScraper | |
| 25 25 |  | 
| 26 26 | 
             
                  # retrieves the match history HTML for scraping
         | 
| 27 27 | 
             
                  def get_response
         | 
| 28 | 
            -
                    @response =  | 
| 28 | 
            +
                    @response = Faraday.get match_url
         | 
| 29 | 
            +
                    
         | 
| 30 | 
            +
                    if @response.success?
         | 
| 31 | 
            +
                      @response = Nokogiri::HTML(@response.body)
         | 
| 32 | 
            +
                    else
         | 
| 33 | 
            +
                      raise BnetScraper::InvalidProfileError
         | 
| 34 | 
            +
                    end
         | 
| 29 35 | 
             
                  end
         | 
| 30 36 |  | 
| 31 37 | 
             
                  def scrape
         | 
| @@ -30,23 +30,34 @@ module BnetScraper | |
| 30 30 |  | 
| 31 31 | 
             
                  # scrapes the profile page for basic account information
         | 
| 32 32 | 
             
                  def get_profile_data
         | 
| 33 | 
            -
                    response =  | 
| 33 | 
            +
                    response = Faraday.get profile_url
         | 
| 34 34 |  | 
| 35 | 
            -
                     | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 35 | 
            +
                    if response.success?
         | 
| 36 | 
            +
                      html = Nokogiri::HTML(response.body)
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                      @race = html.css("#season-snapshot .module-footer a").first().inner_html()
         | 
| 39 | 
            +
                      @wins = html.css("#career-stats h2").inner_html()
         | 
| 40 | 
            +
                      @achievement_points = html.css("#profile-header h3").inner_html()
         | 
| 41 | 
            +
                    else
         | 
| 42 | 
            +
                      raise BnetScraper::InvalidProfileError
         | 
| 43 | 
            +
                    end
         | 
| 38 44 | 
             
                  end
         | 
| 39 45 |  | 
| 40 46 | 
             
                  # scrapes the league list from account's league page and sets an array of URLs
         | 
| 41 47 | 
             
                  def get_league_list
         | 
| 42 | 
            -
                    response =  | 
| 48 | 
            +
                    response = Faraday.get profile_url + "ladder/leagues"
         | 
| 49 | 
            +
                    if response.success?
         | 
| 50 | 
            +
                      html = Nokogiri::HTML(response.body)
         | 
| 43 51 |  | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 52 | 
            +
                      @leagues = html.css("a[href*='#current-rank']").map do |league|
         | 
| 53 | 
            +
                        {
         | 
| 54 | 
            +
                          name: league.inner_html().strip,
         | 
| 55 | 
            +
                          id: league.attr('href').sub('#current-rank',''),
         | 
| 56 | 
            +
                          href: "#{profile_url}ladder/#{league.attr('href')}"
         | 
| 57 | 
            +
                        }
         | 
| 58 | 
            +
                      end
         | 
| 59 | 
            +
                    else
         | 
| 60 | 
            +
                      raise BnetScraper::InvalidProfileError
         | 
| 50 61 | 
             
                    end
         | 
| 51 62 | 
             
                  end
         | 
| 52 63 |  | 
| @@ -17,7 +17,8 @@ module BnetScraper | |
| 17 17 | 
             
                  class << self
         | 
| 18 18 |  | 
| 19 19 | 
             
                    def fetch
         | 
| 20 | 
            -
                       | 
| 20 | 
            +
                      response = Faraday.get SOURCE
         | 
| 21 | 
            +
                      Nokogiri::HTML(response.body)
         | 
| 21 22 | 
             
                        .css('.forumPost').first.css('span').to_a
         | 
| 22 23 | 
             
                        .each_slice(2).map { |i| { :region => i.first.text, :status => i.last.text } }
         | 
| 23 24 | 
             
                    end
         | 
| @@ -25,6 +25,12 @@ describe BnetScraper::Starcraft2::AchievementScraper do | |
| 25 25 | 
             
                  subject.should_receive(:scrape_showcase)
         | 
| 26 26 | 
             
                  subject.scrape
         | 
| 27 27 | 
             
                end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                it 'should return InvalidProfileError if response is 404' do
         | 
| 30 | 
            +
                  url = 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/achievements/'
         | 
| 31 | 
            +
                  scraper = BnetScraper::Starcraft2::AchievementScraper.new(url: url)
         | 
| 32 | 
            +
                  expect { scraper.scrape }.to raise_error(BnetScraper::InvalidProfileError)
         | 
| 33 | 
            +
                end
         | 
| 28 34 | 
             
              end
         | 
| 29 35 |  | 
| 30 36 | 
             
              describe '#scrape_showcase' do
         | 
| @@ -50,6 +50,12 @@ describe BnetScraper::Starcraft2::LeagueScraper do | |
| 50 50 | 
             
                  subject.should_receive(:output)
         | 
| 51 51 | 
             
                  subject.scrape
         | 
| 52 52 | 
             
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                it 'should raise InvalidProfileError when response is 404' do
         | 
| 55 | 
            +
                  url = 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/leagues/12345' 
         | 
| 56 | 
            +
                  scraper = BnetScraper::Starcraft2::LeagueScraper.new(url: url)
         | 
| 57 | 
            +
                  expect { scraper.scrape }.to raise_error(BnetScraper::InvalidProfileError)
         | 
| 58 | 
            +
                end
         | 
| 53 59 | 
             
              end
         | 
| 54 60 |  | 
| 55 61 | 
             
              describe '#output' do
         | 
| @@ -34,6 +34,12 @@ describe BnetScraper::Starcraft2::MatchHistoryScraper do | |
| 34 34 | 
             
                it 'should set the match date of each match' do
         | 
| 35 35 | 
             
                  subject.matches[0][:date].should == '3/12/2012'
         | 
| 36 36 | 
             
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                it 'should raised InvalidProfileError when response is 404' do
         | 
| 39 | 
            +
                  url = 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/matches'
         | 
| 40 | 
            +
                  scraper = BnetScraper::Starcraft2::MatchHistoryScraper.new(url: url)
         | 
| 41 | 
            +
                  expect { scraper.scrape }.to raise_error(BnetScraper::InvalidProfileError)
         | 
| 42 | 
            +
                end
         | 
| 37 43 | 
             
              end
         | 
| 38 44 |  | 
| 39 45 | 
             
              describe '#output' do
         | 
| @@ -45,6 +45,11 @@ describe BnetScraper::Starcraft2::ProfileScraper do | |
| 45 45 | 
             
                  subject.should_receive(:output)
         | 
| 46 46 | 
             
                  subject.scrape
         | 
| 47 47 | 
             
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                it 'should return InvalidProfileError if response is 404' do
         | 
| 50 | 
            +
                  scraper = BnetScraper::Starcraft2::ProfileScraper.new url: 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/'
         | 
| 51 | 
            +
                  expect { scraper.scrape }.to raise_error(BnetScraper::InvalidProfileError)
         | 
| 52 | 
            +
                end
         | 
| 48 53 | 
             
              end
         | 
| 49 54 |  | 
| 50 55 | 
             
              describe '#output' do
         | 
| @@ -0,0 +1,565 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" class="en-us">
         | 
| 3 | 
            +
            <head xmlns:og="http://ogp.me/ns#" xmlns:fb="http://ogp.me/ns/fb#">
         | 
| 4 | 
            +
            <title>Error - StarCraft II</title>
         | 
| 5 | 
            +
            <meta content="false" http-equiv="imagetoolbar" />
         | 
| 6 | 
            +
            <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
         | 
| 7 | 
            +
            <link rel="shortcut icon" href="/sc2/static/local-common/images/favicons/sc2.ico" type="image/x-icon"/>
         | 
| 8 | 
            +
            <link rel="search" type="application/opensearchdescription+xml" href="http://us.battle.net/en-us/data/opensearch" title="Battle.net Search" />
         | 
| 9 | 
            +
            <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/local-common/css/common.css?v42" />
         | 
| 10 | 
            +
            <!--[if IE]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/local-common/css/common-ie.css?v42" />
         | 
| 11 | 
            +
            <![endif]-->
         | 
| 12 | 
            +
            <!--[if IE 6]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/local-common/css/common-ie6.css?v42" />
         | 
| 13 | 
            +
            <![endif]-->
         | 
| 14 | 
            +
            <!--[if IE 7]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/local-common/css/common-ie7.css?v42" />
         | 
| 15 | 
            +
            <![endif]-->
         | 
| 16 | 
            +
            <link title="StarCraft II™ - News" href="/sc2/en/feed/news" type="application/atom+xml" rel="alternate"/>
         | 
| 17 | 
            +
            <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/css/sc2.css?v21" />
         | 
| 18 | 
            +
            <!--[if IE]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/css/sc2-ie.css?v21" />
         | 
| 19 | 
            +
            <![endif]-->
         | 
| 20 | 
            +
            <!--[if IE 6]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/css/sc2-ie6.css?v21" />
         | 
| 21 | 
            +
            <![endif]-->
         | 
| 22 | 
            +
            <!--[if IE 7]> <link rel="stylesheet" type="text/css" media="all" href="/sc2/static/css/sc2-ie7.css?v21" />
         | 
| 23 | 
            +
            <![endif]-->
         | 
| 24 | 
            +
            <script type="text/javascript" src="/sc2/static/local-common/js/third-party/jquery.js?v42"></script>
         | 
| 25 | 
            +
            <script type="text/javascript" src="/sc2/static/local-common/js/core.js?v42"></script>
         | 
| 26 | 
            +
            <script type="text/javascript" src="/sc2/static/local-common/js/tooltip.js?v42"></script>
         | 
| 27 | 
            +
            <!--[if IE 6]> <script type="text/javascript">
         | 
| 28 | 
            +
            //<![CDATA[
         | 
| 29 | 
            +
            try { document.execCommand('BackgroundImageCache', false, true) } catch(e) {}
         | 
| 30 | 
            +
            //]]>
         | 
| 31 | 
            +
            </script>
         | 
| 32 | 
            +
            <![endif]-->
         | 
| 33 | 
            +
            <script type="text/javascript">
         | 
| 34 | 
            +
            //<![CDATA[
         | 
| 35 | 
            +
            Core.staticUrl = '/sc2/static';
         | 
| 36 | 
            +
            Core.sharedStaticUrl= '/sc2/static/local-common';
         | 
| 37 | 
            +
            Core.baseUrl = '/sc2/en';
         | 
| 38 | 
            +
            Core.projectUrl = '/sc2';
         | 
| 39 | 
            +
            Core.cdnUrl = 'http://us.media.blizzard.com';
         | 
| 40 | 
            +
            Core.supportUrl = 'http://us.battle.net/support/';
         | 
| 41 | 
            +
            Core.secureSupportUrl= 'https://us.battle.net/support/';
         | 
| 42 | 
            +
            Core.project = 'sc2';
         | 
| 43 | 
            +
            Core.locale = 'en-us';
         | 
| 44 | 
            +
            Core.language = 'en';
         | 
| 45 | 
            +
            Core.buildRegion = 'us';
         | 
| 46 | 
            +
            Core.region = 'us';
         | 
| 47 | 
            +
            Core.shortDateFormat= 'MM/dd/yyyy';
         | 
| 48 | 
            +
            Core.dateTimeFormat = 'MM/dd/yyyy hh:mm a';
         | 
| 49 | 
            +
            Core.loggedIn = false;
         | 
| 50 | 
            +
            Flash.videoPlayer = 'http://us.media.blizzard.com/global-video-player/themes/sc2/video-player.swf';
         | 
| 51 | 
            +
            Flash.videoBase = 'http://us.media.blizzard.com/sc2/media/videos';
         | 
| 52 | 
            +
            Flash.ratingImage = 'http://us.media.blizzard.com/global-video-player/ratings/sc2/en-us.jpg';
         | 
| 53 | 
            +
            Flash.expressInstall= 'http://us.media.blizzard.com/global-video-player/expressInstall.swf';
         | 
| 54 | 
            +
            var _gaq = _gaq || [];
         | 
| 55 | 
            +
            _gaq.push(['_setAccount', 'UA-544112-16']);
         | 
| 56 | 
            +
            _gaq.push(['_setDomainName', '.battle.net']);
         | 
| 57 | 
            +
            _gaq.push(['_setAllowLinker', true]);
         | 
| 58 | 
            +
            _gaq.push(['_trackPageview']);
         | 
| 59 | 
            +
            _gaq.push(['_trackPageLoadTime']);
         | 
| 60 | 
            +
            //]]>
         | 
| 61 | 
            +
            </script>
         | 
| 62 | 
            +
            <meta property="og:site_name" content="StarCraft II™" />
         | 
| 63 | 
            +
            <meta property="og:title" content="StarCraft II" />
         | 
| 64 | 
            +
            <meta property="og:image" content="http://us.media.blizzard.com/battle.net/logos/og-sc2.png" />
         | 
| 65 | 
            +
            <meta property="og:url" content="http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/?error=404" />
         | 
| 66 | 
            +
            <meta property="og:type" content="website" />
         | 
| 67 | 
            +
            <meta property="og:locale" content="en_US" />
         | 
| 68 | 
            +
            <meta property="fb:admins" content="470332842321,433163104416"/>
         | 
| 69 | 
            +
            </head>
         | 
| 70 | 
            +
            <body class=""><div id="wrapper">
         | 
| 71 | 
            +
            <div id="header">
         | 
| 72 | 
            +
            <div class="search-bar">
         | 
| 73 | 
            +
            <form action="/sc2/en/search" method="get" autocomplete="off">
         | 
| 74 | 
            +
            <div>
         | 
| 75 | 
            +
            <input type="text" class="search-field input" name="q" id="search-field" maxlength="200" tabindex="40" alt="Search StarCraft II" value="Search StarCraft II" />
         | 
| 76 | 
            +
            <input type="submit" class="search-button" value="" tabindex="41" />
         | 
| 77 | 
            +
            </div>
         | 
| 78 | 
            +
            </form>
         | 
| 79 | 
            +
            </div>
         | 
| 80 | 
            +
            <h1 id="logo"><a href="/sc2/en/">Battle.net</a></h1>
         | 
| 81 | 
            +
            <div id="header-plate">
         | 
| 82 | 
            +
            <ul class="menu" id="menu">
         | 
| 83 | 
            +
            <li class="menu-home">
         | 
| 84 | 
            +
            <a href="/sc2/en/">
         | 
| 85 | 
            +
            <span>Home</span>
         | 
| 86 | 
            +
            </a>
         | 
| 87 | 
            +
            </li>
         | 
| 88 | 
            +
            <li class="menu-game">
         | 
| 89 | 
            +
            <a href="/sc2/en/game/">
         | 
| 90 | 
            +
            <span>Game Guide</span>
         | 
| 91 | 
            +
            </a>
         | 
| 92 | 
            +
            </li>
         | 
| 93 | 
            +
            <li class="menu-esports">
         | 
| 94 | 
            +
            <a href="/sc2/en/esports/">
         | 
| 95 | 
            +
            <span>eSports</span>
         | 
| 96 | 
            +
            </a>
         | 
| 97 | 
            +
            </li>
         | 
| 98 | 
            +
            <li class="menu-media">
         | 
| 99 | 
            +
            <a href="/sc2/en/media/">
         | 
| 100 | 
            +
            <span>Media</span>
         | 
| 101 | 
            +
            </a>
         | 
| 102 | 
            +
            </li>
         | 
| 103 | 
            +
            <li class="menu-forums">
         | 
| 104 | 
            +
            <a href="/sc2/en/forum/">
         | 
| 105 | 
            +
            <span>Forums</span>
         | 
| 106 | 
            +
            </a>
         | 
| 107 | 
            +
            </li>
         | 
| 108 | 
            +
            <li class="menu-buy-now">
         | 
| 109 | 
            +
            <a href="/sc2/en/buy-now/">
         | 
| 110 | 
            +
            <span>Buy Now</span>
         | 
| 111 | 
            +
            </a>
         | 
| 112 | 
            +
            </li>
         | 
| 113 | 
            +
            </ul>
         | 
| 114 | 
            +
            <div id="user-plate" class="ajax-update">
         | 
| 115 | 
            +
            <div id="user-empty">
         | 
| 116 | 
            +
            <a href="?login" onclick="return Login.open('https://us.battle.net/login/login.frag')"><strong>Log in</strong></a> with your Battle.net account to post comments and personalize your site content.
         | 
| 117 | 
            +
            </div>
         | 
| 118 | 
            +
            </div>
         | 
| 119 | 
            +
            <ol class="ui-breadcrumb">
         | 
| 120 | 
            +
            <li class="last">
         | 
| 121 | 
            +
            <a href="/sc2/en/" rel="np">
         | 
| 122 | 
            +
            StarCraft II
         | 
| 123 | 
            +
            </a>
         | 
| 124 | 
            +
            </li>
         | 
| 125 | 
            +
            </ol>
         | 
| 126 | 
            +
            </div>
         | 
| 127 | 
            +
            </div>
         | 
| 128 | 
            +
            <div id="content">
         | 
| 129 | 
            +
            <div id="content-top">
         | 
| 130 | 
            +
            <div id="content-bot">	<div class="error-page">
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            		<div class="warning-graphic"></div>
         | 
| 133 | 
            +
             | 
| 134 | 
            +
            			<div class="error-header">Page Not Found</div>
         | 
| 135 | 
            +
            			<div class="divider"></div>
         | 
| 136 | 
            +
            			<div class="error-desc">The page you were looking for either doesn’t exist or some terrible, terrible error has occurred.</div>
         | 
| 137 | 
            +
            			
         | 
| 138 | 
            +
             | 
| 139 | 
            +
            	</div>
         | 
| 140 | 
            +
            </div>
         | 
| 141 | 
            +
            </div>
         | 
| 142 | 
            +
            </div>
         | 
| 143 | 
            +
            <div id="footer">
         | 
| 144 | 
            +
            <div id="sitemap" class="promotions">
         | 
| 145 | 
            +
            <div class="column">
         | 
| 146 | 
            +
            <h3 class="bnet">
         | 
| 147 | 
            +
            <a href="http://us.battle.net/" tabindex="100">Battle.net Home</a>
         | 
| 148 | 
            +
            </h3>
         | 
| 149 | 
            +
            <ul>
         | 
| 150 | 
            +
            <li><a href="http://us.battle.net/what-is/">What is Battle.net?</a></li>
         | 
| 151 | 
            +
            <li><a href="https://us.battle.net/account/management/get-a-game.html">Buy Games</a></li>
         | 
| 152 | 
            +
            <li><a href="https://us.battle.net/account/management/">Account</a></li>
         | 
| 153 | 
            +
            <li><a href="http://us.battle.net/support/">Support</a></li>
         | 
| 154 | 
            +
            <li><a href="http://us.battle.net/realid/">Real ID</a></li>
         | 
| 155 | 
            +
            <li><a href="http://us.battle.net/battletag/">BattleTag</a></li>
         | 
| 156 | 
            +
            </ul>
         | 
| 157 | 
            +
            </div>
         | 
| 158 | 
            +
            <div class="column">
         | 
| 159 | 
            +
            <h3 class="games">
         | 
| 160 | 
            +
            <a href="http://us.battle.net/" tabindex="100">Games</a>
         | 
| 161 | 
            +
            </h3>
         | 
| 162 | 
            +
            <ul>
         | 
| 163 | 
            +
            <li><a href="http://us.battle.net/sc2/">StarCraft II™</a></li>
         | 
| 164 | 
            +
            <li><a href="http://us.battle.net/wow/">World of Warcraft™</a></li>
         | 
| 165 | 
            +
            <li><a href="http://us.battle.net/d3/">Diablo III™</a></li>
         | 
| 166 | 
            +
            <li><a href="http://us.battle.net/games/classic">Classic Games</a></li>
         | 
| 167 | 
            +
            <li><a href="https://us.battle.net/account/download/">Game Client Downloads</a></li>
         | 
| 168 | 
            +
            </ul>
         | 
| 169 | 
            +
            </div>
         | 
| 170 | 
            +
            <div class="column">
         | 
| 171 | 
            +
            <h3 class="account">
         | 
| 172 | 
            +
            <a href="https://us.battle.net/account/management/" tabindex="100">Account</a>
         | 
| 173 | 
            +
            </h3>
         | 
| 174 | 
            +
            <ul>
         | 
| 175 | 
            +
            <li><a href="https://us.battle.net/account/support/login-support.html">Can’t log in?</a></li>
         | 
| 176 | 
            +
            <li><a href="https://us.battle.net/account/creation/tos.html">Create Account</a></li>
         | 
| 177 | 
            +
            <li><a href="https://us.battle.net/account/management/">Account Summary</a></li>
         | 
| 178 | 
            +
            <li><a href="https://us.battle.net/account/management/authenticator.html">Account Security</a></li>
         | 
| 179 | 
            +
            <li><a href="https://us.battle.net/account/management/add-game.html">Add a Game</a></li>
         | 
| 180 | 
            +
            <li><a href="https://us.battle.net/account/management/redemption/redeem.html">Redeem Promo Codes</a></li>
         | 
| 181 | 
            +
            </ul>
         | 
| 182 | 
            +
            </div>
         | 
| 183 | 
            +
            <div class="column">
         | 
| 184 | 
            +
            <h3 class="support">
         | 
| 185 | 
            +
            <a href="http://us.battle.net/support/" tabindex="100">Support</a>
         | 
| 186 | 
            +
            </h3>
         | 
| 187 | 
            +
            <ul>
         | 
| 188 | 
            +
            <li><a href="http://us.battle.net/support/">Support Articles</a></li>
         | 
| 189 | 
            +
            <li><a href="https://us.battle.net/account/parental-controls/index.html">Parental Controls</a></li>
         | 
| 190 | 
            +
            <li><a href="http://us.battle.net/security/">Protect Your Account</a></li>
         | 
| 191 | 
            +
            <li><a href="http://us.battle.net/security/help">Help! I got hacked!</a></li>
         | 
| 192 | 
            +
            </ul>
         | 
| 193 | 
            +
            </div>
         | 
| 194 | 
            +
            <div id="footer-promotions">
         | 
| 195 | 
            +
            <div class="sidebar-content"></div>
         | 
| 196 | 
            +
            <div id="sidebar-marketing" class="sidebar-module">
         | 
| 197 | 
            +
            <div class="bnet-offer">
         | 
| 198 | 
            +
            <!-- -->
         | 
| 199 | 
            +
            <div class="bnet-offer-bg">
         | 
| 200 | 
            +
            <a href="https://us.battle.net/account/activation/landing.html?product=S2&key&purchase" target="_blank" id="ad5207109" class="bnet-offer-image" onclick="BnetAds.trackEvent('5207109', 'SCIIdig', 'sc2', true);">
         | 
| 201 | 
            +
            <img src="http://us.media2.battle.net/cms/ad_300x100/ZNB918LXVJ251309281567042.jpg" width="300" height="100" alt=""/>
         | 
| 202 | 
            +
            </a>
         | 
| 203 | 
            +
            </div>
         | 
| 204 | 
            +
            <script type="text/javascript">
         | 
| 205 | 
            +
            //<![CDATA[
         | 
| 206 | 
            +
            if(typeof (BnetAds.addEvent) != "undefined" )
         | 
| 207 | 
            +
            BnetAds.addEvent(window, 'load', function(){ BnetAds.trackEvent('5207109', 'SCIIdig', 'sc2'); } );
         | 
| 208 | 
            +
            else
         | 
| 209 | 
            +
            BnetAds.trackEvent('5207109', 'SCIIdig', 'sc2');
         | 
| 210 | 
            +
            //]]>
         | 
| 211 | 
            +
            </script>
         | 
| 212 | 
            +
            </div>
         | 
| 213 | 
            +
            </div>
         | 
| 214 | 
            +
            </div>
         | 
| 215 | 
            +
            <span class="clear"><!-- --></span>
         | 
| 216 | 
            +
            </div>
         | 
| 217 | 
            +
            <div id="copyright">
         | 
| 218 | 
            +
            <a href="javascript:;" tabindex="100" id="change-language">
         | 
| 219 | 
            +
            <span>Americas - English (US)</span>
         | 
| 220 | 
            +
            </a>
         | 
| 221 | 
            +
            <span>©2012 Blizzard Entertainment, Inc. All rights reserved</span>
         | 
| 222 | 
            +
            <a onclick="return Core.open(this);" href="http://us.blizzard.com/company/about/termsofuse.html" tabindex="100">Terms of Use</a>
         | 
| 223 | 
            +
            <a onclick="return Core.open(this);" href="http://us.blizzard.com/company/legal/" tabindex="100">Legal</a>
         | 
| 224 | 
            +
            <a onclick="return Core.open(this);" href="http://us.blizzard.com/company/about/privacy.html" tabindex="100">Privacy Policy</a>
         | 
| 225 | 
            +
            <a onclick="return Core.open(this);" href="http://us.blizzard.com/company/about/infringementnotice.html" tabindex="100">Copyright Infringement</a>
         | 
| 226 | 
            +
            </div>
         | 
| 227 | 
            +
            <div id="international"></div>
         | 
| 228 | 
            +
            <div id="legal">
         | 
| 229 | 
            +
            <div id="legal-ratings" class="png-fix">
         | 
| 230 | 
            +
            <a class="truste-link" href="//privacy-policy.truste.com/click-with-confidence/ctv/en/us.battle.net/seal_m" target="_blank">
         | 
| 231 | 
            +
            <img class="legal-image" src="//privacy-policy.truste.com/certified-seal/wps/en/us.battle.net/seal_m.png" alt="Validate TRUSTe privacy certification"/>
         | 
| 232 | 
            +
            </a>
         | 
| 233 | 
            +
            <a href="http://www.esrb.org/ratings/ratings_guide.jsp" onclick="return Core.open(this);">
         | 
| 234 | 
            +
            <img class="legal-image" alt="" src="/sc2/static/local-common/images/legal/us/esrb-teen-sc2.png" />
         | 
| 235 | 
            +
            </a>
         | 
| 236 | 
            +
            </div>
         | 
| 237 | 
            +
            <div id="blizzard" class="png-fix">
         | 
| 238 | 
            +
            <a href="http://blizzard.com" tabindex="100"><img src="/sc2/static/local-common/images/logos/blizz-sc2.png" alt="" /></a>
         | 
| 239 | 
            +
            </div>
         | 
| 240 | 
            +
            <span class="clear"><!-- --></span>
         | 
| 241 | 
            +
            </div>
         | 
| 242 | 
            +
            </div>
         | 
| 243 | 
            +
            <div id="service">
         | 
| 244 | 
            +
            <ul class="service-bar">
         | 
| 245 | 
            +
            <li class="service-cell service-home"><a href="http://us.battle.net/" tabindex="50" accesskey="1" title="Battle.net Home"> </a></li>
         | 
| 246 | 
            +
            <li class="service-cell service-welcome">
         | 
| 247 | 
            +
            <a href="?login" onclick="return Login.open()">Log in</a> or <a href="https://us.battle.net/account/creation/tos.html">Create an Account</a>
         | 
| 248 | 
            +
            </li>
         | 
| 249 | 
            +
            <li class="service-cell service-account"><a href="https://us.battle.net/account/management/" class="service-link" tabindex="50" accesskey="3">Account</a></li>
         | 
| 250 | 
            +
            <li class="service-cell service-support service-support-enhanced">
         | 
| 251 | 
            +
            <a href="#support" class="service-link service-link-dropdown" tabindex="50" accesskey="4" id="support-link" onclick="return false" style="cursor: progress" rel="javascript">Support<span class="no-support-tickets" id="support-ticket-count"></span></a>
         | 
| 252 | 
            +
            <div class="support-menu" id="support-menu" style="display:none;">
         | 
| 253 | 
            +
            <div class="support-primary">
         | 
| 254 | 
            +
            <ul class="support-nav">
         | 
| 255 | 
            +
            <li>
         | 
| 256 | 
            +
            <a href="http://us.battle.net/support/" tabindex="55" class="support-category">
         | 
| 257 | 
            +
            <strong class="support-caption">Knowledge Center</strong>
         | 
| 258 | 
            +
            Browse our support articles
         | 
| 259 | 
            +
            </a>
         | 
| 260 | 
            +
            </li>
         | 
| 261 | 
            +
            <li>
         | 
| 262 | 
            +
            <a href="https://us.battle.net/support/ticket/status" tabindex="55" class="support-category">
         | 
| 263 | 
            +
            <strong class="support-caption">Your Support Tickets</strong>
         | 
| 264 | 
            +
            View your active tickets (login required).
         | 
| 265 | 
            +
            </a>
         | 
| 266 | 
            +
            </li>
         | 
| 267 | 
            +
            </ul>
         | 
| 268 | 
            +
            <span class="clear"><!-- --></span>
         | 
| 269 | 
            +
            </div>
         | 
| 270 | 
            +
            <div class="support-secondary"></div>
         | 
| 271 | 
            +
            <!--[if IE 6]> <iframe id="support-shim" src="javascript:false;" frameborder="0" scrolling="no" style="display: block; position: absolute; top: 0; left: 9px; width: 297px; height: 400px; z-index: -1;"></iframe>
         | 
| 272 | 
            +
            <script type="text/javascript">
         | 
| 273 | 
            +
            //<![CDATA[
         | 
| 274 | 
            +
            (function(){
         | 
| 275 | 
            +
            var doc = document;
         | 
| 276 | 
            +
            var shim = doc.getElementById('support-shim');
         | 
| 277 | 
            +
            shim.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
         | 
| 278 | 
            +
            shim.style.display = 'block';
         | 
| 279 | 
            +
            })();
         | 
| 280 | 
            +
            //]]>
         | 
| 281 | 
            +
            </script>
         | 
| 282 | 
            +
            <![endif]-->
         | 
| 283 | 
            +
            </div>
         | 
| 284 | 
            +
            </li>
         | 
| 285 | 
            +
            <li class="service-cell service-explore">
         | 
| 286 | 
            +
            <a href="#explore" tabindex="50" accesskey="5" class="dropdown" id="explore-link" onclick="return false" style="cursor: progress" rel="javascript">Explore</a>
         | 
| 287 | 
            +
            <div class="explore-menu" id="explore-menu" style="display:none;">
         | 
| 288 | 
            +
            <div class="explore-primary">
         | 
| 289 | 
            +
            <ul class="explore-nav">
         | 
| 290 | 
            +
            <li>
         | 
| 291 | 
            +
            <a href="http://us.battle.net/" tabindex="55" data-label="Home">
         | 
| 292 | 
            +
            <strong class="explore-caption">Battle.net Home</strong>
         | 
| 293 | 
            +
            Connect. Play. Unite.
         | 
| 294 | 
            +
            </a>
         | 
| 295 | 
            +
            </li>
         | 
| 296 | 
            +
            <li>
         | 
| 297 | 
            +
            <a href="https://us.battle.net/account/management/" tabindex="55" data-label="Account">
         | 
| 298 | 
            +
            <strong class="explore-caption">Account</strong>
         | 
| 299 | 
            +
            Manage your Account
         | 
| 300 | 
            +
            </a>
         | 
| 301 | 
            +
            </li>
         | 
| 302 | 
            +
            <li>
         | 
| 303 | 
            +
            <a href="http://us.battle.net/support/" tabindex="55" data-label="Support">
         | 
| 304 | 
            +
            <strong class="explore-caption">Support</strong>
         | 
| 305 | 
            +
            Get Support and explore the knowledgebase.
         | 
| 306 | 
            +
            </a>
         | 
| 307 | 
            +
            </li>
         | 
| 308 | 
            +
            <li>
         | 
| 309 | 
            +
            <a href="https://us.battle.net/account/management/get-a-game.html" tabindex="55" data-label="Buy Games">
         | 
| 310 | 
            +
            <strong class="explore-caption">Buy Games</strong>
         | 
| 311 | 
            +
            Digital Games for Download
         | 
| 312 | 
            +
            </a>
         | 
| 313 | 
            +
            </li>
         | 
| 314 | 
            +
            </ul>
         | 
| 315 | 
            +
            <div class="explore-links">
         | 
| 316 | 
            +
            <h2 class="explore-caption">More</h2>
         | 
| 317 | 
            +
            <ul>
         | 
| 318 | 
            +
            <li><a href="http://us.battle.net/what-is/" tabindex="55" data-label="More">What is Battle.net?</a></li>
         | 
| 319 | 
            +
            <li><a href="https://us.battle.net/account/parental-controls/index.html" tabindex="55" data-label="More">Parental Controls</a></li>
         | 
| 320 | 
            +
            <li><a href="http://us.battle.net/security/" tabindex="55" data-label="More">Account Security</a></li>
         | 
| 321 | 
            +
            <li><a href="https://us.battle.net/account/management/add-game.html" tabindex="55" data-label="More">Add a Game</a></li>
         | 
| 322 | 
            +
            <li><a href="https://us.battle.net/account/support/password-reset.html" tabindex="55" data-label="More">Can’t log in?</a></li>
         | 
| 323 | 
            +
            <li><a href="https://us.battle.net/account/download/" tabindex="55" data-label="More">Game Client Downloads</a></li>
         | 
| 324 | 
            +
            <li><a href="https://us.battle.net/account/management/redemption/redeem.html" tabindex="55" data-label="More">Redeem Promo Codes</a></li>
         | 
| 325 | 
            +
            <li><a href="http://us.battle.net/games/classic" tabindex="55" data-label="More">Classic Games</a></li>
         | 
| 326 | 
            +
            </ul>
         | 
| 327 | 
            +
            </div>
         | 
| 328 | 
            +
            <span class="clear"><!-- --></span>
         | 
| 329 | 
            +
            <!--[if IE 6]> <iframe id="explore-shim" src="javascript:false;" frameborder="0" scrolling="no" style="display: block; position: absolute; top: 0; left: 9px; width: 409px; height: 400px; z-index: -1;"></iframe>
         | 
| 330 | 
            +
            <script type="text/javascript">
         | 
| 331 | 
            +
            //<![CDATA[
         | 
| 332 | 
            +
            (function(){
         | 
| 333 | 
            +
            var doc = document;
         | 
| 334 | 
            +
            var shim = doc.getElementById('explore-shim');
         | 
| 335 | 
            +
            shim.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
         | 
| 336 | 
            +
            shim.style.display = 'block';
         | 
| 337 | 
            +
            })();
         | 
| 338 | 
            +
            //]]>
         | 
| 339 | 
            +
            </script>
         | 
| 340 | 
            +
            <![endif]-->
         | 
| 341 | 
            +
            </div>
         | 
| 342 | 
            +
            <ul class="explore-secondary">
         | 
| 343 | 
            +
            <li class="explore-game explore-game-sc2">
         | 
| 344 | 
            +
            <a href="http://us.battle.net/sc2/" tabindex="55" data-label="Game - sc2">
         | 
| 345 | 
            +
            <span class="explore-game-inner">
         | 
| 346 | 
            +
            <strong class="explore-caption">StarCraft II™</strong>
         | 
| 347 | 
            +
            <span>News & Forums</span> <span>Beginner’s Guide</span> <span>Player Profiles</span>
         | 
| 348 | 
            +
            </span>
         | 
| 349 | 
            +
            </a>
         | 
| 350 | 
            +
            </li>
         | 
| 351 | 
            +
            <li class="explore-game explore-game-wow">
         | 
| 352 | 
            +
            <a href="http://us.battle.net/wow/" tabindex="55" data-label="Game - wow">
         | 
| 353 | 
            +
            <span class="explore-game-inner">
         | 
| 354 | 
            +
            <strong class="explore-caption">World of Warcraft™</strong>
         | 
| 355 | 
            +
            <span>Character Profiles</span> <span>News & Forums</span> <span>Game Guide</span>
         | 
| 356 | 
            +
            </span>
         | 
| 357 | 
            +
            </a>
         | 
| 358 | 
            +
            </li>
         | 
| 359 | 
            +
            <li class="explore-game explore-game-d3">
         | 
| 360 | 
            +
            <a href="http://us.battle.net/d3/" tabindex="55" data-label="Game - d3">
         | 
| 361 | 
            +
            <span class="explore-game-inner">
         | 
| 362 | 
            +
            <strong class="explore-caption">Diablo III™</strong>
         | 
| 363 | 
            +
            <span>Game Guide</span> <span>News</span> <span>Forums</span>
         | 
| 364 | 
            +
            </span>
         | 
| 365 | 
            +
            </a>
         | 
| 366 | 
            +
            </li>
         | 
| 367 | 
            +
            </ul>
         | 
| 368 | 
            +
            </div>
         | 
| 369 | 
            +
            </li>
         | 
| 370 | 
            +
            </ul>
         | 
| 371 | 
            +
            <div id="warnings-wrapper">
         | 
| 372 | 
            +
            <script type="text/javascript">
         | 
| 373 | 
            +
            //<![CDATA[
         | 
| 374 | 
            +
            $(function() {
         | 
| 375 | 
            +
            App.saveCookie('html5Warning');
         | 
| 376 | 
            +
            App.resetCookie('browserWarning');
         | 
| 377 | 
            +
            });
         | 
| 378 | 
            +
            //]]>
         | 
| 379 | 
            +
            </script>
         | 
| 380 | 
            +
            <!--[if lt IE 8]> <div id="browser-warning" class="warning warning-red">
         | 
| 381 | 
            +
            <div class="warning-inner2">
         | 
| 382 | 
            +
            You are using an outdated web browser.<br />
         | 
| 383 | 
            +
            <a href="http://us.blizzard.com/support/article/browserupdate">Upgrade</a> or <a href="http://www.google.com/chromeframe/?hl=en-US" id="chrome-frame-link">install Google Chrome Frame</a>.
         | 
| 384 | 
            +
            <a href="#close" class="warning-close" onclick="App.closeWarning('#browser-warning', 'browserWarning'); return false;"></a>
         | 
| 385 | 
            +
            </div>
         | 
| 386 | 
            +
            </div>
         | 
| 387 | 
            +
            <![endif]-->
         | 
| 388 | 
            +
            <!--[if lt IE 8]> <script type="text/javascript" src="/sc2/static/local-common/js/third-party/CFInstall.min.js?v42"></script>
         | 
| 389 | 
            +
            <script type="text/javascript">
         | 
| 390 | 
            +
            //<![CDATA[
         | 
| 391 | 
            +
            $(function() {
         | 
| 392 | 
            +
            var age = 365 * 24 * 60 * 60 * 1000;
         | 
| 393 | 
            +
            var src = 'https://www.google.com/chromeframe/?hl=en-US';
         | 
| 394 | 
            +
            if ('http:' == document.location.protocol) {
         | 
| 395 | 
            +
            src = 'http://www.google.com/chromeframe/?hl=en-US';
         | 
| 396 | 
            +
            }
         | 
| 397 | 
            +
            document.cookie = "disableGCFCheck=0;path=/;max-age="+age;
         | 
| 398 | 
            +
            $('#chrome-frame-link').bind({
         | 
| 399 | 
            +
            'click': function() {
         | 
| 400 | 
            +
            App.closeWarning('#browser-warning');
         | 
| 401 | 
            +
            CFInstall.check({
         | 
| 402 | 
            +
            mode: 'overlay',
         | 
| 403 | 
            +
            url: src
         | 
| 404 | 
            +
            });
         | 
| 405 | 
            +
            return false;
         | 
| 406 | 
            +
            }
         | 
| 407 | 
            +
            });
         | 
| 408 | 
            +
            });
         | 
| 409 | 
            +
            //]]>
         | 
| 410 | 
            +
            </script>
         | 
| 411 | 
            +
            <![endif]-->
         | 
| 412 | 
            +
            <noscript>
         | 
| 413 | 
            +
            <div id="javascript-warning" class="warning warning-red">
         | 
| 414 | 
            +
            <div class="warning-inner2">
         | 
| 415 | 
            +
            JavaScript must be enabled to use this site.
         | 
| 416 | 
            +
            </div>
         | 
| 417 | 
            +
            </div>
         | 
| 418 | 
            +
            </noscript>
         | 
| 419 | 
            +
            </div>
         | 
| 420 | 
            +
            </div>
         | 
| 421 | 
            +
            </div><script type="text/javascript" src="/sc2/static/local-common/js/search.js?v42"></script>
         | 
| 422 | 
            +
            <script type="text/javascript">
         | 
| 423 | 
            +
            //<![CDATA[
         | 
| 424 | 
            +
            var xsToken = '';
         | 
| 425 | 
            +
            var supportToken = '';
         | 
| 426 | 
            +
            var Msg = {
         | 
| 427 | 
            +
            support: {
         | 
| 428 | 
            +
            ticketNew: 'Ticket {0} was created.',
         | 
| 429 | 
            +
            ticketStatus: 'Ticket {0}’s status changed to {1}.',
         | 
| 430 | 
            +
            ticketOpen: 'Open',
         | 
| 431 | 
            +
            ticketAnswered: 'Answered',
         | 
| 432 | 
            +
            ticketResolved: 'Resolved',
         | 
| 433 | 
            +
            ticketCanceled: 'Canceled',
         | 
| 434 | 
            +
            ticketArchived: 'Archived',
         | 
| 435 | 
            +
            ticketInfo: 'Need Info',
         | 
| 436 | 
            +
            ticketAll: 'View All Tickets'
         | 
| 437 | 
            +
            },
         | 
| 438 | 
            +
            cms: {
         | 
| 439 | 
            +
            requestError: 'Your request cannot be completed.',
         | 
| 440 | 
            +
            ignoreNot: 'Not ignoring this user',
         | 
| 441 | 
            +
            ignoreAlready: 'Already ignoring this user',
         | 
| 442 | 
            +
            stickyRequested: 'Sticky requested',
         | 
| 443 | 
            +
            stickyHasBeenRequested: 'You have already sent a sticky request for this topic.',
         | 
| 444 | 
            +
            postAdded: 'Post added to tracker',
         | 
| 445 | 
            +
            postRemoved: 'Post removed from tracker',
         | 
| 446 | 
            +
            userAdded: 'User added to tracker',
         | 
| 447 | 
            +
            userRemoved: 'User removed from tracker',
         | 
| 448 | 
            +
            validationError: 'A required field is incomplete',
         | 
| 449 | 
            +
            characterExceed: 'The post body exceeds XXXXXX characters.',
         | 
| 450 | 
            +
            searchFor: "Search for",
         | 
| 451 | 
            +
            searchTags: "Articles tagged:",
         | 
| 452 | 
            +
            characterAjaxError: "You may have become logged out. Please refresh the page and try again.",
         | 
| 453 | 
            +
            ilvl: "Level {0}",
         | 
| 454 | 
            +
            shortQuery: "Search requests must be at least three characters long."
         | 
| 455 | 
            +
            },
         | 
| 456 | 
            +
            bml: {
         | 
| 457 | 
            +
            bold: 'Bold',
         | 
| 458 | 
            +
            italics: 'Italics',
         | 
| 459 | 
            +
            underline: 'Underline',
         | 
| 460 | 
            +
            list: 'Unordered List',
         | 
| 461 | 
            +
            listItem: 'List Item',
         | 
| 462 | 
            +
            quote: 'Quote',
         | 
| 463 | 
            +
            quoteBy: 'Posted by {0}',
         | 
| 464 | 
            +
            unformat: 'Remove Formating',
         | 
| 465 | 
            +
            cleanup: 'Fix Linebreaks',
         | 
| 466 | 
            +
            code: 'Code Blocks',
         | 
| 467 | 
            +
            item: 'WoW Item',
         | 
| 468 | 
            +
            itemPrompt: 'Item ID:',
         | 
| 469 | 
            +
            url: 'URL',
         | 
| 470 | 
            +
            urlPrompt: 'URL Address:'
         | 
| 471 | 
            +
            },
         | 
| 472 | 
            +
            ui: {
         | 
| 473 | 
            +
            submit: 'Submit',
         | 
| 474 | 
            +
            cancel: 'Cancel',
         | 
| 475 | 
            +
            reset: 'Reset',
         | 
| 476 | 
            +
            viewInGallery: 'View in gallery',
         | 
| 477 | 
            +
            loading: 'Loading…',
         | 
| 478 | 
            +
            unexpectedError: 'An error has occurred',
         | 
| 479 | 
            +
            fansiteFind: 'Find this on…',
         | 
| 480 | 
            +
            fansiteFindType: 'Find {0} on…',
         | 
| 481 | 
            +
            fansiteNone: 'No fansites available.'
         | 
| 482 | 
            +
            },
         | 
| 483 | 
            +
            grammar: {
         | 
| 484 | 
            +
            colon: '{0}:',
         | 
| 485 | 
            +
            first: 'First',
         | 
| 486 | 
            +
            last: 'Last'
         | 
| 487 | 
            +
            },
         | 
| 488 | 
            +
            fansite: {
         | 
| 489 | 
            +
            achievement: 'achievement',
         | 
| 490 | 
            +
            character: 'character',
         | 
| 491 | 
            +
            faction: 'faction',
         | 
| 492 | 
            +
            'class': 'class',
         | 
| 493 | 
            +
            object: 'object',
         | 
| 494 | 
            +
            talentcalc: 'talents',
         | 
| 495 | 
            +
            skill: 'profession',
         | 
| 496 | 
            +
            quest: 'quest',
         | 
| 497 | 
            +
            spell: 'spell',
         | 
| 498 | 
            +
            event: 'event',
         | 
| 499 | 
            +
            title: 'title',
         | 
| 500 | 
            +
            arena: 'arena team',
         | 
| 501 | 
            +
            guild: 'guild',
         | 
| 502 | 
            +
            zone: 'zone',
         | 
| 503 | 
            +
            item: 'item',
         | 
| 504 | 
            +
            race: 'race',
         | 
| 505 | 
            +
            npc: 'NPC',
         | 
| 506 | 
            +
            pet: 'pet'
         | 
| 507 | 
            +
            },
         | 
| 508 | 
            +
            search: {
         | 
| 509 | 
            +
            kb: 'Support',
         | 
| 510 | 
            +
            post: 'Forums',
         | 
| 511 | 
            +
            article: 'Blog Articles',
         | 
| 512 | 
            +
            static: 'General Content',
         | 
| 513 | 
            +
            wowcharacter: 'Characters',
         | 
| 514 | 
            +
            wowitem: 'Items',
         | 
| 515 | 
            +
            wowguild: 'Guilds',
         | 
| 516 | 
            +
            wowarenateam: 'Arena Teams',
         | 
| 517 | 
            +
            url: 'Suggested Links',
         | 
| 518 | 
            +
            other: 'Other'
         | 
| 519 | 
            +
            }
         | 
| 520 | 
            +
            };
         | 
| 521 | 
            +
            //]]>
         | 
| 522 | 
            +
            </script>
         | 
| 523 | 
            +
            <script type="text/javascript">
         | 
| 524 | 
            +
            //<![CDATA[
         | 
| 525 | 
            +
            Core.load("/sc2/static/local-common/js/third-party/jquery-ui-1.8.6.custom.min.js?v42");
         | 
| 526 | 
            +
            Core.load("/sc2/static/local-common/js/login.js?v42", false, function() {
         | 
| 527 | 
            +
            Login.embeddedUrl = 'https://us.battle.net/login/login.frag';
         | 
| 528 | 
            +
            });
         | 
| 529 | 
            +
            //]]>
         | 
| 530 | 
            +
            </script>
         | 
| 531 | 
            +
            <script type="text/javascript" src="/sc2/static/local-common/js/menu.js?v42"></script>
         | 
| 532 | 
            +
            <script type="text/javascript" src="/sc2/static/js/sc2.js?v21"></script>
         | 
| 533 | 
            +
            <script type="text/javascript">
         | 
| 534 | 
            +
            //<![CDATA[
         | 
| 535 | 
            +
            $(function(){
         | 
| 536 | 
            +
            Menu.initialize('/data/menu.json?v42');
         | 
| 537 | 
            +
            Tooltip.options.useTable = true;
         | 
| 538 | 
            +
            });
         | 
| 539 | 
            +
            //]]>
         | 
| 540 | 
            +
            </script>
         | 
| 541 | 
            +
            <!--[if lt IE 8]> <script type="text/javascript" src="/sc2/static/local-common/js/third-party/jquery.pngFix.pack.js?v42"></script>
         | 
| 542 | 
            +
            <script type="text/javascript">
         | 
| 543 | 
            +
            //<![CDATA[
         | 
| 544 | 
            +
            $('.png-fix').pngFix(); //]]>
         | 
| 545 | 
            +
            </script>
         | 
| 546 | 
            +
            <![endif]-->
         | 
| 547 | 
            +
            <script type="text/javascript">
         | 
| 548 | 
            +
            //<![CDATA[
         | 
| 549 | 
            +
            (function() {
         | 
| 550 | 
            +
            var ga = document.createElement('script');
         | 
| 551 | 
            +
            var src = "https://ssl.google-analytics.com/ga.js";
         | 
| 552 | 
            +
            if ('http:' == document.location.protocol) {
         | 
| 553 | 
            +
            src = "http://www.google-analytics.com/ga.js";
         | 
| 554 | 
            +
            }
         | 
| 555 | 
            +
            ga.type = 'text/javascript';
         | 
| 556 | 
            +
            ga.setAttribute('async', 'true');
         | 
| 557 | 
            +
            ga.src = src;
         | 
| 558 | 
            +
            var s = document.getElementsByTagName('script');
         | 
| 559 | 
            +
            s = s[s.length-1];
         | 
| 560 | 
            +
            s.parentNode.insertBefore(ga, s.nextSibling);
         | 
| 561 | 
            +
            })();
         | 
| 562 | 
            +
            //]]>
         | 
| 563 | 
            +
            </script>
         | 
| 564 | 
            +
            </body>
         | 
| 565 | 
            +
            </html>
         | 
| @@ -6,8 +6,13 @@ league_html       = File.read File.dirname(__FILE__) + '/league.html' | |
| 6 6 | 
             
            achievements_html = File.read File.dirname(__FILE__) + '/achievements.html'
         | 
| 7 7 | 
             
            matches_html      = File.read File.dirname(__FILE__) + '/matches.html'
         | 
| 8 8 | 
             
            status_html       = File.read File.dirname(__FILE__) + '/status.html'
         | 
| 9 | 
            +
            failure_html      = File.read File.dirname(__FILE__) + '/failure.html'
         | 
| 9 10 |  | 
| 10 11 | 
             
            FakeWeb.allow_net_connect = false
         | 
| 12 | 
            +
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/', body: failure_html, status: 404, content_type: 'text/html'
         | 
| 13 | 
            +
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/achievements/', body: failure_html, status: 404, content_type: 'text/html'
         | 
| 14 | 
            +
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/leagues/12345', body: failure_html, status: 404, content_type: 'text/html'
         | 
| 15 | 
            +
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/SomeDude/matches', body: failure_html, status: 404, content_type: 'text/html'
         | 
| 11 16 | 
             
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/Demon/', body: profile_html, status: 200, content_type: 'text/html'
         | 
| 12 17 | 
             
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/Demon/ladder/leagues', body: leagues_html, status: 200, content_type: 'text/html'
         | 
| 13 18 | 
             
            FakeWeb.register_uri :get, 'http://us.battle.net/sc2/en/profile/2377239/1/Demon/ladder/12345',   body: league_html, status: 200, content_type: 'text/html'
         | 
    
        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.0 | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012- | 
| 12 | 
            +
            date: 2012-07-06 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: nokogiri
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70185550262400 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,21 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *70185550262400
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: faraday
         | 
| 27 | 
            +
              requirement: &70185550260120 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ! '>='
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: '0'
         | 
| 33 | 
            +
              type: :runtime
         | 
| 34 | 
            +
              prerelease: false
         | 
| 35 | 
            +
              version_requirements: *70185550260120
         | 
| 25 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 37 | 
             
              name: rake
         | 
| 27 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70185550258180 !ruby/object:Gem::Requirement
         | 
| 28 39 | 
             
                none: false
         | 
| 29 40 | 
             
                requirements:
         | 
| 30 41 | 
             
                - - ! '>='
         | 
| @@ -32,10 +43,10 @@ dependencies: | |
| 32 43 | 
             
                    version: '0'
         | 
| 33 44 | 
             
              type: :development
         | 
| 34 45 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *70185550258180
         | 
| 36 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 48 | 
             
              name: rspec
         | 
| 38 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70185550256120 !ruby/object:Gem::Requirement
         | 
| 39 50 | 
             
                none: false
         | 
| 40 51 | 
             
                requirements:
         | 
| 41 52 | 
             
                - - ! '>='
         | 
| @@ -43,10 +54,10 @@ dependencies: | |
| 43 54 | 
             
                    version: '0'
         | 
| 44 55 | 
             
              type: :development
         | 
| 45 56 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70185550256120
         | 
| 47 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 59 | 
             
              name: fakeweb
         | 
| 49 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70185550254960 !ruby/object:Gem::Requirement
         | 
| 50 61 | 
             
                none: false
         | 
| 51 62 | 
             
                requirements:
         | 
| 52 63 | 
             
                - - ! '>='
         | 
| @@ -54,7 +65,7 @@ dependencies: | |
| 54 65 | 
             
                    version: '0'
         | 
| 55 66 | 
             
              type: :development
         | 
| 56 67 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70185550254960
         | 
| 58 69 | 
             
            description: BnetScraper is a Nokogiri-based scraper of Battle.net profile information.
         | 
| 59 70 | 
             
              Currently this only includes Starcraft2.
         | 
| 60 71 | 
             
            email:
         | 
| @@ -66,6 +77,7 @@ files: | |
| 66 77 | 
             
            - .gitignore
         | 
| 67 78 | 
             
            - .rspec
         | 
| 68 79 | 
             
            - .travis.yml
         | 
| 80 | 
            +
            - CHANGELOG.md
         | 
| 69 81 | 
             
            - Gemfile
         | 
| 70 82 | 
             
            - LICENSE
         | 
| 71 83 | 
             
            - README.md
         | 
| @@ -89,6 +101,7 @@ files: | |
| 89 101 | 
             
            - spec/starcraft2/status_scraper_spec.rb
         | 
| 90 102 | 
             
            - spec/starcraft2_spec.rb
         | 
| 91 103 | 
             
            - spec/support/achievements.html
         | 
| 104 | 
            +
            - spec/support/failure.html
         | 
| 92 105 | 
             
            - spec/support/league.html
         | 
| 93 106 | 
             
            - spec/support/leagues.html
         | 
| 94 107 | 
             
            - spec/support/load_fakeweb.rb
         | 
| @@ -110,7 +123,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 110 123 | 
             
                  version: '0'
         | 
| 111 124 | 
             
                  segments:
         | 
| 112 125 | 
             
                  - 0
         | 
| 113 | 
            -
                  hash:  | 
| 126 | 
            +
                  hash: 2368035120879927355
         | 
| 114 127 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 115 128 | 
             
              none: false
         | 
| 116 129 | 
             
              requirements:
         | 
| @@ -119,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 119 132 | 
             
                  version: '0'
         | 
| 120 133 | 
             
                  segments:
         | 
| 121 134 | 
             
                  - 0
         | 
| 122 | 
            -
                  hash:  | 
| 135 | 
            +
                  hash: 2368035120879927355
         | 
| 123 136 | 
             
            requirements: []
         | 
| 124 137 | 
             
            rubyforge_project: 
         | 
| 125 138 | 
             
            rubygems_version: 1.8.17
         | 
| @@ -136,6 +149,7 @@ test_files: | |
| 136 149 | 
             
            - spec/starcraft2/status_scraper_spec.rb
         | 
| 137 150 | 
             
            - spec/starcraft2_spec.rb
         | 
| 138 151 | 
             
            - spec/support/achievements.html
         | 
| 152 | 
            +
            - spec/support/failure.html
         | 
| 139 153 | 
             
            - spec/support/league.html
         | 
| 140 154 | 
             
            - spec/support/leagues.html
         | 
| 141 155 | 
             
            - spec/support/load_fakeweb.rb
         |