koraktor / steam-condenser

A multi-language library for querying the Steam Community, Source, GoldSrc servers and Steam master servers
https://koraktor.de/steam-condenser
Other
356 stars 67 forks source link

XML data could not be parsed for certain Steam_ID's #238

Closed natevick closed 10 years ago

natevick commented 10 years ago

I get the following type of error for only certain Steam_ID's.

irb(main):004:0> id.fetch_games
SteamCondenserError: XML data could not be parsed: #<REXML::ParseException: Missing end tag for 'script' (got "head")
Line: 44
Position: 3575
Last 80 unconsumed characters:
>
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/rexml/parsers/baseparser.rb:338:in `pull_event'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/rexml/parsers/baseparser.rb:183:in `pull'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/rexml/parsers/treeparser.rb:22:in `parse'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/rexml/document.rb:283:in `build'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/rexml/document.rb:43:in `initialize'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/rexml.rb:14:in `new'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/multi_xml-0.5.5/lib/multi_xml/parsers/rexml.rb:14:in `parse'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/multi_xml-0.5.5/lib/multi_xml.rb:138:in `parse'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/steam-condenser-1.3.8/lib/steam/community/xml_data.rb:22:in `parse'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/steam-condenser-1.3.8/lib/steam/community/steam_id.rb:322:in `fetch_games'
(irb):4:in `irb_binding'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/workspace.rb:86:in `eval'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/workspace.rb:86:in `evaluate'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/context.rb:380:in `evaluate'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:492:in `block (2 levels) in eval_input'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:624:in `signal_status'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:489:in `block in eval_input'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/ruby-lex.rb:247:in `block (2 levels) in each_top_level_statement'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `loop'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/ruby-lex.rb:233:in `block in each_top_level_statement'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `catch'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb/ruby-lex.rb:232:in `each_top_level_statement'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:488:in `eval_input'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:397:in `block in start'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:396:in `catch'
/Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/2.0.0/irb.rb:396:in `start'
/Users/nvick/.rbenv/versions/2.0.0-p353/bin/irb:12:in `<main>'
...
Missing end tag for 'script' (got "head")
Line: 44
Position: 3575
Last 80 unconsumed characters:

Line: 44
Position: 3575
Last 80 unconsumed characters:

    from /Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/steam-condenser-1.3.8/lib/steam/community/xml_data.rb:24:in `rescue in parse'
    from /Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/steam-condenser-1.3.8/lib/steam/community/xml_data.rb:21:in `parse'
    from /Users/nvick/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/steam-condenser-1.3.8/lib/steam/community/steam_id.rb:322:in `fetch_games'
    from (irb):4
    from /Users/nvick/.rbenv/versions/2.0.0-p353/bin/irb:12:in `<main>'
koraktor commented 10 years ago

Seems like Valve is providing broken data. Do you have a SteamID or profile name that causes this problem?

natevick commented 10 years ago

This one will do it.

natron99

koraktor commented 10 years ago

That profile is private. So you won't be able to retrieve the games of this player. It is more safe to check id.public? first.

Or you might have a look at the master branch which already uses Steam's Web API to get the games. This will probably give you better error messages in such cases.

natevick commented 10 years ago

Ok, I was wonder if that was the issue. Great, I'll check it out.