Twitter API: невозможно опубликовать твит с медиафайлами, а параметр мультимедиа отсутствует при проверке статуса загрузPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Twitter API: невозможно опубликовать твит с медиафайлами, а параметр мультимедиа отсутствует при проверке статуса загруз

Сообщение Anonymous »

Я пытаюсь загрузить видео с текстом в Twitter с помощью API. Для этого я использую эту библиотеку PHP — https://github.com/jublo/codebird-php и следовал этому руководству — https://joelennon.com/posting-large-vid ... witter-in- php-with-codebird.
Мой окончательный код похож на учебник:-

Код: Выделить всё

$file = fopen('svid.mp4', 'rb');
$size = fstat($file)['size'];

$media = $twitter->media_upload([
'command' => 'INIT',
'media_type' => 'video/mp4',
'media_category' => 'tweet_video',
'total_bytes' => $size,
]);

$mediaId = $media->media_id_string;
$segmentId = 0;
while (!feof($file)) {
$chunk = fread($file, 4 * 1024 * 1024);

$media = $twitter->media_upload([
'command' => 'APPEND',
'media_id' => $mediaId,
'segment_index' => $segmentId,
'media' => $chunk,
]);

$segmentId++;
}

fclose($file);
$media = $twitter->media_upload([
'command' => 'FINALIZE',
'media_id' => $mediaId,
]);

var_dump($media);
if(isset($media->processing_info)) {
$info = $media->processing_info;
if($info->state != 'succeeded') {
$attempts = 0;
$checkAfterSecs = $info->check_after_secs;
$success = false;
do {
$attempts++;
sleep($checkAfterSecs);

$media = $twitter->media_upload([
'command' => 'STATUS',
'media_id' => $mediaId,
]);

$procInfo = $media->processing_info;

if($procInfo->state == 'succeeded' || $procInfo->state == 'failed') {
break;
}

$checkAfterSecs = $procInfo->check_after_secs;
} while($attempts  'This is the text of your tweet!',
'media_ids' => $mediaId,
];

$tweet = $twitter->statuses_update($params);
Теперь, когда загрузка завершена, var_dump выглядит следующим образом: -

object( stdClass)#7 (8) { ["media_id"]=> int(1879869571785728000)
["media_id_string"]=> string(19) "1879869571785728000" ["media_key"]=>
string(21) "7_1879869571785728000" ["size"]=> int(2848208)
["expires_after_secs"]=> int(86400) ["processing_info "]=>
object(stdClass)#5 (2) { ["state"]=> string(7) "pending"
["check_after_secs"]=> int(1) } ["httpstatus"]=> int (200) ["rate"]=>
object(stdClass)#10 (3) { ["limit"]=> string(3) "615" ["remaining"]=>
string(3) "605" ["reset"]=> string(10) "1737032398" }

Как видите, состояние находится в состоянии ожидания. Таким образом, невозможно будет опубликовать сообщение с использованием следующего кода: $tweet = $twitter->statuses_update($params);. Итак, я попытался запустить это, чтобы проверить проблему: -

Код: Выделить всё

$media = $twitter->media_upload([
'command' => 'STATUS',
'media_id' => '1879869571785728000',
]);
Это выдает следующее: -

object(stdClass)#6 (3) { ["errors"] => array(1) { [0]=>
object(stdClass)#9 (2) { ["code"]=> int(38) ["message"]=> string(27)
"отсутствует медиа-параметр." } } ["httpstatus"]=> int(400) ["rate"]=>
object(stdClass)#11 (3) { ["limit"]=> string(3) "415" [" rest"]=>
string(3) "391" ["reset"]=> string(10) "1737032321" }

Я пытался это изучить, но решения не нашел. Теперь кратко изложу проблемы, с которыми я столкнулся:-
  • Код: Выделить всё

    media parameter is missing
    при проверке статуса загрузки. Поэтому у меня нет возможности узнать, прошла ли загрузка успешно и успешно ли она обработана.
  • Код: Выделить всё

    $tweet = $twitter->statuses_update($params);
    не работает даже с удаленными media_ids (т. е. только текст). Я попробовал добавить твит с помощью двух других библиотек (https://github.com/abraham/twitteroauth и https://github.com/noweh/twitter-api-v2-php). В обоих случаях простой текст работает, но не работает с медиа. Но я пытался перейти на Codebird из-за простоты загрузки фрагментов.
  • Я попробовал запустить идентификатор носителя через https://docs.x.com/x-api. /mediaupload/media-upload-status?playground=open, чтобы узнать его статус, но он каждый раз выдает 404, независимо от конечной точки. Я пробовал все комбинации клиента Oauth и секрета, ключа потребителя/API, секрета и токена авторизации в пустой строке авторизации, но каждый раз просто выдает ошибку 404.
Может ли кто-нибудь указать мне правильное направление и сказать, что я делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/793 ... g-when-che
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»