module BadgeCommands::BadgeCommands_ClassMethods

Public Instance Methods

sets_count(steamid, use_nonmarketable = true) click to toggle source
# File lib/Badge.rb, line 223
def sets_count(steamid, use_nonmarketable = true)




      steamid,token = verify_profileid_or_trade_link_or_steamid(steamid)

      hash = raw_get_inventory(steamid)
      sorted = {}
      classxinstance = {}

      hash["descriptions"].delete_if {|desc|
            conc = desc["classid"] + "_" +  desc["instanceid"]
            classxinstance[conc] = desc
            true
      }



      hash["assets"].each { |asset|
            identity = asset["classid"] + "_" + asset["instanceid"]
            assetdesc = classxinstance[identity]
            if use_nonmarketable == false
                  if assetdesc["marketable"] == 0 || assetdesc["tags"][-1]["localized_tag_name"] != "Trading Card" || assetdesc["tags"][-2]["localized_tag_name"] == "Foil"
                        next
                  end
            else
                  if  assetdesc["tags"][-1]["localized_tag_name"] != "Trading Card" ||assetdesc["tags"][-2]["localized_tag_name"] == "Foil"
                        next
                  end
            end

            name = assetdesc["name"].sub(" (Trading Card)", "")
            appid =assetdesc["market_fee_app"].to_s
            if sorted.has_key?(appid) == true
                  if sorted[appid].has_key?(name) == true
                        sorted[appid][name] = sorted[appid][name] + 1
                  elsif sorted[appid].has_key?(name) == false
                        sorted[appid][name] = 1
                  end
            elsif sorted.has_key?(appid) == false
                  sorted[appid] = {}
                  sorted[appid][name] = 1
            end
      }

      bigdata = JSON.parse(File.read("#{@@libdir}blueprints/byappid.json",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))

      counted = {}

      sorted.each { |appid,cards|
            begin
                  counted[appid.to_s] = bigdata[appid].merge(cards)
            rescue
                  output "badges blueprint does not include #{appid}"
            end
      }

      counted.each { |appid, cards|
            cards.delete_if { |key,value|
                  key == 'title'
            }
      }
      setsowned = {}
      numberofsets = 0
      total_non_foil = 0

      counted.each { |appid,cards|
            lowest = 9999
            cards.each { |cardname, amount|
                        next if amount.class == String # apptitle
                        if amount < lowest then lowest = amount end
                        total_non_foil =  total_non_foil + amount
            }
            setsowned[appid.to_s] = lowest
            numberofsets = numberofsets + lowest
      }

      persona = ''
      write_badges(counted,setsowned,numberofsets,total_non_foil, use_nonmarketable,persona,steamid)
      if use_nonmarketable == false
            return {'sets' => counted, 'appxsets' => setsowned, 'totalsets' => numberofsets, 'totalcards' => total_non_foil, 'marketable' => false}
      else
             return {'sets' => counted, 'appxsets' => setsowned, 'totalsets' => numberofsets, 'totalcards' => total_non_foil, 'marketable' => true}
      end
end
update_blueprint() click to toggle source
# File lib/Badge.rb, line 313
def update_blueprint()
      session = Mechanize.new

      session.pre_connect_hooks << lambda do |agent, request|
         request['Origin'] = 'http://steam.tools'
         request['Referer'] = 'http://steam.tools/cards/'
         request['User-Agent'] ='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.99'
       end


      pag = session.get('http://cdn.steam.tools/data/set_data.json')
      data = JSON.parse(pag.content)
      old = JSON.parse(File.read("#{@@libdir}blueprints/byappid.json" ,:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))

      newapps = []
      data["sets"].each { |set|
            newapps << set['appid']
      }
      get = []
      haveapps = old.keys
      newapps.each { |app|
            get << app if haveapps.include?(app) == false
      }

      progress = 0
      error = 0
      (output("your blueprint is up-to-date");return) if get.length.zero?
      get.each {|app|
            begin
                  card = {}
                  steam_nokogiri = Nokogiri::HTML(session.get("http://www.steamcardexchange.net/index.php?inventorygame-appid-#{app}").content)
                  title = steam_nokogiri.css('h2[class=empty]').text.force_encoding(Encoding::UTF_8)
                  steam_nokogiri.css('div[class=name-image-container]').css('span').each do |e|
                        card[e.text.force_encoding(Encoding::UTF_8)] = 0
                  end
                  card['title'] = title
                  full_data = card

                  old[app] = full_data
                  File.open("#{@@libdir}blueprints/byappid.json", 'w:UTF-8') {|f| f.puts old.to_json}

                  progress = progress + 1
                  output "#{progress} / #{get.length} done, error = #{error}"
            rescue Exception => e
                  File.open("#{@@libdir}blueprints/byappid.json", 'w:UTF-8') {|f| f.puts old.to_json}
                  error = error + 1
                  progress = progress + 1
                  output "#{progress} / #{get.length} done, error = #{error}"
                  output "error occured saved data"
                  raise e
            end
      }


end

Private Instance Methods

write_badges(hashofcards,eachappidsets,totalsets,total_non_foil,use_nonmarketable,persona,steamid) click to toggle source
# File lib/Badge.rb, line 374
def write_badges(hashofcards,eachappidsets,totalsets,total_non_foil,use_nonmarketable,persona,steamid)
      if persona == ''
            filename = steamid
      else
            filename = persona
      end


       bigdata = JSON.parse(File.read("#{@@libdir}blueprints/byappid.json",:external_encoding => 'utf-8',:internal_encoding => 'utf-8'))
      eachappidsets = eachappidsets.sort_by do |k,v|
        v
      end
      eachappidsets.reverse!
      output "Writing the badges to #{filename}_badges.txt "
      text = []
      text << "for #{persona}(#{steamid})"
      if use_nonmarketable == false
            text << "only marketable cards are counted"
            text << "total non-foil trading cards #{total_non_foil}"
      else
            text << "total non-foil trading cards #{total_non_foil}"
            text << "all cards counted including non-marketable"
      end


      text << "total sets in target account #{totalsets}"
      text << ""
      text << ""
      eachappidsets.each { |appid, sets|
            w_title = bigdata[appid]['title']
            text << "             #{w_title}, sets = #{sets}, appid = #{appid}"
            hashofcards[appid].each { |cardname, owned|
                  next if !owned.is_a?(Numeric)
                  text << "#{cardname} xxx #{owned}"
            }
            text << ""
            text << ""
      }
      File.open("./#{filename}_badges.txt",'w:UTF-8') {|f| f.puts text}
      output "badges.txt has been created"
end