gpt4 book ai didi

java - Twitter 抄写员和 clojure "The access_token method must be called with a request_token"

转载 作者:行者123 更新时间:2023-11-30 09:29:10 24 4
gpt4 key购买 nike

(注意如果你不懂clojure我可以用Java翻译代码,请问)

我将 scribe 与 clojure 一起使用,我发现使用 Twitter 登录时存在一些问题,我正在使用的代码:

(def twitter-service
(-> (doto
(ServiceBuilder.)
(.provider (TwitterApi$Authenticate.))
(.apiKey "apikey")
(.apiSecret "apisecret")
(.callback "https://morgan-siscia.rhcloud.com/tatata/"))
(.build)))

(def tokens (atom {}))

(defn get-token []
(.getRequestToken twitter-service))

(defn get-twitter-url [token]
(swap! tokens assoc (.getToken token) token)
(.getAuthorizationUrl twitter-service token))

(defn get-info-twitter [oauth-token oauth-veri]
(let [token (get @tokens oauth-token)
verifier (Verifier. oauth-veri)
access-token (.getAccessToken twitter-service token verifier)
request (doto (OAuthRequest. (Verb/POST)
"https://api.twitter.com/oauth/access_token")
(.addOAuthParameter "oauth_token" oauth-token)
(.addBodyParameter "oauth_verifier" oauth-veri))]
(do
(.signRequest twitter-service access-token request)
(swap! tokens dissoc oauth-token))
(.getBody (.send request))))

代码是 java 代码的直接翻译,但是它不起作用。

当我调用 (get-info-twitter "the-oauth-code""the verifier code") 时,twitter 返回一个错误:

<?xml version="1.0" encoding="UTF-8"?>
<hash>
<request>/oauth/access_token</request>
<error>The access_token method must be called with a request_token</error>
</hash>

老实说,我不知道我做错了什么,有人能帮帮我吗?

最佳答案

这是 Twitter OAuth 的工作原理(我用 Twitter4j 做的,原则对你来说应该是一样的):

  • 你问一个RequestToken:

RequestToken requestToken = twitter.getOAuthRequestToken();

  • 由此,您得到 2 个对象:一个 token 和一个 tokenSecret:

String token = requestToken.getToken(); String secretToken = requestToken.getTokenSecret();

  • 用户正在授权您的应用程序,Twitter 调用了一个回调 URL,向您传递了 2 个参数:oauth_tokenoauth_verifier

  • 通过这两个参数,您可以请求一个AccessToken:

AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, oauth_verifier);

requestToken 是从以前的 token 和保存在某处的 secretToken 重建的

  • 这个新对象包含 2 个字符串,您必须保留这些字符串以供将来调用 Twitter 时使用:

credentials.token = accessToken.getToken();

credentials.secret = accessToken.getTokenSecret();

我将此对象保存在数据库中,并在以后调用 Twitter 时重用它。当我不能很好地理解所有这些标记时,我遇到了和你一样的错误。

尝试逐步执行此操作,它应该会起作用。

关于java - Twitter 抄写员和 clojure "The access_token method must be called with a request_token",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com