我正在尝试使用Clojure与API(Context.IO)集成。 Context.IO使用OAuth 1,它要求通知消费者密钥和消费者秘密凭证以与其集成。
我过去使用请求库(https://github.com/request/request)设法使用Node.JS与Context.IO合作。结果很简单,只需在对象中填充consumer_key和consumer_secret,并在请求中的oauth参数中传递它。
var oauth =
{
consumer_key: 'dsfdfssdf',
consumer_secret: 'dasfsafdsf'
};
request.post( { url:url, oauth:oauth } )
现在我正在尝试使用clj-oauth https://github.com/mattrepl/clj-oauth来完成同样的工作,但我有点迷失,因为它需要太多不同的参数(对于我猜的更复杂的用例),而且我有我很难弄清楚如何做到这一点。
要添加更多信息,Context IO仅将OAuth用于API身份验证,而不是用户授权。因此,它不需要通知令牌,也不需要提供令牌。它只需要消费者密钥和签名(这里描述的相同:dev.twitter.com/oauth/overview/creating-signatures)。
有人能给出一个类似我在Node中使用Clojure或clj-oauth(或任何其他库)完成的示例吗?我还没有办法这样做。
谢谢!
答案 0 :(得分:5)
我注册了上下文io来试试这个问题。首先,在莱宁根,我成立了
:dependencies [[org.clojure/clojure "1.6.0"]
[clj-oauth "1.5.2"]
[clj-http "1.1.2"]]
作为我的依赖项。下面有两个例子。一个调用没有任何参数的url,另一个调用相同的url,但是带参数。
(ns scratch.core
(:require [oauth.client :as oauth]
[clj-http.client :as http]))
(def okey "key")
(def osecret "secret")
(def consumer (oauth/make-consumer okey
osecret
nil
nil
nil
:hmac-sha1))
(defn test-get []
(let [credentials (oauth/credentials consumer
nil
nil
:GET
"https://api.context.io/lite/users")]
(http/get "https://api.context.io/lite/users" {:query-params credentials})))
(defn test-get-params []
(let [params {:email "blah@blah.com"}
credentials (oauth/credentials consumer
nil
nil
:GET
"https://api.context.io/lite/users"
params)]
(http/get "https://api.context.io/lite/users" {:query-params (merge credentials params)})))