Created
June 20, 2014 18:36
-
-
Save chrisfjones/2063df25a8abef6a2e6e to your computer and use it in GitHub Desktop.
lazy sequence of all the tweets!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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