src/newseasons/loops/refresh.clj @ 279de613dd93
Wrap the http requests to apple.
| author | Steve Losh <steve@stevelosh.com> |
|---|---|
| date | Wed, 05 Oct 2011 22:19:48 -0400 |
| parents | a7d0d997f520 |
| children | fcd5abfaeff4 |
(ns newseasons.loops.refresh (:use [postmark.core :only (postmark)]) (:use [newseasons.loops.templates.email :only (new-season)]) (:use [newseasons.settings :only (postmark-api-key)]) (:require [newseasons.models.shows :as shows]) (:require [newseasons.itunes :as itunes])) (def pm (postmark postmark-api-key "newseasons@stevelosh.com")) ; Dammit, Clojure. (defn- gt [a b] (<= 1 (compare a b))) (defn- lt [a b] (>= -1 (compare a b))) (defn- notify [show email] (let [body (new-season email show)] (println (pm {:to email :subject (str "[New Seasons] A new season of " (:title show) " has hit iTunes!") :text body :tag "newseasons"})))) (defn- notify-all [show-id] (let [show (shows/show-get show-id) watchers (shows/show-get-watchers show-id)] (dorun (map notify (cycle [show]) watchers)))) (defn- check-and-notify [show] (let [id (show "artistId") old-release-date (shows/show-get-version id) new-release-date (show "releaseDate")] (when (gt new-release-date old-release-date) (notify-all id) (shows/show-set-version! id new-release-date)))) (defn- refresh-show [id] (println " refreshing" id) (let [show (itunes/itunes-lookup-seasons id)] (when show (check-and-notify show) (shows/store-raw-show show)) (Thread/sleep 10000))) (defn- refresh [] (println "\n\n") (println "Refreshing Shows") (println "----------------") (Thread/sleep 20000) (let [shows (shows/shows-get-to-check)] (dorun (map refresh-show shows)))) (defn main [& args] (println "Starting Refresh Loop!") (println "======================") (dorun (repeatedly refresh)))