1 |
|
2 | var stuff_to_search_for =
|
3 | [ 'nodejs', 'nodejitsu', 'hadoop', 'couchdb', 'nosql', 'birds', 'dinosaurs'
|
4 | , 'fun', 'dscape', 'clown', 'joyent', 'nyc', 'usa', 'portugal'];
|
5 |
|
6 |
|
7 | var request = require('request');
|
8 | var fs = require('fs');
|
9 | var clarinet = require('../clarinet');
|
10 | var p = 1;
|
11 | var buffer = [];
|
12 | var tweets = ['['];
|
13 | var parse_stream = clarinet.createStream();
|
14 | var stacklevel = 0;
|
15 | var objlevel = 0;
|
16 | var found_results = false;
|
17 | var notfirst = false;
|
18 | var stop_searching = false;
|
19 | var previous = '';
|
20 | var i = 0;
|
21 | var on_array = false;
|
22 | var array_vals = [];
|
23 |
|
24 | function 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 |
|
36 | parse_stream.on('openarray', function() {
|
37 | previous = '[';
|
38 | if(found_results) {
|
39 | if(stacklevel !== 0) { buffer.push('['); on_array = true; }
|
40 | stacklevel++;
|
41 | }
|
42 | });
|
43 |
|
44 | parse_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 === '[')
|
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 |
|
63 | parse_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 |
|
74 | parse_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 |
|
84 | parse_stream.on('closeobject', function() {
|
85 | previous = '}';
|
86 | if(found_results) {
|
87 | objlevel--;
|
88 | buffer.push('}');
|
89 | }
|
90 | });
|
91 |
|
92 | parse_stream.on('end', function() {
|
93 | previous = '!';
|
94 | if(tweets.length === 0) stop_searching = true;
|
95 | console.log(tweets.join(''));
|
96 | });
|
97 |
|
98 | parse_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 |
|
120 | parse_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 |
|
131 | var s_uri = uri();
|
132 | if(s_uri!==null)
|
133 | request.get(uri()+p)
|
134 | .pipe(parse_stream);
|
135 | p++; |
\ | No newline at end of file |