0
function fridayNight(){
const videoPath = "C:\\GitHub\\DivasLive\\DivasLive\\nsync.mp4";
console.log("It's Friday night and I just Got Paid!");

var b64content = fs.readFileSync(videoPath, { encoding: 'base64' });
var mediaType = MIM.getMIMEType(videoPath);

 T.post('media/upload', { media_data: b64content, media_type: mediaType }, function (err, data, 
 response) 
 {
 if(err) 
 {
  console.log(err);
 } else 
 { 

 console.log(data);
 var mediaIdStr = data.media_id_string
 var params = { status: "Just got paid!", media_id: [mediaIdStr] };

 T.post('statuses/update', params, function (err, data, response) 
  {
    console.log(data);
    console.log(err);
  });
   };
 });
};

我不断收到 400: Media type unrecognized,但我试图在第 88 行明确定义它。这也是完整的要点。https://gist.github.com/MetzinAround/25b5771564aa7de183391398db52dbef

4

1 回答 1

0

对于视频和 GIF,您需要使用分块媒体上传方法 -根据 Twitter 文档,您不能“一次性”完成,它有多个阶段(INIT、APPEND、FINALIZE)。

请注意,要上传视频或 GIF(tweet_video、amplify_video 和 tweet_gif),您需要使用分块上传端点。

事实证明,该twit模块有一个辅助方法来执行此操作,postMediaChunked这也使您不必告诉 Twitter 数据的 mime 类型,这意味着您可以删除mim模块的导入。

这是仅执行媒体部分的最小示例-您只需要提取media_id_string并在statuses/update通话中使用它:

// Create an Twitter object to connect to Twitter API
const Twit = require('twit')

// Making a Twit object for connection to the API
const T = new Twit(config)

var filePath = '/Users/myuser/Downloads/robot.mp4'
T.postMediaChunked({
  file_path: filePath
}, function (err, data, response) {
  console.log(data)
})

输出:

{
  media_id: 1379414276864151600,
  media_id_string: '1379414276864151557',
  media_key: '7_1379414276864151557',
  size: 924669,
  expires_after_secs: 86400,
  processing_info: { state: 'pending', check_after_secs: 1 }
}

(请注意,在 JavaScript 中,您应该始终使用 Twitter ID 的字符串版本 - 正如您在此处看到的,数字版本media_id不匹配media_id_string,因为 JavaScript 无法正确处理长整数,并且已经破坏了数值)

于 2021-04-06T12:51:12.707 回答