8

我正在尝试使用 Abraham 的 twitteroauth 库(TwitterOAuth v0.2.0-beta2)实现来自 ajax 的 upload_with_media 请求。我对基本帖子没有任何问题,但是当我尝试包含媒体时,我得到以下回复:

"{"request":"\/1\/statuses\/update_with_media.json","error":"Error creating status."}"

我发布媒体的代码如下所示:

   $image = $_FILES["media"]["tmp_name"];

    $parameters = array(
        'media[]'  => "@{$image};type=image/jpeg;filename={$image}",
        'status'   => $status
      );

    if(isset($reply_id)) {
        $parameters['in_reply_to_status_id'] = $reply_id;
    }
    $post = $twitteroauth->post('https://upload.twitter.com/1/statuses/update_with_media.json', $parameters);
    echo json_encode($post);

我已经验证所有数据都正确地发送到这个脚本,甚至设法使用上面的相同数据和 tmhOAuth 库来获得一个 update_with_media 帖子,但是由于我的小部件的其余部分使用 twitteroauth,我更愿意保持统一。我也尝试过在结尾加上和不带 .json 的情况下,没有发现任何区别。谁能给我看一个使用 twitteroauth 成功实现 update_with_media 的例子?我似乎无法弄清楚我做错了什么。

4

5 回答 5

5

在几个小时内使用 twitterauth 库处理 UPDATE_WITH_MEDIA 的解决方案后,我发现以下解决方案可以正常工作:

不适用于 UPDATE_WITH_MEDIA

基本的区别是原版有函数“post”,没有“$multipart”参数。此参数允许发送 Twiiter 在文档中要求的内容:多部分 enctype 帖子。所以最后基本代码如下:

$image_path="folder/image.jpg";

$handle = fopen($image_path,'rb');
$image  = fread($handle,filesize($image_path));
fclose($handle);

$params = array(
  'media[]' => "{$image};type=image/jpeg;filename={$image_path}",
  'status'  => "Put your message here, must be less than 117 characters!"
);
$post = $connection->post('statuses/update_with_media', $params, true);

重要的!如果您使用原始库尝试此代码,您会发现错误。您必须从上面的链接下载并替换项目中的两个文件(OAuth.php 和 twitteroauth.php)。

于 2014-07-10T13:11:46.013 回答
4

尝试使用 codebird-php https://github.com/mynetx/codebird-php

事实证明,尽管它在 Twitter 建议的 php 库列表中排在最后,但它确实起到了作用。只需从 git repo 中获取 codebird.php 和 cacert.pem 即可。

    include_once('codebird.php');
    \Codebird\Codebird::setConsumerKey($consumer_key, $consumer_secret);
    $cb = \Codebird\Codebird::getInstance();
    $cb->setToken($token, $token_secret);
    $status = 'Gamo, I just tweeted with an image!';
    $filename = '/home/asdf/test.png';
    $cb->statuses_updateWithMedia(array('status' => $status, 'media[]' => $filename));
于 2013-02-21T17:57:37.473 回答
2

原始库尚不包含上传媒体功能。您可以查看https://github.com/natefanaro/twitteroauth

于 2013-11-07T12:35:24.193 回答
0

我建议您使用 Fiddler2 或一些类似的工具来检查和比较使用 twitteroauth 和 tmhOAuth 发出的消息。你会看到不同之处。

根据我的经验,这就是使用 update_with_media.{xml,json} 向 Twitter 发送 HTTP POST 的样子。我相信,您使用的后缀只会影响响应。(您的应用必须以特定于您的应用的方式设置 Authorization 标头。)

您想让 twitteroauth 发布类似以下内容

POST https://upload.twitter.com/1/statuses/update_with_media.xml HTTP/1.1
Authorization: OAuth oauth_callback="oob", oauth_consumer_key="xxxxxxxxxxxx", oauth_nonce="7774328k", oauth_signature="pUYjRnccmrBYiO1j9cliETsw%2B5s%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318300521", oauth_token="59152613-vrlZ2edX56PudQtBmpAWd3SPDt9cPyAhibO7ysl6W", oauth_version="1.0"
Content-Type: multipart/form-data; boundary=======c49479438c600bf59345e======
Host: upload.twitter.com
Content-Length: 7320
Connection: Keep-Alive

--======c49479438c600bf59345e======
Content-Disposition: form-data; name="status"

working on a Tweet tool that uses the OAuth Manager library.
--======c49479438c600bf59345e======
Content-Disposition: file; name="media[]"; filename="ThisIsAPicture.png"
Content-Type: image/png

  ...binary png data here...

--======c49479438c600bf59345e======--
于 2012-05-10T13:10:39.973 回答
0

我想发送带有状态参数的 url 链接

喜欢:把你的消息放在这里

于 2014-09-10T11:41:21.240 回答