Twitter api 1.1 update_with_media

时间:2013-06-13 07:56:40

标签: php twitter

我正在更改我的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"}]}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

虽然这个问题已经有几个月了,但我想我会回答这个问题,因为我花了几个小时的时间来完成update_with_media的工作并且无法在网上找到满意的答案。

不幸的是,Twitter API错误消息并不具体。我能够弄清楚foll twitter的错误:

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

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

  3. “错误创建状态 - 可能意味着当状态文本不应位于multipart / form-data请求的请求主体中时,会对其进行编码
  4. “错误内部错误” - 这个没有任何用处。这可能意味着当twitter期望它时,您有一些未编码的数据,反之亦然。它也可能意味着您没有在请求正文中包含编码类型
  5. 要使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签名规范)&所有oauth_参数(name = value)在您的请求对象的Auth标题中按字母顺序排列,并以&和编码