1.0.0 • Published 12 years ago

tweet-pipe v1.0.0

Weekly downloads
5
License
-
Repository
github
Last release
12 years ago

TweetPipe

Connect to Twitter's Streaming API via Node.js Streams (using EventStreams) https://github.com/peeinears/tweet-pipe

:)

  • Uses Node Streams
  • With the help of EventStream
  • and Request (which also uses EventStream)
  • This means you can pipe() stuff around, which is really great
  • Can pull down and deflate gzipped data (and does so by default)
  • Inspiration (and some borrowed logic) from ntwitter

:(

  • No tests
  • Site streams currently unsupported
  • Lacking in error handling

Put some tweets in your pipe and do stuff with them

Basic usage

var TweetPipe = require('tweet-pipe');

var tp = new TweetPipe({
  consumer_key: 'yourconsumerkey',
  consumer_secret: 'yourconsumersecret',
  token: 'youraccesstoken',
  token_secret: 'youraccesstokensecret'
});

tp.stream('statuses/filter', params, function (stream) {
  // hook to emitted events and do stuff
  stream.on('tweet', function (tweet) {
    // do stuff with tweet
  });
});

Supported events

Refer to: https://dev.twitter.com/docs/streaming-apis/messages

'tweet', 'delete', 'limit', 'scrub_geo', 'status_withheld', 'user_withheld', 'friends', 'event'

'all' emits data chunks of all types

Raw streams and convenience methods

You can also access the raw, un-deflated, unparsed stream with tp.raw_stream(method, params, callback). Note that the callback here is on the Request object -- the above events are not emitted.

If you're piping this stream elsewhere you can use tp.unzip() to deflate gzipped streams and tp.parse() to convert the stream into JSON.

tp.raw_stream('statuses/sample')
  .pipe(tp.unzip())
  .pipe(tp.parse())
  .pipe(someStreamThatHandlesJSON);

Example

Track the popularity of various Mexican cuisine for one minute:

var TweetPipe = require('tweet-pipe')
  , es = require('event-stream');

var oauth = {
  consumer_key: 'yourconsumerkey',
  consumer_secret: 'yourconsumersecret',
  token: 'youraccesstoken',
  token_secret: 'youraccesstokensecret'
};

var tp = new TweetPipe(oauth);

var tacos = burritos = enchiladas = 0;

var params = { track: ['taco', 'burrito', 'enchilada'] };
tp.stream('statuses/filter', params, function (stream) {

  stream.on('tweet', function (tweet) {
    if (tweet.text.search(/\btacos?\b/i) >= 0) tacos++;
    if (tweet.text.search(/\bburritos?\b/i) >= 0) burritos++;
    if (tweet.text.search(/\benchiladas?\b/i) >= 0) enchiladas++;

    // choose what gets piped to next stream (if anything)
    // in this case, pipe out tweet text
    stream.emit('data', tweet.text + '\n');
  });

  stream.on('error', function (error) {
    console.log('Uh oh: ' + error);
  });

  stream.on('end', function () {
    console.log("\n");
    console.log("THE RESULTS");
    console.log("===========");
    console.log('Tacos: ' + tacos);
    console.log('Burritos: ' + burritos);
    console.log('Enchiladas: ' + enchiladas);
  });

  // stop the stream after 60 seconds
  setTimeout(function () { stream.end(); }, 60*1000);
}).pipe(process.stdout); // tweet text piped to stdout

License

MIT