Scrape 4chan for alive images
Don't need :as resp if only body is ever used.
I'd also drop the :keys destructuring if it's not reused.
While couple of those maps make sense, this sequence is also pretty
repetitive, I'd suggest condensing repeated invocations into a single
call at least.
The (not (nil? ...)) is probably the same as the value itself, so
just (filter #(%1 "tim")) should suffice.
The function should most likely return the list instead of printing
it so the files can be examine further in another part of the code.
Maybe use mapcat instead of the map/reduce/concat combination?


The deref is fine I think, it also depends on how the calls should be
batched together (or not).

All in all:

(ns fourchan.core
  (:require [clojure.data.json :as json])
  (:require [org.httpkit.client :as http]))

(defn scrape []
  (-&gt;&gt;
   (json/read-str (@(http/get "http://a.4cdn.org/wg/threads.json") :body))
   (mapcat #(%1 "threads"))
   (map #(http/get (str "http://a.4cdn.org/wg/thread/" (%1 "no") ".json")))
   (mapcat #((json/read-str ((deref %1) :body)) "posts"))
   (filter #(%1 "tim"))
   (map #(str (%1 "tim") (%1 "ext")))))