gpt4 book ai didi

javascript - 如何在 Node.js 中将图像发布到 Twitter

转载 作者:行者123 更新时间:2023-11-30 12:06:07 25 4
gpt4 key购买 nike

当我尝试将 PNG 图像上传到 Node 中的 Twit 库时,出现错误。

我试图在 Node.js 中制作一个 Twitter 机器人,它生成随机 rgb 颜色,创建这种颜色的图片并发布推文。在 another question 的帮助下我现在知道如何在 Node 中创建 PNG Canvas ,但我不确定如何将它放入 Twit 库中。使用下面的代码我得到一个错误:44, message: 'media_ids parameter is invalid.' 这似乎来自 Twitter API。

官方 Twitter 文档说:

You may either upload the raw binary of the file or its base64-encoded contents.

我不确定该怎么做。我怎样才能让 Twitter API 接受我的 Canvas 作为 PNG 图像?

我的代码是:

var Twit = require('twit')
var Canvas = require('canvas');
var Image = Canvas.Image;


var T = new Twit({
consumer_key: '###'
, consumer_secret: '###'
, access_token: '###'
, access_token_secret: '###'
})

//Generate the canvas
var canvas = new Canvas(800, 800);
var context = canvas.getContext('2d');

function tweet() {

//Generate a random colour
var r = Math.floor((Math.random() * 256));
var g = Math.floor((Math.random() * 256));
var b = Math.floor((Math.random() * 256));
var color = "rgb("+r+","+g+","+b+")";

// draw box
context.beginPath();
context.moveTo(0, 00);
context.lineTo(0, 800);
context.lineTo(800, 800);
context.lineTo(800, 0);
context.closePath();
context.lineWidth = 5;
context.fillStyle = color;
context.fill();

var fs = require('fs')
, out = fs.createWriteStream(__dirname + '/text.png')
, stream = canvas.pngStream();
var dataUrl = canvas.pngStream().pipe(out);
//I'm not sure if this bit is really necessary

// first we must post the media to Twitter
T.post('media/upload', { media_data: canvas.toBuffer() }, function (err, data, response) {

// now we can reference the media and post a tweet (media will attach to the tweet)
var mediaIdStr = data.media_id_string
var params = { status: color, media_ids: [mediaIdStr] }

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

}
setTimeout(tweet, 30000);

最佳答案

推特docs说说使用 media/upload:

Parameters

media - The raw binary file content being uploaded. Cannot be used with media_data.

media_data - The base64-encoded file content being uploaded. Cannot be used with media.

您正在向此处的 media_data 参数提供原始数据:media_data: canvas.toBuffer()

要解决此问题,请上传 base64 编码的图像:

T.post('media/upload', { media_data: canvas.toBuffer().toString('base64') }, function (err, data, response) {

关于javascript - 如何在 Node.js 中将图像发布到 Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com