如何在Node.js中将图像发布到Twitter
当我尝试上传一个PNG图像到Node中的Twit库时,出现错误。
我试图在Node.js中制作一个生成随机RGB颜色的Twitter机器人,创build一个这种颜色的图片,并发布它。 在另外一个问题的帮助下,我现在知道如何在Node中创build一个canvas作为PNG,但是我不确定如何将它放到Twit库中。 使用下面的代码,我得到一个错误: 44, message: 'media_ids parameter is invalid.'
这似乎来自Twitter的API。
官方的Twitter文件说:
您可以上传文件的原始二进制文件或其base64编码的内容。
我不知道该怎么做。 我怎样才能让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);
Twitter的文件说这使用media/upload
:
参数
media
– 正在上传的原始二进制文件内容。 不能与media_data
一起使用。
media_data
– 正在上传的base64编码的文件内容。 不能与media
一起使用。
您正在向此处的media_data
参数提供原始数据: media_data: canvas.toBuffer()
要解决这个上传的图像base64编码:
T.post('media/upload', { media_data: canvas.toBuffer().toString('base64') }, function (err, data, response) {