使用play 2.4通過oauth訪問twitter api。 我在twitter上創建了一個應用程序,並創建了帶有祕密的密鑰和標記。由於它實際上並不存在,所以twitter上的 組成了我的應用程序的URL。 和在回調url中使用了相同的url。在localhost上運行應用程序。使用curl生成的twitter命令來模擬身份驗證的工作,因爲我的密鑰和令牌是有效的。scala play twitter api oauth身份驗證不起作用
我得到這個響應,當我運行我的代碼:
錯誤401未經授權
這是主戲碼:
import play.api._
import play.api.mvc._
import play.api.libs.concurrent.Execution.Implicits._
import play.api.Play.current
import play.api.libs.oauth.{ConsumerKey,RequestToken}
import scala.concurrent.Future
import play.api.libs.ws._
import play.api.libs.oauth.OAuthCalculator
import play.api.libs.iteratee._
class Application extends Controller {
def index = Action {
Ok(views.html.index("Your new application is ready."))
}
val loggingIteratee = Iteratee.foreach[Array[Byte]] { array => Logger.info(array.map(_.toChar).mkString) }
def tweets = Action.async {
credentials.map {
case (consumerKey, requestToken) =>
println(consumerKey.key.toString())
println(consumerKey.secret.toString())
println(requestToken.token.toString())
println(requestToken.secret.toString())
WS
.url("https://stream.twitter.com/1.1/statuses/sample.json")
.sign(OAuthCalculator(consumerKey, requestToken))
.withQueryString("track" -> "reactive")
.get()
.map { response =>
Ok(response.body)
}
}getOrElse{
Future{
InternalServerError("twitter credentials missing")
}
}
}
def credentials :Option[(ConsumerKey,RequestToken)] = for {
apiKey <- Play.configuration.getString("twitter.apiKey")
apiSecret <- Play.configuration.getString("twitter.apiSecret")
token <- Play.configuration.getString("twitter.token")
tokenSecret <- Play.configuration.getString("twitter.tokenSecret")
}yield (ConsumerKey(apiKey,apiSecret),RequestToken(token,tokenSecret))
}
播放2.4 oauth已損壞。 – bwawok
@bwawok有沒有一個bug?因爲它是一個已知的問題? –
我這麼認爲,通過https://github.com/playframework/playframework/pull/4826進行故障排除。到目前爲止,看起來像異步http的東西是錯誤的,並獲得了2.4版本的升級。我敢打賭你的代碼在2.3中起作用。 – bwawok