123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- // get a bunch of twitter streams
- var stuff_to_search_for =
- [ 'nodejs', 'nodejitsu', 'hadoop', 'couchdb', 'nosql', 'birds', 'dinosaurs'
- , 'fun', 'dscape', 'clown', 'joyent', 'nyc', 'usa', 'portugal'];
- // npm install request fast-list clarinet
- var request = require('request');
- var fs = require('fs');
- var clarinet = require('../clarinet');
- var p = 1;
- var buffer = [];
- var tweets = ['['];
- var parse_stream = clarinet.createStream();
- var stacklevel = 0;
- var objlevel = 0;
- var found_results = false;
- var notfirst = false;
- var stop_searching = false;
- var previous = '';
- var i = 0;
- var on_array = false;
- var array_vals = [];
- function uri (pop) {
- var term;
- if(pop) i++;
- if(stuff_to_search_for[i]) {
- term = stuff_to_search_for[i];
- return 'http://search.twitter.com/search.json?q=' + term +
- '&rpp=100&page=';
- }
- else
- return null;
- }
- parse_stream.on('openarray', function() {
- previous = '[';
- if(found_results) {
- if(stacklevel !== 0) { buffer.push('['); on_array = true; }
- stacklevel++;
- }
- });
- parse_stream.on('closearray', function() {
- if(found_results) {
- stacklevel--;
- if(stacklevel === 0) {
- tweets.push(buffer.join(''));
- buffer = [];
- found_results = false;
- if(previous === '[') // [] means no more results
- stop_searching = true;
- } else {
- buffer.push(array_vals.join(','));
- array_vals = [];
- on_array = false;
- buffer.push(']');
- }
- }
- previous = ']';
- });
- parse_stream.on('openobject', function(name) {
- previous = '{';
- if(found_results) {
- if(objlevel === 0 && notfirst) { buffer.push(','); }
- if(name!=='result_type') { buffer.push('\n'); }
- buffer.push('{"' + name + '": ');
- notfirst = true;
- objlevel++;
- }
- });
- parse_stream.on('key', function(name) {
- previous = ':';
- if(found_results) {
- buffer.push(', "' + name + '": ');
- }
- if(name==='results' && !found_results) {
- found_results = true;
- }
- });
- parse_stream.on('closeobject', function() {
- previous = '}';
- if(found_results) {
- objlevel--;
- buffer.push('}');
- }
- });
- parse_stream.on('end', function() {
- previous = '!';
- if(tweets.length === 0) stop_searching = true;
- console.log(tweets.join(''));
- });
- parse_stream.on('ready', function () {
- var r_uri;
- if(stop_searching) {
- r_uri = uri(true);
- if(r_uri === null) {
- console.log(']');
- return;
- } else {
- p = 1;
- stop_searching = false;
- }
- }
- r_uri = r_uri || uri();
- tweets = [];
-
- if(r_uri!==null) {
- request.get(r_uri+p)
- .pipe(parse_stream);
- p++;
- }
- });
- parse_stream.on('value', function(value) {
- if(found_results) {
- var bla;
- if(typeof value === 'string' || value === null)
- bla = JSON.stringify(value);
- else bla = value;
- if (on_array) array_vals.push(bla);
- else { buffer.push(bla); }
- }
- });
- var s_uri = uri();
- if(s_uri!==null)
- request.get(uri()+p)
- .pipe(parse_stream);
- p++;
|