使用相当简单优雅的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信息,有什么方法可以为此添加标题?文档相当稀缺。谢谢!
答案 0 :(得分:1)
我不熟悉OAuth API,但Dispatch允许您使用<:<
方法/运算符添加任意HTTP请求标头。
将上面的代码示例和Twitter的开发者网站上的这个"Authorizing a request"示例混合在一起,您可能会得到类似的结果:
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)
我还没有确认这是否真的有效,但希望它能让你朝着正确的方向前进。
答案 1 :(得分: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))
}
可能还有更简洁的方法,但你明白了。