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

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

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

Мой код для публикации СМИ выглядит следующим образом:

<code>   $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);
</code>

Я проверил, что все данные отправляются в этот скрипт правильно, и даже удалось получить сообщение update_with_media, работающее с использованием тех же данных, что и выше, и библиотеки tmhOAuth, но, поскольку остальная часть моего виджета использует twitteroauth, я предпочитаю сохранять единообразие. Я также попробовал это с и без .json, прикрепленного к финалу, и не увидел никакой разницы. Может кто-нибудь показать мне пример успешной реализации update_with_media с использованием twitteroauth? Кажется, я не могу понять, что я делаю неправильно.

 abraham11 мая 2012 г., 00:21
TwitterOAuth в настоящее время не поддерживает загрузку мультимедиа. Я надеюсь добавить поддержку в будущем.
 Joey26 нояб. 2012 г., 16:16
@abraham, есть идеи, когда мы ожидаем поддержки загрузки медиа? Кроме того, что вы предлагаете тем, кто все еще хочет загружать медиа через свой сценарий?

Ответы на вопрос(5)

Исходная библиотека не включает функцию загрузки медиафайловyet. You may check out https://github.com/natefanaro/twitteroauth .

 29 июл. 2014 г., 00:28
К сожалению, это обновление библиотеки не работает с PHP 5.5 или выше.

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

First: the PHP original library linked from Twitter Dev here does not work.

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

After searching and searching, I found the same library but with a fix to do it. You can find it here: https://github.com/tomi-heiskanen/twitteroauth/tree/77795ff40e4ec914bab4604e7063fa70a27077d4/twitteroauth

Основное отличие заключается в том, что оригинал имеет функцию «пост». без & quot; $ multipart & quot; параметр. Этот параметр позволяет отправлять то, о чем просит Twiiter в документации: многосоставное сообщение энктипа. Итак, в конце основной код выглядит следующим образом:

$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) в вашем проекте.

 29 июл. 2014 г., 00:28
Brilliant! Спасибо, это сработало и для меня. К сожалению, библиотека Натефанаро не работает с PHP 5.5+ из-за требования CURLFile. Ваше решение и связанная ветвь библиотеки - это единственный вариант в этой теме, который работал для меня. Я также предполагаю, что fopen - лучший способ обработки изображения, поскольку он также должен позволять вам извлекать удаленное изображение.

нт для изучения и сравнения сообщений, которые отправляются с 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======--
 28 июн. 2012 г., 16:38
Это сообщения. Вы хотите, чтобы ваш код генерировал эти сообщения. Вы не запускаете его. Это результат.
 29 июн. 2012 г., 10:16
stackoverflow.com/questions/11243612/… какая проблема с этим? вы не могли бы мне помочь?
 28 июн. 2012 г., 13:36
уважаемый @Cheeso, не могли бы вы объяснить вышеприведенные строки ... где разместить этот код и как запустить? Это выше php

https://github.com/mynetx/codebird-php

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

    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));
 09 февр. 2014 г., 12:10
@ahojvole Очень жаль это слышать. Я использовал эту библиотеку год назад. Может быть, автор codebird что-то изменил. Вы должны проверить документацию codebird.
 09 февр. 2014 г., 12:12
@ahojvole Что такое cacert.pem, который вы упоминаете?
 06 февр. 2014 г., 23:11
Я боролся с авто-твиттингом уже несколько дней. Теперь я нашел ваш код, он кажется даже проще, чем любой другой, и я до сих пор не могу заставить его работать. Я скачал файлы codebird (codebird.php и cacert.pem), объявил переменные ключа и токена и изменил $ filename, чтобы он указывал на изображение на моем сервере. Это не работает :(
 14 февр. 2014 г., 19:23
@ gtsouk Это немного неловко, я не могу сказать, для чего нужен файл cacert.pem, однако codebird.php просит этот файл (возможно, в более поздних версиях) без этого файла, даже текст не получает твиттер.
 09 июл. 2013 г., 09:23
Потратив час на то, чтобы заставить Авраама твиттера сделать это, я нашел ваш ответ и через 3 минуты все заработало. Спасибо!

как: Поместите ваше сообщение здесь

 10 сент. 2014 г., 13:57
Вам следуетask a new question.

Ваш ответ на вопрос