UNPKG

3.05 kBJavaScriptView Raw
1// get a bunch of twitter streams
2var stuff_to_search_for =
3 [ 'nodejs', 'nodejitsu', 'hadoop', 'couchdb', 'nosql', 'birds', 'dinosaurs'
4 , 'fun', 'dscape', 'clown', 'joyent', 'nyc', 'usa', 'portugal'];
5
6// npm install request fast-list clarinet
7var request = require('request');
8var fs = require('fs');
9var clarinet = require('../clarinet');
10var p = 1;
11var buffer = [];
12var tweets = ['['];
13var parse_stream = clarinet.createStream();
14var stacklevel = 0;
15var objlevel = 0;
16var found_results = false;
17var notfirst = false;
18var stop_searching = false;
19var previous = '';
20var i = 0;
21var on_array = false;
22var array_vals = [];
23
24function uri (pop) {
25 var term;
26 if(pop) i++;
27 if(stuff_to_search_for[i]) {
28 term = stuff_to_search_for[i];
29 return 'http://search.twitter.com/search.json?q=' + term +
30 '&rpp=100&page=';
31 }
32 else
33 return null;
34}
35
36parse_stream.on('openarray', function() {
37 previous = '[';
38 if(found_results) {
39 if(stacklevel !== 0) { buffer.push('['); on_array = true; }
40 stacklevel++;
41 }
42});
43
44parse_stream.on('closearray', function() {
45 if(found_results) {
46 stacklevel--;
47 if(stacklevel === 0) {
48 tweets.push(buffer.join(''));
49 buffer = [];
50 found_results = false;
51 if(previous === '[') // [] means no more results
52 stop_searching = true;
53 } else {
54 buffer.push(array_vals.join(','));
55 array_vals = [];
56 on_array = false;
57 buffer.push(']');
58 }
59 }
60 previous = ']';
61});
62
63parse_stream.on('openobject', function(name) {
64 previous = '{';
65 if(found_results) {
66 if(objlevel === 0 && notfirst) { buffer.push(','); }
67 if(name!=='result_type') { buffer.push('\n'); }
68 buffer.push('{"' + name + '": ');
69 notfirst = true;
70 objlevel++;
71 }
72});
73
74parse_stream.on('key', function(name) {
75 previous = ':';
76 if(found_results) {
77 buffer.push(', "' + name + '": ');
78 }
79 if(name==='results' && !found_results) {
80 found_results = true;
81 }
82});
83
84parse_stream.on('closeobject', function() {
85 previous = '}';
86 if(found_results) {
87 objlevel--;
88 buffer.push('}');
89 }
90});
91
92parse_stream.on('end', function() {
93 previous = '!';
94 if(tweets.length === 0) stop_searching = true;
95 console.log(tweets.join(''));
96});
97
98parse_stream.on('ready', function () {
99 var r_uri;
100 if(stop_searching) {
101 r_uri = uri(true);
102 if(r_uri === null) {
103 console.log(']');
104 return;
105 } else {
106 p = 1;
107 stop_searching = false;
108 }
109 }
110 r_uri = r_uri || uri();
111 tweets = [];
112
113 if(r_uri!==null) {
114 request.get(r_uri+p)
115 .pipe(parse_stream);
116 p++;
117 }
118});
119
120parse_stream.on('value', function(value) {
121 if(found_results) {
122 var bla;
123 if(typeof value === 'string' || value === null)
124 bla = JSON.stringify(value);
125 else bla = value;
126 if (on_array) array_vals.push(bla);
127 else { buffer.push(bla); }
128 }
129});
130
131var s_uri = uri();
132if(s_uri!==null)
133 request.get(uri()+p)
134 .pipe(parse_stream);
135p++;
\No newline at end of file