JavaScriptを初めて使用しています.Node.jsとTwitter APIを使用してコード作成方法を学習しています。私はTwit NPMパッケージも使用しています。私は、特定のフレーズを開始するためにツイートしなければならない「ゲーム」を作成しようとしています。特定のフレーズがアカウントにツイートされていない場合は、アカウントも返信して再試行する機能があります。Twitter APIを使用したTweetingの重複ステータスエラー
このフレーズが満たされているかどうかにかかわらず、この機能は一度動作します。しかし、同じユーザーがフレーズをもう一度つぶす場合(フレーズと一致するかどうか)はどうでしょうか?重複ステータスエラーを回避するにはどうすればよいですか?それが私の知識の範囲外であるので、私は最良のアプローチがここにあるかどうかはわかりません。
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が返すエラーコードである:ここでは、両方のif
の条件が同じユーザによって満たされていると、彼らはつぶやきを再試行した後に、重複ステータスエラーを返すコードの簡易版は、次のとおりです。
{ [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 }
「もう一度やり直して」ツイートして再度投稿することは可能でしょうか?重複ステータスエラーの回避策であるかどうかは不明です。 – filmplane
それはうまくいくはずだが、それはTwitterに依存するだろうね。正確に一致した最新のツイートのIDを見つけて 'T.post( 'statuses/destroy /:id')'呼び出しを行い、 'if(err.code == 187)'の下にネストすることができます。その後、その呼び出しから正常な応答を取得したら、必要に応じてタイムアウトを指定してポストを再度作成します。 –
重複したステータスを継続的に試みると禁止されたり、単に重複したツイートが出てこない場合は、Twitterのドキュメントからわかりません。私は、カウンタースタイルや無作為化された応答の配列に傾いています。回答の配列では、人々があまりにも多くの間違った回答でストレステストを試みることはないと考えています。彼らはあきらめるだけです。 – filmplane