используя Twitter API Stream для нескольких учетных записей Twitter? - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над проектом, в котором аудиофайлы на raspberry pi запускаются твитами с определенных учетных записей.

Я использую node.js и пакет twit npm. Я смог заставить его работать при использовании двух разных учетных записей Twitter. Однако, когда я пытаюсь сделать это с несколькими учетными записями (15+), это не работает.

Мой рабочий код:

var userID1 = 'XXXXXXX'; //userID of first account 
var userID2 = 'XXXXXXX'; //UserdIp of Second account

//Following code set up stream just for USERID1
var stream = T.stream('statuses/filter', { follow: ( userID1 ) });  
stream.on('tweet', function (tweet) {

// two variables to store tweet time  and actual tweet
var tweetTime = new Date().toLocaleString();
var printTweet = tweet.text;

if (tweet.user.id == userID1 ) {

    printTweet.toString()//converts printTweet to String
    console.log(printTweet) //prints tweet as variable
    console.log("Tweet has been received from UserID1 + tweetTime");
    audio();
  }
});


//Following code set up stream just for USERID2
var stream = T.stream('statuses/filter', { follow: (  userID2 ) });  
stream.on('tweet', function (tweet) {


// two variables to store tweet time  and actual tweet
var tweetTime2 = new Date().toLocaleString();
var printTweet2 = tweet.text;

    if(tweet.user.id == userID2 ) {

        printTweet2.toString()//converts printTweet to String
        console.log(printTweet2) //prints tweet as variable
        console.log("Tweet has been received from UserID2" + tweetTime2);
        audio();

    }

 });

Как я отмечаю, когда я добавляю несколько учетных записей, он не работает. Он не выдает сообщение об ошибке, а просто зависает (никакой реакции на твиты). Я подумал, что проблема может заключаться в том, что мне нужен только один var stream или один экземпляр stream.on, поэтому я попробовал это:

var userID1 = 'XXXXXXX'; //userID of first account 
var userID2 = 'XXXXXXX'; //UserdID of Second account
var userID3 = 'xxxxxxx'; //user ID pf third account 
//I then have userID of another 15 accounts. 


//Following code set up stream just for all user IDs 
var stream = T.stream('statuses/filter', { follow: ( userID1, userID2, ****15 more userID***** ) });  

//just one stream.on for all followed twitter accounts
stream.on('tweet', function (tweet) {



//conditional for userID1
if (tweet.user.id == userID1 ) {

    // two variables to store tweet time and actual tweet
    var tweetTime = new Date().toLocaleString();
    var printTweet = tweet.text;

    printTweet.toString()//converts printTweet to String
    console.log(printTweet) //prints tweet as variable
    console.log("Tweet has been received from UserID1 + tweetTime");
    audio();
  }


//conditional for userID2  
    if(tweet.user.id == userID2 ) {

        // two variables to store tweet time and actual tweet
        var tweetTime = new Date().toLocaleString();
        var printTweet = tweet.text;

        printTweet2.toString()//converts printTweet to String
        console.log(printTweet2) //prints tweet as variable
        console.log("Tweet has been received from UserID2" + tweetTime2);
        audio();

}

//same conditional above done 15 more times for other accounts  

 });

Но опять-таки он просто зависает.

Любое предложение было бы замечательно.

1 Ответ

1 голос
/ 13 ноября 2019

Существует проблема с тем, как вы объявляете список follow. Это должен быть разделенный запятыми список идентификаторов пользователей, в то время как в вашем коде вы просто используете оператор запятой . Попробуйте изменить его на что-то вроде этого:

{ follow: [ userID1, userID2, ... , userID17 ].join(',') }

во втором примере кода (что, на мой взгляд, лучше), чтобы полученный код выглядел так:

var stream = T.stream('statuses/filter', { follow: [ userID1, userID2, ... , userID17 ].join(',') });  

//just one stream.on for all followed twitter accounts
stream.on('tweet', function (tweet) {

//conditional for userID1
if (tweet.user.id == userID1 ) {

    // two variables to store tweet time and actual tweet
    var tweetTime = new Date().toLocaleString();
    var printTweet = tweet.text;

    printTweet.toString()//converts printTweet to String
    console.log(printTweet) //prints tweet as variable
    console.log("Tweet has been received from UserID1 + tweetTime");
    audio();
  }


//conditional for userID2  
    if(tweet.user.id == userID2 ) {

        // two variables to store tweet time and actual tweet
        var tweetTime = new Date().toLocaleString();
        var printTweet = tweet.text;

        printTweet2.toString()//converts printTweet to String
        console.log(printTweet2) //prints tweet as variable
        console.log("Tweet has been received from UserID2" + tweetTime2);
        audio();

}

//same conditional above done 15 more times for other accounts  

 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...