我正在尝试使用Abraham的TwitterOAuth库(TwitterOAuthv0.2.0-beta2)实现来自AJAX的带媒体请求的上载。我对基本的帖子没什么问题,但当我试图把媒体也包括进来时,我得到的答复是:
"{"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库的media post获得了一个更新,但是由于我的小部件的其余部分使用twitteroauth,我更希望保持一致。我也试过在结尾加上和不加上.json,没有发现任何区别。有谁能给我展示一个使用twitteroauth成功实现update_with_media的例子吗?我好像弄不明白我做错了什么。
最佳答案
在用twitteraouth库处理了几个小时的用uMedia更新uU的解决方案后,我发现以下解决方案工作正常:
首先:从twitter devhere链接的php原始库不起作用。
不使用更新媒体
经过一番搜寻,我找到了同一个图书馆,但找到了一个解决办法。你可以在这里找到它:
https://github.com/tomi-heiskanen/twitteroauth/tree/77795ff40e4ec914bab4604e7063fa70a27077d4/twitteroauth
基本的区别在于,原始文件具有不带“$multipart”参数的函数“post”。这个参数允许发送twiter在文档中要求的内容:一个多部分enctype post。最后,基本代码如下:
$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)。