Clojure seems likes it might have a good shot at being a popular Lisp. I was wondering how many people have actually adopted it to solve some of the small, yet real, problems that they have encountered. Since Clojure doesn't have an entry in Pleac, I thought that it would be great if people posted their small solutions to problems that they've solved in Clojure.
This prints a weather forecast via Yahoo! Weather.
(ns weather
(:use (clojure [xml :only [parse]] [zip :only [xml-zip]])
(clojure.contrib duck-streams str-utils pprint)
(clojure.contrib.zip-filter xml)))
(defn fetch-xml [uri]
(xml-zip
(parse
(org.xml.sax.InputSource.
(java.io.StringReader.
(slurp* (java.net.URI. (re-gsub #"\s+" "+" (str uri)))))))))
(defn yahoo-weather
([loc-code] (yahoo-weather loc-code "c"))
([loc-code unit]
(let [rss (fetch-xml (str "http://weather.yahooapis.com/forecastrss?p=" loc-code "&u=" unit))]
(if (= (text (xml1-> rss :channel :item :title)) "City not found")
"City not found. Go to http://weather.yahoo.com/, search for your city, and look in the URL for the location code."
(let [[units loc wind atm ast] (map #(xml1-> rss :channel (keyword (str "yweather:" %)))
["units" "location" "wind" "atmosphere" "astronomy"])
conditions (xml1-> rss :channel :item :yweather:condition)
date (re-find #"\d+:\d+.*" (xml1-> rss :channel :item :pubDate text))
fors (xml-> rss :channel :item :yweather:forecast)]
(cl-format true
"Weather for ~a, ~a (~a)
Temperature: ~a\u00B0 ~a
Wind Chill: ~a\u00B0 ~a, ~a ~a
Conditions: ~a
Humidity: ~a%
Barometer: ~a ~a
Sunrise/Sunset: ~a / ~a
Forecast:
~{ ~{~a: ~a. Hi ~2d, Lo ~2d.~}~^~%~}
"
(attr loc :city) (attr loc :region) date
(attr conditions :temp) (attr units :temperature)
(attr wind :chill) (attr units :temperature) (attr wind :speed) (attr units :speed)
(attr conditions :text)
(attr atm :humidity)
(attr atm :pressure) (attr units :pressure)
(attr ast :sunrise) (attr ast :sunset)
(map #(list (attr % :day)
(attr % :text)
(attr % :high)
(attr % :low))
fors)))))))
For example:
user> (weather/yahoo-weather "CAXX0328")
Weather for North Vancouver, (10:00 am PDT)
Temperature: 14° C
Wind Chill: 14° C, 8.05 kph
Conditions: Light Rain Shower
Humidity: 88%
Barometer: 1018 mb
Sunrise/Sunset: 6:01 am / 8:32 pm
Forecast:
Thu: Few Showers. Hi 18, Lo 12.
Fri: AM Showers. Hi 19, Lo 12.
nil
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With