2

使用相当简单和优雅的 Scala Dispatch HTTP 库。由于 Twitter Search API 现在使用 OAuth 1.0A,我显然需要开始注入 Consumer 和 AccessToken 信息。我在下面有一个简单的请求:

val request = url("https://api.twitter.com/1.1/search/tweets.json?q=%23%sresult_type=mixed&count=4" format w.queryValue)
val response = Http(request OK as.String)

如果我已经知道我的 Consumer 和 AccessToken 信息,有什么方法可以向其中添加标头?文档相当稀缺。谢谢!

4

2 回答 2

1

我不熟悉 OAuth API,但 Dispatch 允许您使用<:<方法/运算符添加任意 HTTP 请求标头。

因此,将上面的代码示例和来自 Twitter 开发者网站的“授权请求”示例混合在一起,您可能会得到如下内容:

val authentication = """OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",  oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0""""

val request = url("https://api.twitter.com/1.1/search/tweets.json?q=%23%sresult_type=mixed&count=4" format w.queryValue)
val authHeader = Map("Authentication" -> authentication) 
val requestWithAuthentication = request <:< authHeader
val response = Http(requestWithAuthentication OK as.String)

我还没有验证这是否真的有效,但希望它能让你朝着正确的方向前进。

于 2013-08-06T19:53:58.103 回答
0

我正在使用调度这样做:

private def buildSearchReq(searchTerm: String, lat: Double, long: Double): Req = {
  val consumer = new ConsumerKey(consumerKey, consumerSecret)
  val requestToken = new RequestToken(token, tokenSecret)
  val req = url(searchUrl)
    .addQueryParameter("term", searchTerm)
    .addQueryParameter("radius_filter", "40000")
    .addQueryParameter("ll", s"$lat,$long")
  new SigningVerbs(req).sign(consumer, requestToken)
}

如果你愿意,你也可以做更多这样的事情:

private def buildSearchReq(searchTerm: String, lat: Double, long: Double): Req = {
  val req = url(searchUrl) <<? Map("term" -> searchTerm, "radius_filter" -> "40000", "ll" -> s"$lat,$long")
  new SigningVerbs(req).sign(new ConsumerKey(consumerKey, consumerSecret), new RequestToken(token, tokenSecret))
}

可能还有更简洁的方法,但你明白了。

于 2014-06-26T00:46:00.773 回答