使用 Twit 通过机器人发布视频

Posted

技术标签:

【中文标题】使用 Twit 通过机器人发布视频【英文标题】:Using Twit to post a video with a bot 【发布时间】:2021-07-01 14:31:57 【问题描述】:
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

【问题讨论】:

【参考方案1】:

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

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

事实证明,twit 模块有一个辅助方法,postMediaChunked - 这也让你不必告诉 Twitter 数据的 mime 类型,这意味着你可以删除 @987654324 的导入@模块。

这是一个仅做媒体部分的最小示例 - 您只需提取 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 无法正确处理长整数,并且已经破坏了数值)

【讨论】:

我是否理解 Data 是一个对象,而 media_id_string 是该对象的一个​​属性?如果我需要稍后调用 Media_id_string,我是否使用 data.media_id_string 来调用? 是的,应该这样做。数据是来自 API 的 JSON 响应。

以上是关于使用 Twit 通过机器人发布视频的主要内容,如果未能解决你的问题,请参考以下文章

使用 twit npm 从 user_timeline 获取最新推文

Twitter Bot Node.js 和 Twit 包

Pepper 和 NAO 机器人的远程视频流

来自机器人通过 UDP 发送的图像在服务器 (PC) 上的实时视频流

使用Twit包在用户资料上发布Tweet

Javascript - 将图像发布到 Twitter 且不重复