Мой веб-проект Firebase работает уже несколько месяцев.Но в воскресенье 3 июня 2018 года мое приложение перестало отправлять твиты с прикрепленными медиа-файлами (изображениями).До этого он работал несколько месяцев.Я не изменил код ошибки до 3-го, и я даже вернулся к коду, который работал до этой даты, но приложение все еще не работает: (
версии SDK: Я использую больше всегона сегодняшний день версии инструментов Firebase (3.18.6) и облачных функций (1.0.3). Наряду с twit (2.2.10) библиотека javascript для Twitter API. Обратите внимание, что мой проект также работал над старыми версиями выше, в том числедо v1.0 облачных функций. Также обратите внимание, что я все еще могу отправлять обычные текстовые твиты, но не с любым медиа (image, gif, mp4).
Это в основном относится к API Twitter, но я не могу управлятьчто-то необычное в среде Firebase Node.js.
Как воспроизвести: Для простоты я сошлюсь на код в учебнике, который я изначально использовал при запуске проекта.
Настройте учетную запись в Твиттере и получите все необходимые токены, как описано в учебном пособии, а затем просто вызовите облачную функцию ниже, и она попытается написать в ТвиттереИзображение дня НАСА.
Функция может загрузить изображение на сервер 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
Теперь, код 324 существует, но в документации Twitter есть другое описание:
"Проверка идентификаторов медиа не удалась"
Что у меня еще естьполучить.Итак, мой медиа-идентификатор действителен, значит, что-то еще не так?Где бы в Интернете я не мог найти кого-то с этой точной ошибкой.
Ссылка на учебный код: 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, но, похоже, все делаю правильно.Надеюсь, кто-то может пролить свет на это, спасибо.