Scala 使用Play Framework 2.0向Twitter API发送POST请求
如何使用Play Framework 2.0(使用Scala)向twitter API发送POST请求?我尝试调用的API使用GET和POST都可以工作,并且我已经使用GET成功地调用了它,代码如下:Scala 使用Play Framework 2.0向Twitter API发送POST请求,scala,playframework-2.0,Scala,Playframework 2.0,如何使用Play Framework 2.0(使用Scala)向twitter API发送POST请求?我尝试调用的API使用GET和POST都可以工作,并且我已经使用GET成功地调用了它,代码如下: val followersURL = "http://api.twitter.com/1/users/lookup.json?user_id=" + listOfFollowers.mkString(",") WS.url(followersURL) .sign(OAu
val followersURL = "http://api.twitter.com/1/users/lookup.json?user_id=" + listOfFollowers.mkString(",")
WS.url(followersURL)
.sign(OAuthCalculator(Twitter.KEY, tokens))
.get()
.map{ response =>
val screenName: Seq[String] = response.json match {
case res: JsArray => res.value.map{ value => (value \ "name").toString }
case _ => Seq("")
}
}
然后我尝试使用POST调用API,如下所示:
WS.url("http://api.twitter.com/1/users/lookup.json")
.sign(OAuthCalculator(Twitter.KEY, tokens))
.post(Map("user_id"->listOfFollowers))
.map { response =>
val screenName: Seq[String] = response.json match {
case res: JsArray => res.value.map{ value => (value \ "name").toString }
case _ => Seq("")
}
}
它不起作用,我得到了这个例外:
[error] play - Waiting for a promise, but got an error: null
java.lang.NullPointerException: null
at java.io.Reader.<init>(Unknown Source) ~[na:1.7.0_01]
at java.io.InputStreamReader.<init>(Unknown Source) ~[na:1.7.0_01]
at oauth.signpost.OAuth.decodeForm(OAuth.java:157) ~[signpost-core.jar:na]
at oauth.signpost.AbstractOAuthConsumer.collectBodyParameters(AbstractOAuthConsumer.java:236) ~[signpost-core.jar:na]
at oauth.signpost.AbstractOAuthConsumer.sign(AbstractOAuthConsumer.java:96) ~[signpost-core.jar:na]
at play.api.libs.oauth.OAuthCalculator.sign(OAuth.scala:106) ~[play_2.9.1.jar:2.0.1]
[error]播放-等待承诺,但出现错误:null
java.lang.NullPointerException:null
在java.io.Reader.(未知源代码)~[na:1.7.0\u 01]
在java.io.InputStreamReader(未知源代码)~[na:1.7.0_01]
在oauth.signpost.oauth.decodeForm(oauth.java:157)~[signpost-core.jar:na]
在oauth.signpost.AbstractOAuthConsumer.collectBodyParameters(AbstractOAuthConsumer.java:236)~[signpost core.jar:na]
在oauth.signpost.AbstractOAuthConsumer.sign(AbstractOAuthConsumer.java:96)~[signpost core.jar:na]
在play.api.libs.oauth.OAuthCalculator.sign(oauth.scala:106)~[play_2.9.1.jar:2.0.1]
因为它说异常发生在OAuthCalculator上,所以我尝试注释掉.sign
调用,它没有抛出任何异常,但我当然没有得到正确的结果
我做错什么了吗?我做错了什么,为什么?我怎样才能解决这个问题
以前谢谢你。我发现这很管用:
WS.url("http://api.twitter.com/1/users/lookup.json?user_id="+listOfFollowers)
.sign(OAuthCalculator(Twitter.KEY, tokens))
.post("ignored")
.map { response =>
val screenName: Seq[String] = response.json match {
case res: JsArray => res.value.map{ value => (value \ "name").toString }
case _ => Seq("")
}
}
我还做了笔记,在每次重大升级游戏时都会重新访问我的代码!检查上面的问题是否得到解决,因为这显然是不对的。一旦您使用Play Framework工具获取用户的令牌和密码,您就可以使用twitter4j(
“org.twitter4j”%“twitter4j core”%“3.0.3”
)库来进行这样的发布
import twitter4j.conf.ConfigurationBuilder
import twitter4j.{StatusUpdate, TwitterFactory}
val config = new ConfigurationBuilder()
.setOAuthConsumerKey(twitterKey)
.setOAuthConsumerSecret(twitterSecret)
.setOAuthAccessToken(token)
.setOAuthAccessTokenSecret(secret)
.build()
val twitter = new TwitterFactory(config).getInstance()
val status = new StatusUpdate(tweet)
status.media(photoName, stream)
val twitResp = twitter.updateStatus(status)
twitter4j不是异步的,所以它的资源效率稍低,但它可以让你完成真正的文章,这有时是必要的