使用API​​将视频上传到Twitter

时间:2015-08-26 16:12:24

标签: php twitter

我正在使用库 tmhOAuth 在应用中发布到Twitter,我已经实现了上传图片,但我在实施视频上传时遇到了问题。

这是我用来上传图片并与图片完美配合的通话。

$temp = '@upload/'.$name.';type='.$_FILES['img']['type'].';filename='.$name;
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json', array('media' => $temp), true, true);

所以我认为视频可能相同,但我收到了错误

stdClass Object ( [request] => /1.1/media/upload.json [error] => media type unrecognized. )

我认为我必须根据Twitter API进行3次单独调用,所以我尝试了这个

$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=INIT&media_type=video/mp4&total_bytes='.$_FILES['img']['size'], array('media' => $temp), true, true);
$media_id = json_decode($tmhOAuth->response['response'])->media_id_string;
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=APPEND&media_id='.$media_id.'&segment_index=0', array('media' => $temp), true, true);
$media = $tmhOAuth->request('POST', 'https://upload.twitter.com/1.1/media/upload.json?command=FINALIZE&media_id='.$media_id, array('media' => $temp), true, true);

但是我为所有3个电话保持同样的错误

stdClass Object ( [request] => /1.1/media/upload.json [error] => media type unrecognized. )

有人可以举例说明如何将视频上传到Twitter吗?我在网上找不到任何例子,这可能是不可能的。

3 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。这就是我设法解决它的方法。 首先,设置一个 var ,其中包含要上传的媒体的文件系统完整路径。

$media_path = '/PATH/TO/THE/file.mp4';

然后实例化 $ tmhOAuth 并执行以下3个步骤:

$tmhOAuthUpload = new tmhOAuth();

<强> INIT

$code = $tmhOAuthUpload->request(
      'POST',
      $tmhOAuthUpload->url('/1.1/media/upload.json'),
      array(
          "command" => "INIT",
          "total_bytes" => (int)filesize($media_path),
          'media_type' => 'video/mp4',
      )
);

检索Twitter返回的媒体ID

$results = json_decode($tmhOAuthUpload->response['response']);
$media_id = $results->media_id_string;

APPEND :使用追加循环处理视频/媒体上传

$fp = fopen($media_path, 'r');
$segment_id = 0;
while (! feof($fp)) {
    $chunk = fread($fp, 1048576); // 1MB per chunk for this sample

    $tmhOAuthUpload->request(
        'POST',
        $tmhOAuthUpload->url('/1.1/media/upload.json'),
        array(
            "command" => "APPEND",
            "media_id" => $media_id,
            'media_data' => base64_encode($chunk),
            "segment_index" => $segment_id
        )
    );
    $segment_id++;
}

<强>定格

$tmhOAuthUpload->request(
     'POST',
     $tmhOAuthUpload->url('/1.1/media/upload.json'),
     array(
          "command" => "FINALIZE",
          "media_id" => $media_id,
     )
);

到那时我能够发送我的推文:

$code = $tmhOAuth->request(
      'POST',
      $tmhOAuthUpload->url('1.1/statuses/update'),
      array(
            'media_ids'  => $media_id,
            'status'   => $text,
      ),
      true // use auth
);

希望有所帮助

答案 1 :(得分:2)

非常感谢你的回答皮埃尔!然而,如果我过早地尝试创建推文,我会收到“无效视频”错误。该视频未由Twitter处理。除了皮埃尔的代码之外,在FINALIZE:

之后,我需要这样的东西来检查STATUS
$videoCount = 0;
do
{
    $tmhOAuth->request(
        'GET',
        $tmhOAuth->url('/1.1/media/upload.json'),
        array(
            "command" => "STATUS",
            "media_id" => $mediaID,
        )
    );
    $twitterResult = json_decode($tmhOAuth->response['response']);
    if ($twitterResult->processing_info->state != 'succeeded')
    { sleep(5); }
    $videoCount++;
}
while ($twitterResult->processing_info->state != 'succeeded' && $videoCount < 5);

注意:我的变量名称不同

答案 2 :(得分:1)

我只能使用CodeBird - 一个不同的PHP库来上传视频。

正如您所发现的那样,Twitter API调用视频与上传图像完全不同。

  

将视频上传到Twitter(≤15MB,MP4)要求您以块的形式发送它们。您需要至少执行3次调用才能获取视频的media_id:

     
      
  • 发送INIT事件以获取media_id草稿。

  •   
  • 使用APPEND事件上传您的块,每个事件的大小最多为5MB。

  •   
  • 发送FINALIZE事件以将草稿转换为准备推文media_id。
  •   
  • 发布附有视频的推文。
  •   

请记住,每个APPEND必须为5MB或以下。

如果您一直收到“Media Type Unrecognized”错误,则可能是您使用的视频与Twitter不兼容。您可以测试通过其他服务上传视频吗?