2016-05-01 11 views
0

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 } 

答えて

1

Twitterは投稿テキストを最新のテキストと比較して、それが重複しているかどうかを判断します。私はこの比較がどれほど厳しいか分かりません。しかし、これを回避するための1つの方法は、各ステータステキストに固有のものを追加することです。

有用な一意の数字は、プレイされたゲームの数のカウンターになる可能性があります。例: "何を知りたいですか?@jaime#0001"

このようなカウンタを作成するにはデータベースを使用できますが、データベースを使用したくない場合はTwit npmあなたの最後のつぶやきで使用した番号を取得し、それをインクリメントします。そうすれば、それは常にユニークな数字になります。

追加するランダムな文字列を生成することもできますが、それは良い方法ではありません。

編集:文字の長さが問題でない場合(Twitter is standing by the 140-character limit以降)、UNIXタイムスタンプを追加することができます。これは常に一意の番号になります。これはDate()オブジェクトに組み込むのが非常に簡単です。

+0

「もう一度やり直して」ツイートして再度投稿することは可能でしょうか?重複ステータスエラーの回避策であるかどうかは不明です。 – filmplane

+1

それはうまくいくはずだが、それはTwitterに依存するだろうね。正確に一致した最新のツイートのIDを見つけて 'T.post( 'statuses/destroy /:id')'呼び出しを行い、 'if(err.code == 187)'の下にネストすることができます。その後、その呼び出しから正常な応答を取得したら、必要に応じてタイムアウトを指定してポストを再度作成します。 –

+0

重複したステータスを継続的に試みると禁止されたり、単に重複したツイートが出てこない場合は、Twitterのドキュメントからわかりません。私は、カウンタースタイルや無作為化された応答の配列に傾いています。回答の配列では、人々があまりにも多くの間違った回答でストレステストを試みることはないと考えています。彼らはあきらめるだけです。 – filmplane

関連する問題