使用Firebase云功能

时间:2018-06-06 21:58:18

标签: javascript node.js firebase twitter google-cloud-functions

我的Firebase网络项目已经工作了几个月了。但是在2018年6月3日星期日,我的应用程序停止发送附有媒体(图像)的推文。在此之前,它已经工作了几个月。我没有在第3次之前更改失败的代码,我甚至还原到在该日期之前工作的代码但是应用程序仍然失败:(

SDK版本: 我使用的是最新版本的Firebase工具(3.18.6)和云功能(1.0.3)。与twit(2.2.10)一起用于twitter api的javascript库。 请注意我的项目也在使用上述旧版本,包括pre v1.0云功能。另请注意,我仍然可以发送常规文本推文而不是任何媒体(图像,gif,mp4)。

这主要与Twitter的API有关,但我不能排除在Firebase的Node.js环境中发生的一些时髦的事情。

如何重现: 为简单起见,我将链接到我最初在启动项目时使用的教程中的代码。

设置推特帐户并检索教程中概述的所有必要令牌。然后简单地调用下面的云功能,它将尝试发布当天的NASA图像。

该功能可以将图片上传到twitter服务器,我得到的回应是:

{ media_id: 1004461244487643100,
  media_id_string: '1004461244487643136',
  media_key: '5_1004461244487643136',
  size: 92917,
  expires_after_secs: 86400,
  image: { image_type: 'image/jpeg', w: 960, h: 1318 } }

但是,一旦尝试发布附带媒体的推文,我就会收到错误

  

代码324:'不支持的原始媒体类别'

在Twitter的文档中不存在:https://developer.twitter.com/en/docs/basics/response-codes.html

现在,Code 324确实存在,但在Twitter的文档中有不同的描述:

  

"媒体ID的验证失败"

我尚未收到。所以我的媒体ID是有效的,所以其他错误?没有在互联网上我可以找到有这个错误的人。

链接到教程代码: https://medium.freecodecamp.org/how-to-build-and-deploy-a-multifunctional-twitter-bot-49e941bb3092

重现问题的Javascript代码: ** index.js

'use strict';
const functions = require('firebase-functions');
const request = require('request');
const path = require('path');
const os = require('os');
const fs = require('fs');
const tmpDir = os.tmpdir(); // Ref to the temporary dir on worker machine

const Twit = require('twit');

const T = new Twit({
    consumer_key: 'your twitter key'
    ,consumer_secret: 'your twitter secret'
    ,access_token: 'your twitter token'
    ,access_token_secret: 'your twitter token secret'
});

exports.http_testMediaTweet = functions.https.onRequest((req, res) => {

    function getPhoto() {
        const parameters = {
            url: 'https://api.nasa.gov/planetary/apod',
            qs: {
                api_key: 'DEMO_KEY'
            },
            encoding: 'binary'
        };
        request.get(parameters, (err, response, body) => {
            if (err) {console.log('err: ' + err)}
            body = JSON.parse(body);
            var f = path.join(tmpDir, 'nasa.jpg');
            saveFile(body, f);
        });
    }

    function saveFile(body, fileName) {
        const file = fs.createWriteStream(fileName);
        request(body).pipe(file).on('close', err => {
          if (err) {
            console.log(err)
          } else {
            console.log('Media saved! '+body.title)
            const descriptionText = body.title
            uploadMedia(descriptionText, fileName);
          }
        })
    }

    function uploadMedia(descriptionText, fileName) {
        const filePath = path.join(__dirname, `../${fileName}`)
        console.log(`uploadMedia: file PATH ${fileName}`)
        T.postMediaChunked({
          file_path: fileName
        }, (err, data, respone) => {
          if (err) {
            console.log(err)
          } else {
            console.log(data)
            const params = {
              status: descriptionText,
              media_ids: data.media_id_string
            }
            postStatus(params);
          }
        })
    }

    function postStatus(params) {
        T.post('statuses/update', params, (err, data, respone) => {
          if (err) {
            console.log(err)
            res.status(500).send('Error: ' + err);
          } else {
            console.log('Status posted!')
            res.status(200).send('success');
          }
        })
    }

    // Do thing
    getPhoto();

});

我希望下周启动我的应用程序,但这对我来说已成为一个主要问题。我已经尝试了所有我能想到的东西,并为Twitter和js库提供了参考资料,但我似乎做得很对。希望有人可以对此有所了解,谢谢。

0 个答案:

没有答案