It's not answering your idiomatic clojure question, but extract-url- filename will have problems because of this:
user> (.getFile (URL. "http://www.foo.com/")) "/" On Apr 21, 1:08 pm, Brent Millare <[email protected]> wrote: > Technically I didn't write my own cause I just copied pasted it ;) > > For the purposes of this review, just consider that library code or a > reference so everyone knows what it does. :) > > > > Sean Devlin wrote: > > At first glance, you should be requiring c.c.string, and don't write > > your own blank? fn. That's the only low hanging fruit I see. > > > On Apr 21, 1:47 pm, Brent Millare <[email protected]> wrote: > > > Hey all, > > > > I wrote a clojure version of the simplest functionality of wget. I > > > basically translated the java version into clojure code, but I'm not > > > quite happy with the wget-binary function because I use a loop, and I > > > feel like someone else has a more idiomatic solution to iterating > > > through a java-array. Also, I don't know if my way of handling the no > > > filename case is best. Please tell me how to improve my code, > > > especially in the interop sections. > > > > (ns dj > > > (:import [java.io File FileOutputStream BufferedInputStream > > > BufferedReader InputStreamReader]) > > > (:import [java.net URL]) > > > (:require [clojure.contrib [duck-streams :as duck-streams]])) > > > > (defn blank? > > > "True if s is nil, empty, or contains only whitespace." > > > [#^String s] > > > (every? (fn [#^Character c] (Character/isWhitespace c)) s)) > > > > (defn- extract-url-filename [url] > > > (let [filename (.getFile url)] > > > (if (blank? filename) > > > "index.html" > > > (subs filename 1)))) > > > > (defn- wget-binary [con content-length] > > > (with-open [stream (BufferedInputStream. (.getInputStream con))] > > > (let [data (make-array Byte/TYPE content-length)] > > > (loop [offset 0] > > > (if (< offset content-length) > > > (let [bytesRead (.read stream > > > data > > > offset > > > (- content-length > > > offset))] > > > (if (= bytesRead -1) > > > data > > > (recur (+ offset bytesRead)))) > > > data))))) > > > > (defn- wget-text [url-obj] > > > (with-open [buf (-> url-obj > > > (.openStream) > > > (InputStreamReader.) > > > (BufferedReader.))] > > > (apply str (line-seq buf)))) > > > > (defn wget [url-address] > > > (let [url (URL. url-address) > > > filename (extract-url-filename url) > > > con (.openConnection url) > > > content-length (.getContentLength con)] > > > (if (or (= -1 content-length) > > > (.startsWith (.getContentType con) "text/")) > > > (duck-streams/spit filename (wget-text url)) > > > (with-open [out-file (FileOutputStream. filename)] > > > (.write out-file (wget-binary con content-length)))))) > > > > -- > > > You received this message because you are subscribed to the Google > > > Groups "Clojure" group. > > > To post to this group, send email to [email protected] > > > Note that posts from new members are moderated - please be patient with > > > your first post. > > > To unsubscribe from this group, send email to > > > [email protected] > > > For more options, visit this group > > > athttp://groups.google.com/group/clojure?hl=en > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to [email protected] > > Note that posts from new members are moderated - please be patient with > > your first post. > > To unsubscribe from this group, send email to > > [email protected] > > 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 post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group > athttp://groups.google.com/group/clojure?hl=en -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
