使用 Twitter 发推文时出现重复状态错误 API
Duplicate Status Error when Tweeting using Twitter API
我是 JavaScript 的新手,我正在使用 Node.js 和 Twitter API 作为学习编码的方式。我也在使用 Twit NPM 包。我正在尝试创建一个 "game",其中必须发布特定短语才能开始。我有一个功能,如果特定短语没有发送到帐户,该帐户也会回复重试。
无论词组是否满足,该功能只作用一次。但是,如果同一用户尝试再次发布一个短语(匹配或不匹配该短语)怎么办?如何避免出现重复状态错误?我不确定这里最好的方法是什么,因为它超出了我的知识范围。这是代码的简化版本,在同一用户满足 if
两个条件后,returns 出现重复状态错误,然后他们再次尝试发推文:
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 returns:
的错误代码
{ [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 }
Twitter 将 post 文本与最近的文本进行比较以确定它是否重复。我不知道这个比较有多严格。但是,解决这个问题的一种可能方法是为每个状态文本附加一些独特的东西。
一个有用的唯一数字可以是已玩游戏次数的计数器。例如:"What do you want to know? @jaime #0001"
要创建这样的计数器,您可以使用数据库,但如果您不想使用数据库,则可以使用 Twit npm 包来获取您在上一条推文中使用的数字并递增它.这样,它始终是一个唯一的数字。
您也可以只生成一个随机字符串来附加,但这不是一个好的做法。
编辑:如果字符长度不是问题(因为 Twitter is standing by the 140-character limit),您可以只附加 UNIX 时间戳,它始终是一个唯一的数字。这很容易包含在 Date() 对象中。
我是 JavaScript 的新手,我正在使用 Node.js 和 Twitter API 作为学习编码的方式。我也在使用 Twit NPM 包。我正在尝试创建一个 "game",其中必须发布特定短语才能开始。我有一个功能,如果特定短语没有发送到帐户,该帐户也会回复重试。
无论词组是否满足,该功能只作用一次。但是,如果同一用户尝试再次发布一个短语(匹配或不匹配该短语)怎么办?如何避免出现重复状态错误?我不确定这里最好的方法是什么,因为它超出了我的知识范围。这是代码的简化版本,在同一用户满足 if
两个条件后,returns 出现重复状态错误,然后他们再次尝试发推文:
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 returns:
的错误代码{ [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 }
Twitter 将 post 文本与最近的文本进行比较以确定它是否重复。我不知道这个比较有多严格。但是,解决这个问题的一种可能方法是为每个状态文本附加一些独特的东西。
一个有用的唯一数字可以是已玩游戏次数的计数器。例如:"What do you want to know? @jaime #0001"
要创建这样的计数器,您可以使用数据库,但如果您不想使用数据库,则可以使用 Twit npm 包来获取您在上一条推文中使用的数字并递增它.这样,它始终是一个唯一的数字。
您也可以只生成一个随机字符串来附加,但这不是一个好的做法。
编辑:如果字符长度不是问题(因为 Twitter is standing by the 140-character limit),您可以只附加 UNIX 时间戳,它始终是一个唯一的数字。这很容易包含在 Date() 对象中。