Публикация темы в Твиттере через Twit с Node.js - PullRequest
0 голосов
/ 09 февраля 2019

Я использую Node и модуль Twit npm, чтобы публиковать твиты в Twitter.Это работает .... вроде.

Я могу успешно опубликовать один твит без каких-либо проблем.Однако, когда я пытаюсь опубликовать строку твитов вместе (например, в твиттере), они не отображаются правильно.Вот соответствующий бит моего кода.

По сути, я могу опубликовать исходный твит без проблем («первый» аргумент в функции).Затем я получаю уникальный идентификатор этого твита (опять же, без проблем) и пытаюсь перебрать массив строк («последующий» аргумент) и опубликовать ответы на этот твит.Вот код:

const tweet = (first, subsequent) => { 
  bot.post('statuses/update', { status: `${first}` }, (err,data, response) => {
    if (err) {
      console.log(err);
    } else {
      console.log(`${data.text} tweeted!`);

   /// Find the tweet and then subtweet it!
      var options = { screen_name: 'DoDContractBot', count: 1 };
      bot.get('statuses/user_timeline', options , function(err, data) {
        if (err) throw err;

        let tweetId = data[0].id_str;
        for(let i = 1; i < subsequent.length; i++){
          let status = subsequent[i];
          bot.post('statuses/update', { status, in_reply_to_status_id: tweetId }, (err, data, response) => {
            if(err) throw err;
            console.log(`${subsequent[i]} was posted!`);
          })
        }

      });
    }
  });
};

По какой-то причине твиты не отображаются в одной и той же ветке в Twitter.Вот как это выглядит: (здесь должно быть еще два «подвета». Эти твиты «постят», но отделены от оригинала):

enter image description here

У кого-нибудь еще были подобные проблемы с Twitter API?Любая идея, как более изящно сделать поток через Twit?Спасибо!

1 Ответ

0 голосов
/ 23 февраля 2019

Я понял, что делать.

Как упоминал Энди Пайпер, мне нужно было ответить на конкретный идентификатор твита, а не на исходный идентификатор твита в ветке.Поэтому я реорганизовал свой код, обернув модуль twit в оболочку обещаний, и использовал цикл for с async / await.Как это:

const Twit = require('twit');
const config = require('./config');
const util = require("util");
const bot = new Twit(config);

// Wrapping my code in a promise wrapper...
let post_promise = require('util').promisify( // Wrap post function w/ promisify to allow for sequential posting.
  (options, data, cb) => bot.post(
    options,
    data,
    (err, ...results) => cb(err, results)
  )
);

// Async/await for the results of the previous post, get the id...
const tweet_crafter = async (array, id) => { 
  for(let i = 1; i < array.length; i++){
    let content = await post_promise('statuses/update', { status: array[i], in_reply_to_status_id: id });
    id = content[0].id_str;
  };
};

const tweet = (first, subsequent) => { 
  post_promise('statuses/update', { status: `${first}` })
    .then((top_tweet) => {
        console.log(`${top_tweet[0].text} tweeted!`);
        let starting_id = top_tweet[0].id_str; // Get top-line tweet ID...
        tweet_crafter(subsequent, starting_id);
    })
    .catch(err => console.log(err));
};

module.exports = tweet;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...