2015-09-27 56 views
1

我已經使用Fabric(fabric.io)將其與Twitter集成,並且登錄和身份驗證工作得很好,但我需要通過代碼創建和發送推文,Twitter工具只允許您使用一位視覺作曲家。創建推文計劃的麻煩

經過大量的試驗和錯誤,我得到這個代碼使用他們的文檔作爲基礎(docs.fabric.io/ios/twitter/access-rest-api.html#constructing-a-twitter-request-manually )

@IBAction func send(sender: UIButton) { 
    self.tweetText.resignFirstResponder() 
    let client = TWTRAPIClient() 
    let statusesShowEndpoint = "https://api.twitter.com/1.1/statuses/update.json" 
    let params = ["status": "Vamos ver se vai?"] //this is just test parameter 
    var clientError : NSError? 

    let request = Twitter.sharedInstance().APIClient.URLRequestWithMethod("POST", URL: statusesShowEndpoint, parameters: params, error: &clientError) 
    /* println(request.allHTTPHeaderFields) 
    println(request.HTTPMethod) 
    println(request.URL)*/ 

    client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in 
     if (connectionError == nil) { 
      var jsonError : NSError? 
      let json : AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &jsonError) 
     } 
     else { 
      println("Error: \(connectionError)") 
     } 
    } 


} 

但我得到這些錯誤:

Error: Optional(Error Domain=TwitterAPIErrorDomain Code=220 "Request failed: forbidden (403)" UserInfo=0x7aa35c70 {NSLocalizedFailureReason=Twitter API error : Your credentials do not allow access to this resource. (code 220), NSErrorFailingURLKey= https://api.twitter.com/1.1/statuses/update.json , NSLocalizedDescription=Request failed: forbidden (403)})

正如你所看到的,我試圖調試,看看頭遵守Twitter的REST API,他們還好嗎

 Optional([Content-Length: 32, 
Authorization: OAuth oauth_timestamp="1443339227",oauth_version="1.0", 
    oauth_consumer_key="deleted", 
    oauth_signature="deleted", 
    oauth_token="deleted", 
    oauth_nonce="9ACAF7BE-E789-46A5-9B3B-5F5AB02EFB85", 
    oauth_signature_method="HMAC-SHA1", Accept-Encoding: gzip, Content-Type: application/x-www-form-urlencoded;charset=UTF-8, User-Agent: Fabric/X.Y.Z (Really Long Tweets/1; iPhone Simulator; iOS 8.4; Scale/2.00) TwitterKit/1.11.1]) 
    Optional("POST") 
    Optional(https://api.twitter.com/1.1/statuses/update.json) 

我試着用視覺作曲家,他們給你看看問題是否與我的應用程序,但它工作得很好,併發布在我的Twitter時間軸上,所以我認爲它不能是API密鑰,權限類型(它具有讀取和寫入權限)或憑據。 我試圖改變這段代碼,所以它使GET請求,它的工作,我認爲問題是與POST和REST API,東西不匹配

我需要使這programmaticaly,因爲我需要得到一個大文本,打破它,並在一次幾個微博的形式發送,否則,我只想用自己的作曲家,用它做

感謝

+0

您應該檢查你的憑據,因爲錯誤220通常引發嘗試後作爲用戶其實發帖的時候,當作爲應用程序。 – Moritz

+0

好吧,我打開了我的客戶端,試圖獲取它使用的用戶標識,它是零,所以它沒有正確認證。現在我只需要嘗試學習如何使用TWTRAPIClient initWithUserID:correcly,有什麼幫助? –

回答

7

好了,所以我發現了這個問題。 問題是與

let client = TWTRAPIClient() 

這創造了一個客客戶端,未通過身份驗證。你需要通過用戶ID,以便您可以驗證用戶,所以這裏的新代碼(它的工作)

@IBAction func send(sender: UIButton) { 
    self.tweetText.resignFirstResponder() 
    let store = Twitter.sharedInstance().sessionStore 
    if let userid = store.session()?.userID { 
     let client = TWTRAPIClient(userID: userid) 
     let statusesShowEndpoint = "https://api.twitter.com/1.1/statuses/update.json" 
     let params = ["status": "Terceiro teste?"] 
     var clientError : NSError? 

     let request = client.URLRequestWithMethod("POST", URL: statusesShowEndpoint, parameters: params, error: &clientError) 
     client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in 
      if (connectionError == nil) { 
       var jsonError : NSError? 
       let json : AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &jsonError) 
      } 
      else { 
       println("Error: \(connectionError)") 
      } 
     } 
    } 
} 
+0

我們如何發佈圖片與文本? –

+1

@VinayPodili這正是我現在想要解決的問題。您必須首先上傳您的媒體,然後使用'media_id'。 – damianesteban

+0

這應該被標記爲答案,我已經看過很多帖子,沒有人會談論傳遞用戶ID。 Perfect @Leandro,謝謝 – Max