I'm learning Clojure and I'm doing a little thing that reads direct messages from Twitter using twitter-api wrapper. The code doing that is below.
(ns twitterbot.my-twitter
(:require [twitter.oauth :refer [make-oauth-creds]]
[twitter.api.restful :refer [direct-messages]]
[clojure.edn :as edn]
[clojure.string :as string]))
(defn- load-credentials [filename]
(edn/read-string (slurp filename)))
(def ^:private credentials-from-file (load-credentials "credentials.edn"))
(def ^:private oauth-credentials
(make-oauth-creds (credentials-from-file :consumerkey)
(credentials-from-file :consumersecret)
(credentials-from-file :usertoken)
(credentials-from-file :usersecret)))
(defn- has-url? [message]
(seq (:urls (:entities message))))
(defn- trusted-user? [message]
(= (credentials-from-file :trusteduser) (:sender_screen_name message)))
(defn- get-url [message]
(:expanded_url (nth (:urls (:entities message)) 0)))
(defn links-from-direct-messages []
(let [messages (direct-messages :oauth-creds oauth-credentials)]
(map get-url (filter has-url? (filter trusted-user? (:body messages))))))
As I'm new to Clojure, I would like to know whether I'm doing things in the correct way and how to do them better. I feel like the coding style and layout is off at least in links-from-direct-messages
, but I even though I tried to follow this style guide, I'm not sure how it should be. Also as the data structure from Twitter is quite nested, I wonder how I should be going through them.