Skip to content

Instantly share code, notes, and snippets.

@sunng87
Created October 26, 2011 05:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sunng87/1315572 to your computer and use it in GitHub Desktop.
Save sunng87/1315572 to your computer and use it in GitHub Desktop.
upvotes in subreddits
(ns reddit-visualization.core
(:require [reddit.clj.core :as reddit])
(:import [javax.swing JFrame])
(:import [org.jfree.chart ChartFactory ChartPanel])
(:import [org.jfree.data.general DefaultPieDataset])
(:import [org.jfree.util SortOrder]))
(def reddit-client (reddit/login nil nil))
(defn map-reddits [user after-id]
(reddit/user-liked reddit-client user 25 after-id))
(defn map-most-recent-reddits [user totalsize]
(loop [after-id nil
reddits '()]
(if (>= (count reddits) totalsize)
reddits
(let [some-reddits (map-reddits user after-id)]
(if (empty? some-reddits)
(concat reddits some-reddits)
(recur (:name (last some-reddits)) (concat reddits some-reddits)))))))
(defn reduce-subreddits-count [all-reddits]
(let [safe-inc-map (fn [data key] (assoc data key (inc (get data key 0))))
all-subreddits (map #(:subreddit %) all-reddits)]
(reduce safe-inc-map {} all-subreddits)))
(defn create-dataset [subreddits-count-map]
(let [ds (DefaultPieDataset.)]
(dorun (map #(.setValue ds (key %) (val %)) subreddits-count-map))
(.sortByValues ds SortOrder/DESCENDING)
ds))
(defn create-chart-pane [dataset]
(let [chart (ChartFactory/createPieChart3D
"Upvotes in subreddits" dataset true true false)]
(ChartPanel. chart)))
(defn start-jframe [chart-panel]
(doto (JFrame. "Upvotes in subreddits")
(.setContentPane chart-panel)
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.pack)
(.setVisible true)))
(defn -main [& args]
(start-jframe
(create-chart-pane
(create-dataset
(let [subreddits-summary
(reduce-subreddits-count
(map-most-recent-reddits "sunng" 1000))] ;;change "sunng" to your reddit name
(pprint subreddits-summary)
subreddits-summary)))))
(defproject reddit-visualization "1.0.0-SNAPSHOT"
:description "FIXME: write description"
:dependencies [[org.clojure/clojure "1.3.0"]
[reddit.clj "0.3.1"]
[jfree/jfreechart "1.0.13"]]
:main reddit-visualization.core)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment