lib/wowr.rb in renchap-wowr-0.5.1 vs lib/wowr.rb in renchap-wowr-0.5.3

- old
+ new

@@ -1,11 +1,11 @@ # # Wowr - Ruby library for the World of Warcraft Armory # http://wowr.rubyforge.org/ # Written by Ben Humphreys # http://benhumphreys.co.uk/ -# Matained By Peter Wood +# Maintained By Peter Wood # http://narwar.net/ # # Author:: Ben Humphreys # Author:: Peter Wood @@ -297,32 +297,36 @@ raise Wowr::Exceptions::RealmNotSet.new end xml = get_xml(@@guild_info_url, options) - if (xml%'guildKey') && !(xml%'guildInfo').children.empty? + if !(xml%'guildInfo').children.empty? return Wowr::Classes::FullGuild.new(xml) else raise Wowr::Exceptions::GuildNotFound.new(options[:guild_name]) end end # Search for items with the specified name. # Returns an array of Wowr::Classes::SearchItem. # Searches across all realms. + # Can search for items based upon the following options => :source, :dungeon, :item_type ("armor, weapon, etc"), :item_slot (head, shoulders, etc), and :item_sub_type (leather, mail, etc) + # The dungeon param is the dungeon ID # Caching is disabled for searching. # * name (String) Name of the item - # * options (Hash) Optional hash of arguments identical to those used in the API constructor (realm, debug, cache etc.) + # * options (Hash) Optional hash of arguments identical to those used in the API constructor (realm, debug, cache etc.). def search_items(name, options = {}) if (name.is_a?(Hash)) options = name else options.merge!(:search => name) end options.merge!(:type => @@search_types[:item]) + + puts options.inspect if options[:debug] return search(options) end # Get the full item details (Wowr::Classes::FullItem) with the given id. @@ -461,20 +465,22 @@ # Note that the bags and items the user can see is dependent on their privileges. # Requires realm. # * cookie (String) Cookie data returned by the login function. # * guild_name (String) Guild name # * options (Hash) Optional hash of arguments identical to those used in the API constructor (realm, debug, cache etc.) - def get_guild_bank_contents(cookie, guild_name = @guild_name, options = {}) + def get_guild_bank_contents(cookie, name = @guild_name, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (guild_name.is_a?(Hash)) options = guild_name - options.merge!(:cookie => cookie) - options.merge!(:guild_name => @guild_name) + options.merge!(:cookie => full_cookie) + options.merge!(:guild_name => name) else - options.merge!(:cookie => cookie) - options.merge!(:guild_name => guild_name) + options.merge!(:cookie => full_cookie) + options.merge!(:guild_name => name) end options = merge_defaults(options) if options[:cookie].nil? || options[:cookie] == "" raise Wowr::Exceptions::CookieNotSet.new @@ -502,18 +508,20 @@ # Requires realm. # * cookie (String) Cookie data returned by the login function # * guild_name (String) Guild name # * options (Hash) Optional hash of arguments identical to those used in the API constructor (realm, debug, cache etc.) def get_guild_bank_log(cookie, name = @guild_name, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) - options.merge!(:guild_name => @guild_name) + options.merge!(:cookie => full_cookie) + options.merge!(:guild_name => name) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:guild_name => name) end options = merge_defaults(options) @@ -536,24 +544,26 @@ end end def get_complete_world_calendar(cookie, name = @character_name, realm = @realm, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (realm.is_a?(Hash)) options = realm - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => @realm) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => realm) end options = merge_defaults(options) @@ -570,24 +580,26 @@ return events end def get_world_calendar(cookie, name = @character_name, realm = @realm, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (realm.is_a?(Hash)) options = realm - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => @realm) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => realm) end options = merge_defaults(options) @@ -616,25 +628,27 @@ return events end - def get_full_user_calendar(cookie, name = @character_name, realm = @realm, options = {}) + def get_full_user_calendar(cookie, name = @character_name, realm = @realm, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (realm.is_a?(Hash)) options = realm - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => @realm) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => realm) end options = merge_defaults(options) @@ -652,24 +666,26 @@ return full_events end def get_user_calendar(cookie, name = @character_name, realm = @realm, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (realm.is_a?(Hash)) options = realm - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => @realm) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:character_name => name) options.merge!(:realm => realm) end options = merge_defaults(options) @@ -699,32 +715,34 @@ return events end def get_calendar_event (cookie, event = nil, name = @character_name, realm = @realm, options = {}) + full_cookie = ' JSESSIONID='+cookie + if (cookie.is_a?(Hash)) - options = cookie + options = full_cookie elsif (event.is_a?(Hash)) options = event - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:event => nil) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (name.is_a?(Hash)) options = name - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:event => event) options.merge!(:character_name => @character_name) options.merge!(:realm => @realm) elsif (realm.is_a?(Hash)) options = realm - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:event => event) options.merge!(:character_name => name) options.merge!(:realm => @realm) else - options.merge!(:cookie => cookie) + options.merge!(:cookie => full_cookie) options.merge!(:event => event) options.merge!(:character_name => name) options.merge!(:realm => realm) end @@ -904,11 +922,11 @@ authentication_url += "&ref=http://#{@locale}.wowarmory.com/index.xml" end # All we need to do is goto the armory login page passing our long life cookie, we should get 302 instantly. stage1 = login_http(authentication_url, true, { @@persistant_cookie => long_life_cookie }) - + # Let's see if (stage1.code == "200") # It's no good, our cookie doesn't work anymore. raise Wowr::Exceptions::InvalidLoginDetails elsif (stage1.code == "302") @@ -1033,16 +1051,23 @@ # TODO: Tidy up? def get_file(url, options = {}) # better way of doing this? # Map custom keys to the HTTP request values + # TODO add handles for searching based upon stats reqs = { :character_name => 'n', + :source => "fl[source]", # dungeon, badges, arena, etc + :dungeon => "fl[dungeon]", # seems it needs the dungeons id rather than name + :difficulty => "fl[difficulty]", # normal, heroic, etc + :item_type => "fl[type]", # weapon, armor, trinket, etc + :item_slot => "fl[slot]", # head, shoulders, etc + :item_sub_type => "fl[subTp]", # leather, mail, etc :realm => 'r', :search => 'searchQuery', :type => 'searchType', - :guild_name => 'n', + :guild_name => 'gn', :item_id => 'i', :team_size => 'ts', :team_name => 't', :group => 'group', :callback => 'callback', @@ -1050,11 +1075,11 @@ :month => 'month', :year => 'year', :event => 'e', :now => 'now', :achievement_category => 'c' - } + } params = [] options.each do |key, value| params << "#{reqs[key]}=#{u(value)}" if reqs[key] end @@ -1080,11 +1105,11 @@ req["user-agent"] = @@user_agent # ensure returns XML req["cookie"] = "cookieMenu=all; cookieLangId=" + options[:lang] + "; cookies=true;" req["cookie"] += options[:cookie] if options[:cookie] - uri = URI.parse(url) + uri = URI.parse(URI.escape(url)) http = Net::HTTP.new(uri.host, uri.port) if (options[:secure]) puts "Secure authentication" if options[:debug] @@ -1095,11 +1120,11 @@ begin tries = 0 http.start do - puts "Get URL "+url if options[:debug] + puts "Get URL "+ url if options[:debug] res = http.request req # response = res.body response = case res when Net::HTTPSuccess, Net::HTTPRedirection @@ -1107,17 +1132,17 @@ else tries += 1 if tries > @@max_connection_tries raise Wowr::Exceptions::NetworkTimeout.new('Timed out') else - retry + redo end end end rescue Timeout::Error => e raise Wowr::Exceptions::NetworkTimeout.new('Timed out - Timeout::Error Exception') - rescue Net::HTTPExceptions => e + rescue SocketError, Net::HTTPExceptions => e raise Wowr::Exceptions::ServerDoesNotExist.new('Specified server at ' + url + ' does not exist.') end end @@ -1193,11 +1218,11 @@ end def login_final_bounce(url) # Let's bounce to our page that will give us our short term cookie, URL has Kerbrose style ticket. finalstage = login_http(url) - + # Did we get a 200? if (finalstage.code == "200") # Get the short term cookie at last short_cookie = nil finalstage.header['set-cookie'].scan(/#{@@temporary_cookie}=(.*?);/) { @@ -1229,11 +1254,11 @@ http.verify_mode = OpenSSL::SSL::VERIFY_NONE http.use_ssl = true end req.set_form_data(data, '&') if data - + http.start do res = http.request(req) tries = 0 response = case res @@ -1242,10 +1267,10 @@ else tries += 1 if tries > @@max_connection_tries raise Wowr::Exceptions::NetworkTimeout.new('Timed out') else - retry + redo end end end end end