首页 > 解决方案 > 使用 codebird 时出现错误代码 324“无效视频”

问题描述

我正在使用最新版本的 Codebird 从我的网站发推文。我正在尝试添加推文视频的功能,代码成功推文图像。

我在网上找不到任何其他内容。这是代码:

\Codebird\Codebird::setConsumerKey(xxxx, xxxx);
$cb = \Codebird\Codebird::getInstance();
$cb->setToken(xxxx, xxxx);

$video = /path/to/file.mp4
$params = [
    'status' => mb_substr('the tweet text', 0, 280),
    'media_ids' => twitterUpdloadLargeFile($cb, $video)
];
$reply = $cb->statuses_update($params); // code 324 'not valid video'


function twitterUpdloadLargeFile($cb, $video) {
    $size_bytes = filesize($video); // test video 2.5MB
    $mime = mime_content_type($video);
    $fp  = fopen($video, 'r');

    $reply = $cb->media_upload([
      'command'     => 'INIT',
      'media_type'  => $mime,
      'media_category' => 'tweet_video',
      'check_progress' => true,
      'total_bytes' => $size_bytes,
    ]);
    $media_id = $reply->media_id_string;
    $segment_id = 0;
    while (! feof($fp)) {
      $chunk = fread($fp, 524288); // 512KB per chunk
      $reply = $cb->media_upload([
        'command'       => 'APPEND',
        'media_id'      => $media_id,
        'segment_index' => $segment_id,
        'media'         => $chunk
      ]);
       $segment_id++;
     }
    fclose($fp);

    $reply = $cb->media_upload([
      'command'       => 'FINALIZE',
      'media_id'      => $media_id,
      'media_category' => 'tweet_video',
    ]);
   return $reply->media_id_string;
}

上面的代码导致代码 324 和消息“无效视频”,Twitter 上没有任何显示。

INIT 上传给出状态 202。每个 APPEND 给出状态 204。“FINALIZE”上传给出状态 200。

标签: phptwittercodebird

解决方案


正如 Andy Piper 所建议的,我需要在使用 media_id 之前为视频上传添加状态检查。

解决方案:

\Codebird\Codebird::setConsumerKey(xxxx, xxxx);
$cb = \Codebird\Codebird::getInstance();
$cb->setToken(xxxx, xxxx);

$video = /path/to/file.mp4
$params = [
    'status' => mb_substr('the tweet text', 0, 280),
    'media_ids' => twitterUpdloadLargeFile($cb, $video)
];
$reply = $cb->statuses_update($params); // code 324 'not valid video'


function twitterUpdloadLargeFile($cb, $video) {
    $size_bytes = filesize($video); // test video 2.5MB
    $mime = mime_content_type($video);
    $fp  = fopen($video, 'r');

    $reply = $cb->media_upload([
      'command'     => 'INIT',
      'media_type'  => $mime,
      'media_category' => 'tweet_video',
      'check_progress' => true,
      'total_bytes' => $size_bytes,
    ]);
    $media_id = $reply->media_id_string;
    $segment_id = 0;
    while (! feof($fp)) {
      $chunk = fread($fp, 524288); // 512KB per chunk
      $reply = $cb->media_upload([
        'command'       => 'APPEND',
        'media_id'      => $media_id,
        'segment_index' => $segment_id,
        'media'         => $chunk
      ]);
       $segment_id++;
     }
    fclose($fp);

    $reply = $cb->media_upload([
      'command'       => 'FINALIZE',
      'media_id'      => $media_id,
      'media_category' => 'tweet_video',
    ]);

    $notDone = true;
    while($notDone) {
        $reply = $cb->media_upload([
          'command'       => 'STATUS',
          'media_id'      => $media_id,
        ]);
        if (!empty($reply->processing_info->check_after_secs)) {
            sleep($reply->processing_info->check_after_secs);
        } else {
            $notDone = false;
        }
    }
   return $reply->media_id_string;
}

现在它可以正常工作了。


推荐阅读