Skip to content

Instantly share code, notes, and snippets.

@chrisfjones
Created June 20, 2014 18:36
Show Gist options
  • Save chrisfjones/2063df25a8abef6a2e6e to your computer and use it in GitHub Desktop.
Save chrisfjones/2063df25a8abef6a2e6e to your computer and use it in GitHub Desktop.
lazy sequence of all the tweets!
(ns twitter
(:use [environ.core]
[twitter.oauth]
[twitter.api.restful])
(:require [clj-time.format :as f]
[clj-http.client :as clj-http]))
(def tw-consumer-key (env :tw-consumer-key))
(def tw-consumer-secret (env :tw-consumer-secret))
(def tw-user-access-token (env :tw-user-access-token))
(def tw-user-access-token-secret (env :tw-user-access-token-secret))
(defn make-creds []
(make-oauth-creds tw-consumer-key
tw-consumer-secret
tw-user-access-token
tw-user-access-token-secret))
(defn- call-user-timeline-api
([creds screen-name]
(map #(select-keys % [:id_str :created_at])
(:body (statuses-user-timeline :oauth-creds creds
:params {:screen-name screen-name
:trim-user true
:count 100}))))
([creds screen-name max-id]
(map #(select-keys % [:id_str :created_at])
(rest (:body (statuses-user-timeline :oauth-creds creds
:params {:screen-name screen-name
:trim-user true
:max-id max-id
:count 100}))))))
(defn- fix-date [post]
(update-in post [:created_at] (partial f/parse (f/formatter "EEE MMM dd HH:mm:ss Z yyyy"))))
(defn tweets-for-user
([creds screen-name]
; 3200 is the hard limit for history from the twitter
(take 3200 (tweets-for-user creds screen-name (call-user-timeline-api creds screen-name))))
([creds screen-name tweets]
(if (empty? tweets)
'()
(let [{:keys [id_str] :as tweet} (first tweets)]
(if (empty? (rest tweets))
(cons (fix-date tweet) (lazy-seq (tweets-for-user creds screen-name (call-user-timeline-api creds screen-name id_str))))
(cons (fix-date tweet) (lazy-seq (tweets-for-user creds screen-name (rest tweets)))))))))
#_ (count (apply hash-set (map :id_str (take 3201 (tweets-for-user (make-creds) "GlassAnimals")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment