File size: 3,047 Bytes
5fae594 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
// 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++; |