使用Twitter API发送推文时出现重复状态错误

时间:2016-05-01 20:57:35

标签: javascript node.js twitter twitter-streaming-api

我是JavaScript新手,我使用Node.js和Twitter API作为学习如何编码的方法。我也在使用Twit NPM包。我正在尝试创建一个“游戏”,其中必须通过Twitter发送特定短语才能开始。我有一个功能,如果特定短语没有发送到帐户,该帐户也会回复再试一次。

无论短语是否满足,此功能都可以使用一次。但是,如果同一个用户尝试再次发送一个短语(匹配短语与否)怎么办?如何避免出现重复状态错误?我不确定这里最好的方法是什么,因为它超出了我的知识范围。以下是代码的简化版本,在同一用户满足if条件后再返回重复状态错误,然后再次尝试发送推文:

var Twit          = require('twit');
var T             = new Twit(config);

// Start a stream for listening for @mentions
var stream = T.stream('statuses/filter', { track: ['@someusername'] });
stream.on('tweet', somePhrase);

function somePhrase(tweet) {

  var request = tweet.text;
  var trigger = /(?:[^"']|^)(\bsome phrase\b)(?!["'])/ig;
  var name    = tweet.user.screen_name;
  var nameID  = tweet.id_str;

  // check to see if the tweet does not meet the request trigger
  if (request != trigger) {

    var reply   = '@' + name + "try again";
    var params  = { status: reply };

  }
  // check to see if the request matches the request trigger
  if (request.match(trigger)) {

    var question = "what do you want to know?";
    var params = {
        status: question + ' @' + name,
        in_reply_to_status_id: nameID
    };
  }

  T.post('statuses/update', params, function(err, data, response) {
    if (err !== undefined) {
      console.log(err);
    } else {
      console.log('Tweeted: ' + params.status);
    }
  })
};

这是API返回的错误代码:

{ [Error: Status is a duplicate.]
  message: 'Status is a duplicate.',
  code: 187,
  allErrors: [ { code: 187, message: 'Status is a duplicate.' } ],
  twitterReply: { errors: [ [Object] ] },
  statusCode: 403 }

1 个答案:

答案 0 :(得分:1)

Twitter将帖子文本与最近的文本进行比较,以确定它是否重复。我不知道这种比较有多严格。但是,解决这个问题的一种可能方法是为每个状态文本附加一些独特的东西。

有用的唯一号码可以是已经播放的游戏数量的计数器。例如:“你想知道什么?@jaime#0001”

要创建这样的计数器,您可以使用数据库,但如果您不想使用数据库,则可以使用Twit npm包获取您在上一条推文中使用的数字并将其递增。这样,它始终是一个唯一的数字。

你也可以生成一个随机字符串来附加,但这不是一个好习惯。

编辑:如果字符长度不是问题(从Twitter is standing by the 140-character limit开始),您只需附加UNIX时间戳,它将始终是唯一的数字。使用Date()对象很容易包含它。