我试图实现从阿贾克斯用亚伯拉罕的twitteroauth的库(TwitterOAuth对象v0.2.0-β2)的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);
我已经验证了所有的数据被正确发送到这个脚本,甚至设法得到一个update_with_media后使用相同的数据之上和tmhOAuth库,但因为我的小工具的其余部分使用twitteroauth的工作,我宁愿让事情变得均匀。 我也有和没有贴结局以.json试了一下,看到没有什么区别。 谁能告诉我一个成功的实施使用twitteroauth的update_with_media的例子吗? 我似乎无法找出我做错了什么。
在小时处理的解决方案,以UPDATE_WITH_MEDIA与twitteraouth库后,我发现下面的解决方案,工作正常:
- 第一:从Twitter开发链接的PHP原始库在这里不起作用。
是不是跟UPDATE_WITH_MEDIA WORKING
- 寻寻觅觅之后,我发现了同样的库,但与修复做。 你可以在这里找到它: https://github.com/tomi-heiskanen/twitteroauth/tree/77795ff40e4ec914bab4604e7063fa70a27077d4/twitteroauth
基本性差异的是,原本具有的功能“后”没有“$多”参数。 这个参数是什么让送什么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)在您的项目。
尝试使用codebird的PHP https://github.com/mynetx/codebird-php
它会证明它的伎俩,尽管由Twitter提出的PHP库列表中是最后一个。 只要抓住从混帐回购协议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));
原来的库不包括媒体上传功能呢 。 可以签出https://github.com/natefanaro/twitteroauth 。
我建议你使用Fiddler2或一些类似的工具来检查和比较,走出去与twitteroauth的消息,同时还与tmhOAuth。 你会看到其中的差别。
根据我的经验,这是一个HTTP POST到Twitter的样子,用update_with_media。{XML,JSON}。 您所使用的后缀只影响respponse,我相信。 (您的应用程序必须设置的方式,具体到你的应用程序的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======--