= yahoo-weather

== About

yahoo-weather provides an object-oriented interface to the Yahoo! Weather XML
RSS feed detailed at http://developer.yahoo.com/weather.

People care a lot about the weather.  This may seem ironic given they
can just glance out the window.  However, we can all understand a
fascination with details and forecasting.

Log the weather information to your database!  Graph it to your
heart's content!  Write a widget that emails the weather to your cell
phone every five minutes with a link to your friend's PayPal account
to deposit money if the weather's sunny and you both bet that it would
be rainy. And the fun doesn't have to stop there.

The RubyForge project page for this library is at
http://rubyforge.org/projects/yahoo-weather.

Source code is at http://github.com/shaper/yahoo-weather.

NOTE: This library was updated as of December 2009 to use a new
WOEID-based lookup interface.  Yahoo has deprecated the older
non-WOEID-based lookup API.  The archived page with the deprecated API
details is at:

http://developer.yahoo.com/weather/archive.html

The older interface is still operational but users of this library
should shift from using YahooWeather::Client::lookup_location to
YahooWeather::Client::lookup_by_woeid.

== Installation

Install +rubygems+ if you don't already have it.  See http://rubyforge.org/projects/rubygems/.

Then install the gem by executing:

 % gem install yahoo-weather

== Usage

A simple example program:

 require 'rubygems'
 require 'yahoo-weather'

 @client = YahooWeather::Client.new
 # look up WOEID via http://weather.yahoo.com; enter location by city
 # name or zip and WOEID is at end of resulting page url.  herein we use
 # the WOEID for Santa Monica, CA.
 response = @client.lookup_by_woeid(2488892)

 # straight text output
 print <<edoc
 #{response.title}
 #{response.condition.temp} degrees
 #{response.condition.text}
 edoc

 # sample html output
 print <<edoc
 <div>
   <img src="#{response.image.url}"><br/>
   #{response.condition.temp} degrees #{response.units.temperature}<br/>
   #{response.condition.text}<br>
   Forecast:<br/>
   #{response.forecasts[0].day} - #{response.forecasts[0].text}.  High: #{response.forecasts[0].high} Low: #{response.forecasts[0].low}<br/>
   #{response.forecasts[1].day} - #{response.forecasts[1].text}.  High: #{response.forecasts[1].high} Low: #{response.forecasts[1].low}<br/>
   More information <a href="#{response.page_url}">here</a>.
 </div>
 edoc
    
Produces output as:

 Conditions for Santa Monica, CA at 10:51 am PST
 56 degrees
 Partly Cloudy
 <div>
   <img src="http://l.yimg.com/a/i/us/nws/th/main_142b.gif"><br/>
   56 degrees F<br/>
   Partly Cloudy<br>
   Forecast:<br/>
   Sat - Mostly Cloudy.  High: 59 Low: 46<br/>
   Sun - Partly Cloudy.  High: 64 Low: 48<br/>
   More information <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Santa_Monica__CA/*http://weather.yahoo.com/forecast/USCA1024_f.html">here</a>.
 </div>

There is a variety of detailed weather information in other attributes of the
YahooWeather::Response object.

== License

This library is provided via the GNU LGPL license at http://www.gnu.org/licenses/lgpl.html.

== Author

Copyright 2006 - 2009, Walter Korman <shaper@fatgoose.com>, 
http://lemurware.blogspot.com.

Thanks to Matthew Berk for inspiration and initial hack.