2015-08-20 6 views
6

Sto cercando di integrare con un'API (Context.IO) utilizzando Clojure. Context.IO utilizza OAuth 1, che richiede di informare le credenziali dei consumatori e le credenziali segrete dei consumatori con cui integrare.OAuth1 in Clojure

Sono riuscito a lavorare con Context.IO con Node.JS in passato, utilizzando la libreria di richieste (https://github.com/request/request). Risulta essere abbastanza semplice, ha appena riempito consumer_key e consumer_secret in un oggetto e lo ha passato in parametro oauth nella richiesta.

var oauth = 
{ 
    consumer_key: 'dsfdfssdf', 
    consumer_secret: 'dasfsafdsf' 
}; 

request.post({ url:url, oauth:oauth }) 

Ora sto cercando di realizzare lo stesso utilizzando CLJ-oauth https://github.com/mattrepl/clj-oauth, ma io sono un po 'perso, perché richiede parametri troppo diversi (per casi di utilizzo più complessi credo), e sto avendo un momento difficile cercando di capire come fare il semplice.

Per aggiungere ulteriori informazioni, IO contesto utilizza OAuth solo per l'autenticazione API, non per l'autorizzazione dell'utente. Quindi non richiede che i token siano informati, né ne fornisce uno. Richiede solo la chiave e la firma del consumatore (la stessa descritta qui: dev.twitter.com/oauth/overview/creating-signatures).

Qualcuno può dare un esempio simile a quello che ho realizzato in Nodo usando Clojure o clj-oauth (o qualsiasi altra libreria)? Non ho trovato un modo per farlo.

Grazie!

+0

Attualmente sto usando quella libreria. Se segui il readme, funziona ... – RedDeckWins

+0

Ciao Red Deck, grazie per la risposta. Ad esempio, la funzione make-consumer accetta 3 URL come parametri, che non ho. Ho a disposizione solo la chiave del consumatore, il segreto e il metodo (hmac-sha1). –

+0

in generale gli url seguono lo stesso schema. Ad esempio, questo ha funzionato per me per Goodreads "https://www.goodreads.com/oauth/request_token" "https://www.goodreads.com/oauth/access_token" "https://www.goodreads.com/oauth/authorize " – RedDeckWins

risposta

5

Mi sono iscritto al contesto io per fare questo tentativo. Innanzitutto, in leiningen ho impostato

:dependencies [[org.clojure/clojure "1.6.0"] 
       [clj-oauth "1.5.2"] 
       [clj-http "1.1.2"]] 

come le mie dipendenze. Ci sono due esempi qui sotto. Si chiama un url senza parametri, l'altro chiama lo stesso url, ma con parametri.

(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 "[email protected]"} 
     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)}))) 
+0

Funziona come un incantesimo, grazie –

+0

stavo cercando di usare questa risposta per configurare il mio accesso OAuth all'API Goodreads per ottenere un elenco di membri di amici in XML ma non riesco a capire cosa sto sbagliando Ho anche pubblicato una domanda su StackOverflow con quello che ho finora: http://stackoverflow.com/questions/32920728/configuring-oauth- with-goodreads-in-clojure Qualsiasi aiuto sarebbe molto apprezzato. – SineLaboreNihil