Skip to content

Instantly share code, notes, and snippets.

@lynxluna
Last active August 29, 2015 14:05
Show Gist options
  • Save lynxluna/daa4be68ff302d620eb6 to your computer and use it in GitHub Desktop.
Save lynxluna/daa4be68ff302d620eb6 to your computer and use it in GitHub Desktop.
Wrapping Facebook4j to Clojure
;; Wrapping facebook4j in Clojure
;; Please include org.facebook4j/facebook4j-core "2.1.0"]
;; in your project.clj
(ns com.ykode.social.fb ;; change the namespace as you wish
(:import [facebook4j Facebook FacebookException FacebookFactory]
[facebook4j.auth AccessToken]))
(defn- kw->perms
"Converting keyword array such as [:public_profile :email]
to \"public_profile,email\""
[keywords]
(clojure.string/join "," (map name keywords)))
(defn- not-nil?
"Not Nil Check"
[param]
((complement nil?) param))
(defn client
"Creating Facebook4J Facebook Instance Client"
([{:keys [app_id app_secret permissions access_token]}]
(client app_id app_secret :permissions permissions :access_token access_token))
([app_id app_secret & {:keys [permissions access_token]}]
(let [fb (.getInstance ( FacebookFactory. ))
accessToken (if (not-nil? access_token)
(AccessToken. access_token nil)
nil)]
(do
(.setOAuthAppId fb app_id app_secret)
(when (not-nil? permissions) (.setOAuthPermissions fb (kw->perms permissions)))
(when (not-nil? accessToken) (.setOAuthAccessToken fb accessToken))
fb))))
(defn set-permission!
"set permission of fb object"
[^Facebook fb perms]
(.setOAuthPermissions fb (kw->perms perms)))
(defn set-access-token!
"set access token of an fb object"
[^Facebook fb access_token]
(let [accessToken (if (not-nil? access_token)
(AccessToken. access_token nil)
nil)]
(if (not-nil? accessToken) (.setOAuthAccessToken fb accessToken))))
(defn me
"Getting Current User Maps"
[^Facebook fb]
(let [meObject (.getMe fb)]
(bean meObject)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment