Редактировать 2020-28-02: ошибка на стороне Twitter (спасибо за полезный комментарий ). Я продолжаю поднимать вопрос, несмотря на отрицательные голоса, потому что это может произойти снова, и это может быть полезно для других с той же ошибкой "тип носителя не распознан".
У меня небольшое приложение, я в качестве единственного пользователя, обновляющего мой тематический c твиттер ежедневно. При нажатии на кнопку каждый день из пула в 12 выкладывается одно изображение размером менее 5 МБ jpg. Теперь Твиттер говорит мне: «тип носителя не распознан».
Это одно из изображений .
Симптомы:
- Я не могу загрузить одно и то же изображение в Twitter на веб-сайте. , Поэтому я предполагаю, что мои изображения были забанены при загрузке.
- Я могу загрузить png-версию того же изображения на сайт, но не с помощью моего PHP программного обеспечения. И это странно.
- Я могу загрузить другое изображение как из моего PHP сценария, так и на веб-сайте Twitter.
Я использую этот класс для своего PHP script
Единственная ошибка в моем журнале:
[22-Jan-2020 08:45:37 UTC] PHP Примечание: неопределенное свойство: stdClass: : $ media_id_string в /home/ABC/public_html/XYZ.php в строке 205
Это просто означает, что загрузка не удалась, поэтому Twitter API не ответил с идентификатором медиа (в эта точка равна NULL)
Это мой сценарий (вокруг этого есть logi c для определения текста и входа в систему):
require_once 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
define('CONSUMER_KEY', 'my consumer key');
define('CONSUMER_SECRET', 'my consumer secret');
define('ACCESS_TOKEN', 'my access token');
define('ACCESS_TOKEN_SECRET', 'my access secret');
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$postfields = array(
'media' => base64_encode(file_get_contents($image))
);
$media = $connection->upload('media/upload', ['media' => $image]);
$parameters = [
'status' => 'my tweet text, never longer than 200 chars'
'media_ids' => $media->media_id_string
];
$result = $connection->post('statuses/update', $parameters);
Повторюсь: это сработало без проблем месяцами я ничего не менял в нем. Он только начал публиковать текст без изображения.
Я понимаю, что есть несколько другие вопросы о аналогичная проблема с похожим сообщением об ошибке, но ни одно из решений не сработало для меня.
- Я восстановил свой токен доступа и секрет: ничего не изменилось
- Я попробовал загрузку по частям: тот же результат
- Я сделал новые файлы jpg с размером на 1 пиксель меньше, поэтому я обманул Twitter, это может быть другое изображение: это не обмануло twitter
- Я пытался до
sleep(1)
после строки загрузки: это было нелогично и глупо с моей стороны (но я подумал, что загрузка может быть медленной, так как один из людей, имеющих такую же проблему с javascript версией, решил ее так)