【问题标题】:Cant post media to twitter api using nodejs无法使用nodejs将媒体发布到twitter api
【发布时间】:2019-12-12 10:48:14
【问题描述】:

好的,所以我有一个快递服务器,我用它来使用media/upload将图片发布到 Twitter。

app.post('/api/post-picture', (req, res) =>{
  client.post('media/upload', {"media": data}, // Here lies the problem
  function(error, media, response) {
      if (!error) {
        client.post('statuses/update', {
          status: 'TEST PICTURE',
          media_ids: media.media_id_string
        }, function(error, tweet, response){
          if(!error){
            res.json({status: 'success'})
          }else{
            res.json({error: response})
          }
        })
      }else{
        res.json({error: response})
      }
    });
});

在我的req.body.media 中,我有一个base64 编码的字符串,我将它发送到我的快递服务器。然后,我获取 base64 编码的图像,并将其转换回原始二进制数据:"

var buf = Buffer.from(req.body.media, 'base64');

然后我将 buf 变量传递给

client.post('media/upload', {"media": buf},

由于某些奇怪的原因,twitters api 说它无法识别该媒体类型: 确切的错误信息:

 "body": "{\"request\":\"\\/1.1\\/media\\/upload.json\",\"error\":\"media type unrecognized.\"}"

他们的 api 说:“媒体应该是正在上传的原始二进制文件内容”

我在这里做错了什么?

https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload.html

工作代码sn-p:


app.post('/api/post-picture', (req, res) =>{
  // var encodedimage = Buffer.from(data).toString('base64')
  var buf = Buffer.from(req.body.media.toString(), 'base64');
  client.post('media/upload', {"media": buf}, 
  function(error, media, response) {
      if (!error) {
        client.post('statuses/update', {
          status: 'TEST PICTURE',
          media_ids: media.media_id_string
        }, function(error, tweet, response){
          if(!error){
            res.json({status: 'success'})
          }else{
            res.json({error: response})
          }
        })
      }else{
        res.json({error: response})
      }
    });
});

Twitters api 也接受 base64 编码的字符串,但我也提供了它,它也会对我产生错误。

【问题讨论】:

    标签: node.js express twitter base64


    【解决方案1】:

    data:image/jpeg;base64 需要从数据中删除以便 twitter 接受它,这在他们的 api 的任何地方都没有记录。

    你可以这样做

    var base64Data = encodedImage.replace(/^data:image\/jpg;base64,/, "");

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      相关资源
      最近更新 更多