4

我正在更改我的 php 代码以与新的 API 兼容,并且我被 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"}]}

可能是什么问题/我做错了什么?

4

2 回答 2

8

你可以这样尝试:

$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

于 2013-07-16T14:07:33.670 回答
1

虽然这个问题是几个月前的问题,但我想我会回答它,因为我花了几个小时来制作 update_with_media 并且无法在网上找到令人满意的答案。

遗憾的是,Twitter API 错误消息并不是那么具体。我能够找出以下推特错误:

  1. “错误无法验证您” - 可能意味着您的 OAuth 签名基础字符串不正确

  2. “错误不正确或缺少 uri” - 可能意味着您没有严格遵循 Twitter 在请求正文中所期望的格式。可能就像在您的请求正文中缺少一个 \n 一样简单

  3. “错误创建状态 - 可能意味着您的状态文本在不应该出现在多部分/表单数据请求的请求正文中时被编码
  4. “错误内部错误” - 这表明没有任何用处。这可能意味着您有一些数据在 twitter 期望时未编码,反之亦然。这也可能意味着您没有在请求正文中包含编码类型

要使 update_with_media 工作,这些提示可能会有所帮助:

  1. 请求的内容类型应为 multipart/form-data

  2. 请求正文应包含 twitter 期望的两个元素 media[] 和正确格式的状态 (RFC 2388)

  3. 此外,Twitter 服务器在请求正文的每个部分之后都需要 \r\n (CR LF)。跳过这会导致 Twitter 返回错误
  4. media[] 数据应为 base64 编码,请求正文中的 content-disposition 部分应具有 Content-Transfer-Encoding
  5. OAuth 签名基本字符串应为:(请参阅 OAuth 1.0A 签名规范)&All oauth_ parameters(name=value) 在请求对象的 Auth 标头中按字母顺序排列,用 & 分隔并编码
于 2013-12-08T01:06:23.503 回答