Несколько вызовов API потоковой передачи Twitter в Node.js с использованием ntwitter - PullRequest
4 голосов
/ 01 февраля 2012

У меня есть следующий код:

var access_token_key, access_token_secret, consumer_key, consumer_secret, get_twitter, listen, twitter;

twitter = require('ntwitter');

consumer_key = 'bogus';
consumer_secret = 'fake';

// consumer
access_token_key = 'falsey';
access_token_secret = 'unreal';

get_twitter = function(key, secret) {
  return new twitter({
    consumer_key: consumer_key,
    consumer_secret: consumer_secret,
    access_token_key: key,
    access_token_secret: secret
  });
};

listen = function(feed) {
  var api = get_twitter(access_token_key, access_token_secret);
  return api.stream('statuses/filter', {track: feed.track}, function(stream) {
    console.log('setting up stream for %s', feed.track);        

    stream.on('data', function(data) {
      console.log('data for %s', feed.track);
      console.log('\t' + data.user.screen_name + ': ' + data.text);
    });

    stream.on('end', function(response) {
      console.log('ending stream for %s', feed.track);
    });

    stream.on('destroy', function(response) {
      console.log('destroying stream for %s', feed.track);
    });
  });
};

module.exports.listen = listen;

Когда я звоню listen({track: 'superbowl'}), это работает.Ура!Это делает все, что должно сделать небольшое приложение!Я получаю это в консоли:

setting up stream for superbowl
data for superbowl
    user: tweet

Но после этого я звоню listen({track: 'humble bundle'}), он устанавливает новый поток, но это происходит:

setting up stream for humble bundle
ending stream for superbowl
destroying stream for superbowl
data for humble bundle
     user: tweet

Я что-то делаюнеправильно здесь?Есть ли какая-то концепция Node или Twitter, которую я еще не полностью осознал?

1 Ответ

6 голосов
/ 01 февраля 2012

Из документов потокового API Twitter (https://dev.twitter.com/docs/streaming-api/concepts) в разделе Ограничение доступа и скорости:

Каждая учетная запись может создавать только одно постоянное соединение с API потоковой передачи. Последующие подключения из той же учетной записи могут вызывать ранееУстановленные соединения должны быть отключены. Чрезмерные попытки подключения, независимо от успеха, приведут к автоматическому блокированию IP-адреса клиента. Постоянные сбойные подключения приведут к тому, что ваш IP-адрес будет помещен в черный список из любого доступа Twitter.

Т.е. вы можете иметь только одно потоковое соединение за раз. Чтобы получить оба набора результатов, вам нужно вместо этого использовать listen({track: 'superbowl, humble bundle'}). Это означает, что вы не можете изменить то, что вы слушаете, и вам придется прекратить слушать, измените запрос и перезапустите прослушивание.

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