From: Rudolfs Osins Date: 2006-02-27T02:16:38+09:00 Subject: [SOLUTION] Current Temperature (#68) Hello everyone ! Here is my solution, actually it's my first ruby program, I just started learning... Suggestions on how to improve my code are welcome :) This is how it looks when executed, I couldn't find where to turn these warnings off :/ ------------------------------------------------------------------ root@black /# ./weather.rb madrid ignored element: {http://schemas.xmlsoap.org/wsdl/http/}binding ignored element: {http://schemas.xmlsoap.org/wsdl/http/}operation ignored element: {http://schemas.xmlsoap.org/wsdl/http/}urlEncoded ignored element: {http://schemas.xmlsoap.org/wsdl/mime/}mimeXml ignored element: {http://schemas.xmlsoap.org/wsdl/mime/}content ignored element: {http://schemas.xmlsoap.org/wsdl/http/}address The temperature in Madrid / Cuatro Vientos is 3 C ------------------------------------------------------------------ #!/usr/local/bin/ruby require 'soap/wsdlDriver' require 'rexml/document' URL = 'http://www.webservicex.net/globalweather.asmx?WSDL' # process the comandline arguments if ARGV[0] == nil abort("Usage: weather.rb city") else city = ARGV.join(' ') end soap = SOAP::WSDLDriverFactory.new(URL).create_rpc_driver begin weather = soap.GetWeather(:CityName => city, :CountryName => "") # strip the first line with stuff, else REXML wont parse xml = weather.getWeatherResult.gsub(/(<\?.*?>\n)/, '') data = REXML::Document.new(xml) # celsius degrees are in parentheses data.elements["//Temperature"].text[/\((.*)\)/]; temp = $1 data.elements["//Location"].text[/^(.*),/]; loc = $1 # show the gathered data puts "The temperature in " + loc + " is " + temp rescue puts "Could not find data for your supplied city: " + city end ------------------------------------------------------------------ Best regards, Rudolfs