使用 Twit 与机器人一起发布视频

问题描述 投票:0回答:2
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:无法识别的媒体类型,但我试图在第 88 行明确定义它。这也是完整的要点。 https://gist.github.com/MetzinAround/25b5771564aa7de183391398db52dbef

node.js twitter sttwitterapi
2个回答
0
投票

对于视频和 GIF,您需要使用分块媒体上传方法 - 您不能“单次”完成,它有多个阶段(初始化、附加、定稿),根据 Twitter 文档

请注意,要上传视频或 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 无法正确处理长整数,并且已损坏数值)


-2
投票

此代码不再有效。我得到下一个错误:

T.postMediaChunked 不是函数

你知道其他方法吗?其他图书馆可以吗?

© www.soinside.com 2019 - 2024. All rights reserved.