|
|
|
var stuff_to_search_for = |
|
[ 'nodejs', 'nodejitsu', 'hadoop', 'couchdb', 'nosql', 'birds', 'dinosaurs' |
|
, 'fun', 'dscape', 'clown', 'joyent', 'nyc', 'usa', 'portugal']; |
|
|
|
|
|
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 === '[') |
|
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++; |