2013-06-13 197 views
3

我改變我的PHP代碼,以與新的API兼容,我堅持update_with_media。 這是我的代碼:Twitter的API api 1.1 update_with_media

$image = constant('PATH_UPLOAD').$db_data['post_image']; 
$connection = new TwitterOAuth(constant('CONSUMER_KEY'), constant('CONSUMER_SECRET'), $db_data['tw_oauth_token'], $db_data['tw_oauth_secret']);   
$content = $connection->OAuthRequest('https://api.twitter.com/1.1/account/verify_credentials.json', 'GET', array()); 
$twitterInfo = json_decode($content);      
$resp_tw = $connection->OAuthRequest('https://api.twitter.com/1.1/statuses/update_with_media.json', 'POST', 
      array(
       'status' => html_entity_decode($db_data['post_text'],ENT_QUOTES,'UTF-8'),    
       'media[]' => "@{$image}" 
      )   
      );       

,並返回

{"errors":[{"code":189,"message":"Error creating status"}]} 

可能是什麼問題/什麼我做錯了嗎?

回答

7

你可以嘗試這樣的:

$tmhOAuth = new tmhOAuth(array(
    'consumer_key' => 'abc', 
    'consumer_secret' => 'abc', 
    'user_token' => 'abc', 
    'user_secret' => 'abc', 
)); 

$response = $tmhOAuth->request('POST', $tmhOAuth->url('1.1/statuses/update_with_media'), 
array(
     'status' => $message, 
     'media[]' => file_get_contents($image) 
)); 
if ($response != 200) { 
    //Do something if the request was unsuccessful 
} 

有我的代碼測試https://twitter.com/wallapps/status/357137553691906048

+0

嗨,您使用的這些thmOAuth的版本?我一直在爲自動推文苦苦掙扎幾天,甚至連這段代碼都無法正常工作。 – ahojvole

+0

@ahojvole here bro https://github.com/themattharris/tmhOAuth – Sendy

1

雖然問題是一個幾個月大,我想我會回答它,因爲我花了幾個小時的製作update_with_media工作並且無法在網上找到滿意的答案。

不幸的是,Twitter API錯誤消息並不具體。我能找出FOLL Twitter的錯誤:

  1. 「錯誤無法驗證你」 - 可能意味着你的OAuth簽名基本字符串是不正確的

  2. 「錯誤不正確或丟失URI」 - 可能意味着你並不嚴格遵循請求主體中Twitter預期的格式。可能是因爲在你的請求主體缺少\ n的簡單的事情

  3. 「錯誤創建狀態 - 可能意味着,當它不應該在一個多/表單數據請求的請求體的狀態文本編碼
  4. 「錯誤內部錯誤」 - 這個錯誤沒有任何用處,它可能意味着你有一些數據在twitter期望的時候沒有被編碼,反之亦然,也可能意味着你沒有在請求體中包含編碼類型

爲了update_with_media工作,這些技巧可以幫助:

  1. 該請求應該具有的內容類型的multipart/form-data的的

  2. 請求體應該包含兩個元件的Twitter期望媒體[]和以正確的格式狀態(RFC 2388)

  3. 在另外,Twitter服務器期望在請求主體的每個部分之後有\ r \ n(CR LF)。跳過這導致微博返回錯誤
  4. 媒體[]數據應該被base64編碼,並在請求主體的內容處置部應該有內容傳輸編碼
  5. OAuth的簽名基本字符串應該是:(見的OAuth簽字1.0A規範)&所有oauth_參數(名稱=值),按字母順序排列你的請求對象的驗證頭,通過&分離編碼