Try: (defn fetch-atom-feed "Returns a list of ATOM chunks from the feed-url going back to the from-date" [feed-url] (if-let [chunk (fetch-atom-chunk feed-url)] (cons chunk (lazy-seq (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk)))))))
On Tue, May 28, 2013 at 6:30 AM, mond <r...@mcdermott.be> wrote: > I have managed to create a function that will read an ATOM feed > indefinitely and now need a way to stop it ;-) > > (defn fetch-atom-chunk > "Returns an ATOM chunk from the feed-url" > [feed-url] > (:ATOM_FEED (:body (client/get feed-url {:as :json})))) > > (defn fetch-atom-feed > "Returns a list of ATOM chunks from the feed-url going back to the > from-date" > [feed-url] > (let [chunk (fetch-atom-chunk feed-url)] > (lazy-seq > (cons chunk (fetch-atom-feed (:HREF (:PREVIOUS_LINK chunk))))))) > > (defn after? > "Returns true if first-date is after second-date" > [first-date second-date] > (> (.getTime first-date) (.getTime second-date))) > > (defn feed-date-to-clj-date > "Patch for ATOM feed date formats like '2013-05-27T14:35:00.982+02:00' > we have to remove the final ':' from the string to enable its > conversion" > [feed-date] > (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd'T'HH:mm:ss.SSSZ") > (str/replace feed-date #"(.*)(\d\d):(\d\d)" "$1$2$3"))) > > (defn more-feed-chunks-needed? > "Look at the atom chunk and decide if we have enough" > [from-date atom-chunk] > (after? from-date (feed-date-to-clj-date (:UPDATED atom-chunk)))) > > (def date-from (.parse (java.text.SimpleDateFormat. "yyyy-MM-dd") > "2013-05-27")) > > (take-while #(more-feed-chunks-needed? date-from %) (fetch-atom-feed > "some-url")) > > ; example of the feed > ; {:FEED_ID "5650f3ad-b793-42c6-9fef-80ba105f847d", :TITLE "Delta Feed", > :UPDATED "2013-05-28T11:15:34.860+02:00", :GENERATOR "Products", :LINK > {:REL "Self", :HREF "http://some-url"}, :PREVIOUS_LINK {:REL > "prev-archive", :HREF "http://another-url"}, ..... > > If I run without the take-while it runs forever (so I am happy that its > generating data) but when I add the take-while I get an empty list. > > I guess I'm missing something simple and would welcome suggestions. > > Thanks > > Ray > > -- > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.