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