2012-06-23 19 views
6

के साथ ट्विटर एपीआई को पोस्ट अनुरोध भेजना मैं प्ले फ्रेमवर्क 2.0 (स्कैला के साथ) का उपयोग कर ट्विटर एपीआई को एक POST अनुरोध कैसे भेजूं? एपीआई के साथ मैं काम कॉल करने के लिए दोनों प्राप्त और पोस्ट कोशिश कर रहा हूँ, और मैं इसे सफलतापूर्वक इस कोड के साथ प्राप्त का उपयोग कर कहा जाता है:प्ले फ्रेमवर्क 2.0

:

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

तब मैं एपीआई इस तरह पोस्ट का उपयोग कर कॉल करने की कोशिश

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] 

चूंकि यह कहते अपवाद तब होता है कि OAuthCalculator पर, मैं बाहर टिप्पणी करने के लिए .sign कॉल की कोशिश, और यह किसी भी फेंक नहीं था अपवाद, लेकिन निश्चित रूप से मुझे सही परिणाम नहीं मिला।

क्या मैं कुछ गलत कर रहा हूं? मैं गलत क्या कर रहा हूं, और क्यों? मैं समस्या को कैसे ठीक कर सकता हूं?

पहले धन्यवाद।

उत्तर

4

मैं काम करने के लिए इस पाया है:

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

मैं भी खेलने के हर प्रमुख उन्नयन के साथ अपने कोड को फिर से करने के लिए नोट बना दिया है! यह जांचने के लिए कि उपरोक्त तय हो गया है, क्योंकि यह स्पष्ट रूप से सही नहीं है।

+0

यह मेरी समस्या हल करता है। धन्यवाद! – bertzzie

1

एक बार जब आप अपने उपयोगकर्ता के टोकन और गुप्त प्राप्त करने के लिए 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 async नहीं है, इसलिए यह थोड़ा कम संसाधन कुशल है, लेकिन यह आप वास्तविक पदों जो कभी कभी आवश्यक हैं काम करने दिया।

संबंधित मुद्दे