1
+ < html >
2
+ < head >
3
+ < title > JavaScript/Flash bridge to Twitter Streaming API</ title >
4
+ < script src ="jquery-1.4.2.js "> </ script >
5
+ < script src ="jquery.swfobject.1-0-9.js "> </ script >
6
+ < script >
7
+ $ ( document ) . ready ( function ( ) {
8
+ $ ( '#stream-title' ) . hide ( ) ;
9
+
10
+ var streamerSelector = $ ( '#twstreamer' ) ;
11
+ streamerSelector . flash ( { swf : 'TwStreamFlash.swf' , height : 1 , width : 1 } ) ;
12
+ $ ( '#connect-button' ) . click ( function ( ) {
13
+ var buttonText = $ ( '#connect-button' ) . text ( ) ;
14
+ if ( buttonText == 'Connect' ) {
15
+ if ( connectToStream ( ) ) {
16
+ $ ( '#connect-button' ) . text ( 'Disconnect' ) ;
17
+ }
18
+ } else {
19
+ disconnectFromStream ( ) ;
20
+ $ ( '#connect-button' ) . text ( 'Connect' ) ;
21
+ }
22
+ } ) ;
23
+ } ) ;
24
+
25
+ function connectToStream ( ) {
26
+ var streamerSelector = $ ( '#twstreamer' ) ;
27
+ var streamPath = $ ( 'input[name=stream-path]' ) . val ( ) ;
28
+ var streamUsername = $ ( 'input[name=stream-username]' ) . val ( ) ;
29
+ var streamPassword = $ ( 'input[name=stream-password]' ) . val ( ) ;
30
+ if ( ( streamPath != "" ) && ( streamUsername != "" ) && ( streamPassword != "" ) ) {
31
+ streamerSelector . flash ( function ( ) {
32
+ this . ConnectToStream ( streamPath , streamUsername , streamPassword ) ;
33
+ } ) ;
34
+ return true ;
35
+ }
36
+ return false ;
37
+ }
38
+
39
+ function disconnectFromStream ( ) {
40
+ var streamerSelector = $ ( '#twstreamer' ) ;
41
+ streamerSelector . flash ( function ( ) {
42
+ this . DisconnectFromStream ( ) ;
43
+ } ) ;
44
+ return true ;
45
+ }
46
+
47
+ var toDisplay = [ ] ;
48
+ function streamEvent ( json ) {
49
+ toDisplay . unshift ( formatJson ( $ . parseJSON ( json ) , 0 ) ) ;
50
+ if ( toDisplay . length > 5 ) {
51
+ toDisplay . pop ( ) ;
52
+ }
53
+ $ ( '#stream-title' ) . show ( ) ;
54
+ $ ( '#stream' ) . html ( toDisplay . join ( '<br/>' ) ) ;
55
+ }
56
+
57
+ Object . size = function ( obj ) {
58
+ var size = 0 , key ;
59
+ for ( key in obj ) {
60
+ if ( obj . hasOwnProperty ( key ) ) size ++ ;
61
+ }
62
+ return size ;
63
+ } ;
64
+
65
+ function formatJson ( json , level ) {
66
+ if ( json == null ) {
67
+ return "<span class='json-null'>null</span>" ;
68
+ }
69
+
70
+ var isArray = json instanceof Array ;
71
+ var formattedJson = buildSpacer ( level ) + "<span class='json-brace'>" ;
72
+ if ( ! isArray ) {
73
+ formattedJson = "{</span>" ;
74
+ if ( Object . size ( json ) > 1 ) {
75
+ formattedJson += "<br/>"
76
+ }
77
+ } else {
78
+ formattedJson = "[</span>" ;
79
+ }
80
+ var firstThrough = true ;
81
+ $ . each ( json , function ( k , v ) {
82
+ if ( ! firstThrough ) {
83
+ formattedJson += "," ;
84
+ if ( ! isArray && ( Object . size ( json ) > 1 ) ) {
85
+ formattedJson += "<br/>" ;
86
+ }
87
+ }
88
+ if ( ! isArray ) {
89
+ if ( Object . size ( json ) > 1 ) {
90
+ formattedJson += buildSpacer ( level + 1 ) ;
91
+ }
92
+ formattedJson += formatSingleValue ( k ) ;
93
+ } else {
94
+ formattedJson += formatSingleValue ( v ) ;
95
+ }
96
+ if ( ! isArray ) {
97
+ formattedJson += ":" ;
98
+ var valueType = typeof ( v ) ;
99
+ if ( valueType == 'object' )
100
+ formattedJson += formatJson ( v , level + 1 ) ;
101
+ else {
102
+ formattedJson += formatSingleValue ( v ) ;
103
+ }
104
+ }
105
+ firstThrough = false ;
106
+ } ) ;
107
+ if ( ! isArray && ( Object . size ( json ) > 1 ) ) {
108
+ formattedJson += "<br/>" ;
109
+ }
110
+ formattedJson += buildSpacer ( level ) + "<span class='json-brace'>" ;
111
+ if ( ! isArray ) {
112
+ formattedJson += "}" ;
113
+ } else {
114
+ formattedJson += "]" ;
115
+ }
116
+ formattedJson += "</span>" ;
117
+ return formattedJson ;
118
+ }
119
+
120
+ function formatSingleValue ( v ) {
121
+ var type = typeof ( v ) ;
122
+ if ( type == 'string' ) {
123
+ return "<span class='json-string'>"" + v + ""</span>" ;
124
+ } else if ( type == 'number' ) {
125
+ return "<span class='json-number'>" + v + "</span>" ;
126
+ } else if ( type == 'boolean' ) {
127
+ return "<span class='json-boolean'>" + v + "</span>" ;
128
+ }
129
+ }
130
+
131
+ function buildSpacer ( level ) {
132
+ var spaced = "" ;
133
+ for ( var lc = 0 ; lc < level ; lc ++ ) { spaced += "<span class='json-width'> </span>" ; }
134
+ return spaced ;
135
+ }
136
+ </ script >
137
+
138
+ < style type ="text/css ">
139
+ body {
140
+ font-family : 'Helvetica Neue' , Helvetica, Verdana, sans-serif;
141
+ font-size : 0.8em ;
142
+ color : # 555555 ;
143
+ }
144
+
145
+ div # streaming-configuration {
146
+ display : inline-block;
147
+ border : 2px solid # dddddd ;
148
+ padding : 5px ;
149
+ }
150
+
151
+ div # streaming-configuration .label {
152
+ display : inline-block;
153
+ width : 125px ;
154
+ font-weight : 600 ;
155
+ }
156
+
157
+ div # streaming-configuration .button {
158
+ text-align : center;
159
+ display : block;
160
+ margin-top : 5px ;
161
+ font-size : 0.9em ;
162
+ font-weight : bold;
163
+ text-transform : uppercase;
164
+ }
165
+
166
+ div # streaming-configuration .button a {
167
+ text-decoration : none;
168
+ color : # 555555 ;
169
+ }
170
+
171
+ div # stream {
172
+ margin-top : 5px ;
173
+ padding : 5px ;
174
+ height : 300px ;
175
+ font-size : 0.5em ;
176
+ width : 95% ;
177
+ }
178
+
179
+ div # id {
180
+ visibility : hidden;
181
+ height : 0px ;
182
+ width : 0px ;
183
+ }
184
+
185
+ .json-brace {
186
+ color : black;
187
+ }
188
+
189
+ .json-null {
190
+ color : gray;
191
+ }
192
+
193
+ .json-string {
194
+ color : green;
195
+ }
196
+
197
+ .json-number {
198
+ color : red;
199
+ }
200
+
201
+ .json-boolean {
202
+ color : blue;
203
+ }
204
+
205
+ .json-spacing {
206
+ display : inline-block;
207
+ width : 20px ;
208
+ }
209
+ </ style >
210
+ </ head >
211
+ < body >
212
+ < h1 > JavaScript/Flash bridge to Twitter Streaming API</ h1 >
213
+ < div id ="streaming-configuration ">
214
+ < div class ="parameters-input ">
215
+ < span class ="label "> Stream parameters</ span >
216
+ < input type ="text " name ="stream-path " size ="30 " value ="/1/statuses/filter.json?track=twitter "/>
217
+ </ div >
218
+ < div class ="parameters-input ">
219
+ < span class ="label "> Username</ span >
220
+ < input type ="text " name ="stream-username " size ="30 "/>
221
+ </ div >
222
+ < div class ="parameters-input ">
223
+ < span class ="label "> Password</ span >
224
+ < input type ="password " name ="stream-password " size ="30 "/>
225
+ </ div >
226
+ < span class ="button "> < a id ="connect-button " href ="# "> Connect</ a > </ span >
227
+ </ div >
228
+ < h2 id ="stream-title "> Last 5 events</ h2 >
229
+ < div id ="stream "> </ div >
230
+ < div id ="twstreamer "> </ div >
231
+ </ body >
232
+ </ html >
0 commit comments