update_with_media с использованием twitteroauth от авраама

Я пытаюсь выполнить запрос upload_with_media от ajax, используя библиотеку twitteroauth Абрахама (TwitterOAuth v0.2.0-beta2). У меня не было проблем с базовыми сообщениями, но когда я пытаюсь включить медиа, я получаю это как ответ:

"{"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, прикрепленного к финалу, и не видел разницы. Может ли кто-нибудь показать мне пример успешной реализации update_with_media с использованием twitteroauth? Я не могу понять, что я делаю неправильно.

Related of "update_with_media с использованием twitteroauth от авраама"

Попробуйте использовать codebird-php https://github.com/mynetx/codebird-php

Оказывается, это делает трюк, несмотря на то, что он последний в списке php-библиотек, предложенных Twitter. Просто захватите codebird.php и cacert.pem из git repo.

  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)); 

После работы в течение часа для решения UPDATE_WITH_MEDIA с библиотекой twitteraouth я нашел следующее решение, которое отлично работает:

  • Во-первых: оригинальная библиотека PHP, связанная с Twitter Dev здесь не работает.

НЕ РАБОТАЕТ С UPDATE_WITH_MEDIA

Основное отличие заключается в том, что оригинал имеет функцию «пост» без параметра «$ multipart». Этот параметр позволяет отправить запрос Twiiter в документации: сообщение multipart 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) в своем проекте.

В исходную библиотеку пока нет функции загрузки медиа. Вы можете проверить https://github.com/natefanaro/twitteroauth .

Я предлагаю вам использовать Fiddler2 или какой-либо подобный инструмент для изучения и сравнения сообщений, которые выходят с помощью twitteroauth, а также с tmhOAuth. Вы увидите разницу.

По моему опыту, это выглядит HTTP POST для Twitter, используя update_with_media. {Xml, json}. Я полагаю, суффикс, который вы используете, влияет только на ответ. (Ваше приложение должно установить заголовок авторизации таким образом, который подходит для вашего приложения.)

Вы хотите, чтобы 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======-- 

Я хочу отправить ссылку url со статусом param

например: Поместите здесь сообщение