From: horndude77@... Date: 2006-02-27T02:51:58+09:00 Subject: Re: Current Temperature (#68) [QUIZ][SOLUTION] My solution uses yahoo weather like another of the solutions here. It's easy to use with US zip codes, but for international cities you have to know the yahoo weather location id. I looked around for a big list of these but couldn't find it. Anyways it would be nice to have some sort of searching mechanism to turn a city name into a location id. Also I used rexml to parse the rss feed. I tried to use the rss library, but couldn't figure out how to pull out the 'yweather' tags. Anyways, fun quiz. I enjoyed it a lot. -----Jay Anderson require 'rexml/document' require 'open-uri' #Returns a hash containing the location and temperature information #Accepts US zip codes or Yahoo location id's def yahoo_weather_query(loc_id, units) h = {} open("http://xml.weather.yahoo.com/forecastrss?p=#{loc_id}&u=#{units}") do |http| response = http.read doc = REXML::Document.new(response) root = doc.root channel = root.elements['channel'] location = channel.elements['yweather:location'] h[:city] = location.attributes["city"] h[:region] = location.attributes["region"] h[:country] = location.attributes["country"] h[:temp] = channel.elements["item"].elements["yweather:condition"].attributes["temp"] end h end if ARGV.length < 1 then puts "usage: #$0 [f|c]" exit end loc_id = ARGV[0] units = (ARGV[1] || 'f').downcase units = (units =~ /^(f|c)$/) ? units : 'f' #An improvement would be to allow searches for the yahoo location id #loc_id = yahoo_loc_search(loc_id) weather_info = yahoo_weather_query(loc_id, units) city = weather_info[:city] region = weather_info[:region] country = weather_info[:country] temp = weather_info[:temp] puts "The temperature in #{city}, #{region}, #{country} is #{temp} degrees #{units.upcase}" -- Posted via http://www.ruby-forum.com/.