2013-03-07 13 views
2

使用相當簡單和優雅的Scala Dispatch HTTP庫。由於Twitter Search API現在使用OAuth 1.0A,我顯然需要開始注入Consumer和AccessToken信息。我有以下簡單的要求:在Scala Dispatch 0.9.5中插入Oauth頭文件的方法?

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) 

什麼是頭添加到這一點,如果我已經知道我和消費信息的accessToken的方式?文檔相當稀少。謝謝!

回答

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) 

我還沒有證實這是否實際工作,但希望它應該讓你朝着正確的方向前進。

+0

Credit to credit is due:http://stackoverflow.com/questions/1394667/setting-user-agent-header-in-scala-with-databinders-dispatch-library是什麼提醒我關於'<: '操作員。 – 2013-08-06 19:56:26

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)) 
} 

有可能甚至做的更簡潔的方式,但你明白了。