通过Twit w / Node.js发布Twitter线程

时间:2019-02-09 02:03:54

标签: javascript node.js npm twitter

我正在使用Node和npm Twit模块将推文发布到Twitter。工作正常。。。

我可以成功发布一条没有任何问题的推文。但是,当我尝试将一串推文一起发布时(例如Twitter上的一个线程),这些推文无法正确显示。这是我的代码的相关部分。

基本上,我可以发布初始tweet没问题(函数中的“ first”参数)。然后,我获得该推文的唯一ID(同样,没有问题),并尝试遍历字符串数组(“后继”参数)并发布对该推文的回复。这是代码:

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上的同一主题下显示。看起来是这样的:(这里还应该有两个“ subtweets”。这些tweets是“ post”,但与原始消息分开):

enter image description here

还有其他人在Twitter API上遇到过类似的问题吗?知道如何通过Twit更优雅地执行线程吗?谢谢!

2 个答案:

答案 0 :(得分:1)

我知道该怎么办。

正如安迪·派珀(Andy Piper)所述,我需要响应特定的tweet ID,而不是线程中的原始tweet ID。因此,我通过将twit模块包装在promise包装器中来重构代码,并使用了async / await的for循环。像这样:

if ps aux | grep ./bm_d21_debug | grep -v grep >/dev/null;then
    pid=$(ps aux | grep ./bm_d21_debug | grep -v grep | awk '{print $2}')
    kill $pid
    echo $pid
fi

答案 1 :(得分:0)

使用twit线程

Twit Thread是一个用Typescript编写的Node.js模块,可将实用程序功能添加到Twit Twitter API Wrapper,并帮助您在twitter bot中实现线程。

const { TwitThread } = require("twit-thread");
// or import { TwitThread } from "twit-thread" in Typescript

const config = {
  consumer_key:         '...',
  consumer_secret:      '...',
  access_token:         '...',
  access_token_secret:  '...',
  timeout_ms:           60*1000,  // optional HTTP request timeout to apply to all requests.
  strictSSL:            true,     // optional - requires SSL certificates to be valid.
};

}
async function tweetThread() {
   const t = new TwitThread(config);

   await t.tweetThread([
     {text: "hello, message 1/3"}, 
     {text: "this is a thread 2/3"}, 
     {text: "bye 3/3"}
   ]);
}

tweetThread();

更多信息:https://www.npmjs.com/package/twit-thread