tweetstream 2.5.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of tweetstream might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9a936abc485ff966804cb2a205338218d7e92c7
4
- data.tar.gz: 6d6f9be166c5529da1bd3a27d1802d5013eca136
3
+ metadata.gz: 79498418145dcfe8a448cb8476d7e629800ff7d7
4
+ data.tar.gz: 5c247493d57cb248abf747db3a08307780674556
5
5
  SHA512:
6
- metadata.gz: 77d559d5782ce0bd26690789d7d03a546d70c9c94cdd25966cedeabfeb8de78f31110679b7189c48051f785493dc07207956b2871fba91609805996280d7bf66
7
- data.tar.gz: 353aa44d4b0cce68586155056c103462901205c05ce003920f5bf05e364232a7d1ff28ef9f7b51e3f1f66be682c77004071e16153c95f9d86c3037368b8940e6
6
+ metadata.gz: 58b3795d2c33e1260326e4c35992e4f9310d0ec137bd14170077705bdad9b6141a086e65897a6b50567675645fd0c4d3eda074498ce3950ec4d82837726d5319
7
+ data.tar.gz: a85c13f5509514383e6228b2d934bb316c64a7e0ae8cb055d59bf75fed67ac01a2a2b30c09e8adc52a4dbcf6e09101bafb9dce2366cb95ffd113ac775806d2cd
@@ -1,3 +1,14 @@
1
+ Version 2.6.0
2
+ =============
3
+ * Re-implemented multi_json for response parsing
4
+ * added on_control callback method for Site Streams
5
+ * fixed issue with Site Stream add/remove when passed a single user id (philgyford)
6
+ * raised em-twitter dependency to 0.3.0 to resolve issues with ruby 2.0.0
7
+
8
+ Version 2.5.0
9
+ =============
10
+ * added proxy support
11
+
1
12
  Version 2.4.0
2
13
  =============
3
14
  * Revert "use extract_options! from the Twitter gem"
data/README.md CHANGED
@@ -1,16 +1,16 @@
1
1
  # TweetStream
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/tweetstream.png)][gem]
4
- [![Build Status](https://secure.travis-ci.org/intridea/tweetstream.png?branch=master)][travis]
5
- [![Dependency Status](https://gemnasium.com/intridea/tweetstream.png?travis)][gemnasium]
6
- [![Code Climate](https://codeclimate.com/github/intridea/tweetstream.png)][codeclimate]
7
- [![Coverage Status](https://coveralls.io/repos/intridea/tweetstream/badge.png?branch=master)][coveralls]
4
+ [![Build Status](https://secure.travis-ci.org/tweetstream/tweetstream.png?branch=master)][travis]
5
+ [![Dependency Status](https://gemnasium.com/tweetstream/tweetstream.png?travis)][gemnasium]
6
+ [![Code Climate](https://codeclimate.com/github/tweetstream/tweetstream.png)][codeclimate]
7
+ [![Coverage Status](https://coveralls.io/repos/tweetstream/tweetstream/badge.png?branch=master)][coveralls]
8
8
 
9
9
  [gem]: https://rubygems.org/gems/tweetstream
10
- [travis]: http://travis-ci.org/intridea/tweetstream
11
- [gemnasium]: https://gemnasium.com/intridea/tweetstream
12
- [codeclimate]: https://codeclimate.com/github/intridea/tweetstream
13
- [coveralls]: https://coveralls.io/r/intridea/tweetstream
10
+ [travis]: http://travis-ci.org/tweetstream/tweetstream
11
+ [gemnasium]: https://gemnasium.com/tweetstream/tweetstream
12
+ [codeclimate]: https://codeclimate.com/github/tweetstream/tweetstream
13
+ [coveralls]: https://coveralls.io/r/tweetstream/tweetstream
14
14
 
15
15
  TweetStream provides simple Ruby access to [Twitter's Streaming API](https://dev.twitter.com/docs/streaming-api).
16
16
 
@@ -77,7 +77,7 @@ should plan to move to OAuth as soon as possible.
77
77
 
78
78
  Site Streams are now fully supported, including the connection management functionality.
79
79
 
80
- ### Compatablity with the Twitter gem
80
+ ### Compatability with the Twitter gem
81
81
 
82
82
  TweetStream now emits objects from the [Twitter gem](https://github.com/sferik/twitter) instead of custom hashes. These objects are already defined in the `twitter` gem and are superior to the custom objects in the following ways:
83
83
 
@@ -338,6 +338,27 @@ end
338
338
  If you put the above into a script and run the script with `ruby scriptname.rb`,
339
339
  you will see a list of daemonization commands such as start, stop, and run.
340
340
 
341
+ A frequent use case is to use TweetStream along with ActiveRecord to insert new
342
+ statuses to a database. The library TweetStream uses the `daemons` gem for
343
+ daemonization which forks a new process when the daemon is created. After forking,
344
+ you'll need to reconnect to the database:
345
+
346
+ ```ruby
347
+ ENV["RAILS_ENV"] ||= "production"
348
+
349
+ root = File.expand_path(File.join(File.dirname(__FILE__), '..'))
350
+ require File.join(root, "config", "environment")
351
+
352
+ daemon = TweetStream::Daemon.new('tracker', :log_output => true)
353
+ daemon.on_inited do
354
+ ActiveRecord::Base.connection.reconnect!
355
+ ActiveRecord::Base.logger = Logger.new(File.open('log/stream.log', 'w+'))
356
+ end
357
+ daemon.track('term1') do |tweet|
358
+ Status.create_from_tweet(tweet)
359
+ end
360
+ ```
361
+
341
362
  ## Proxy Support
342
363
 
343
364
  TweetStream supports a configurable proxy:
@@ -0,0 +1,11 @@
1
+ module TweetStream
2
+ class Arguments < Array
3
+ attr_reader :options
4
+
5
+ def initialize(args)
6
+ @options = args.last.is_a?(::Hash) ? args.pop : {}
7
+ super(args)
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ module TweetStream
2
+ class Callback
3
+ def initialize(client)
4
+ @client = client
5
+ end
6
+
7
+ def call(message, &block)
8
+ end
9
+ end
10
+ end
@@ -1,7 +1,10 @@
1
1
  require 'em-twitter'
2
2
  require 'eventmachine'
3
+ require 'multi_json'
3
4
  require 'twitter'
4
- require 'yajl'
5
+ require 'forwardable'
6
+
7
+ require 'tweetstream/arguments'
5
8
 
6
9
  module TweetStream
7
10
  # Provides simple access to the Twitter Streaming API (https://dev.twitter.com/docs/streaming-api)
@@ -19,6 +22,7 @@ module TweetStream
19
22
  # For information about a daemonized TweetStream client,
20
23
  # view the TweetStream::Daemon class.
21
24
  class Client
25
+ extend Forwardable
22
26
 
23
27
  OPTION_CALLBACKS = [:delete,
24
28
  :scrub_geo,
@@ -40,6 +44,8 @@ module TweetStream
40
44
  attr_accessor :options
41
45
  attr_reader :control_uri, :control, :stream
42
46
 
47
+ def_delegators :@control, :add_user, :remove_user, :info, :friends_ids
48
+
43
49
  # Creates a new API
44
50
  def initialize(options={})
45
51
  self.options = options
@@ -47,7 +53,9 @@ module TweetStream
47
53
  Configuration::VALID_OPTIONS_KEYS.each do |key|
48
54
  send("#{key}=", merged_options[key])
49
55
  end
50
- @callbacks = {}
56
+ @control_uri = nil
57
+ @control = nil
58
+ @callbacks = {}
51
59
  end
52
60
 
53
61
  # Returns all public statuses. The Firehose is not a generally
@@ -93,9 +101,8 @@ module TweetStream
93
101
  # Keywords containing punctuation will only exact match tokens.
94
102
  # Query parameters may be passed as the last argument.
95
103
  def track(*keywords, &block)
96
- query_params = keywords.pop if keywords.last.is_a?(::Hash)
97
- query_params ||= {}
98
- filter(query_params.merge(:track => keywords), &block)
104
+ query = TweetStream::Arguments.new(keywords)
105
+ filter(query.options.merge(:track => query), &block)
99
106
  end
100
107
 
101
108
  # Returns public statuses from or in reply to a set of users. Mentions
@@ -103,9 +110,8 @@ module TweetStream
103
110
  # pressing the reply "swoosh") are not matched. Requires integer user
104
111
  # IDs, not screen names. Query parameters may be passed as the last argument.
105
112
  def follow(*user_ids, &block)
106
- query_params = user_ids.pop if user_ids.last.is_a?(::Hash)
107
- query_params ||= {}
108
- filter(query_params.merge(:follow => user_ids), &block)
113
+ query = TweetStream::Arguments.new(user_ids)
114
+ filter(query.options.merge(:follow => query), &block)
109
115
  end
110
116
 
111
117
  # Specifies a set of bounding boxes to track. Only tweets that are both created
@@ -117,9 +123,8 @@ module TweetStream
117
123
  # the first pair denoting the southwest corner of the box
118
124
  # longitude/latitude pairs, separated by commas. The first pair specifies the southwest corner of the box.
119
125
  def locations(*locations_map, &block)
120
- query_params = locations_map.pop if locations_map.last.is_a?(::Hash)
121
- query_params ||= {}
122
- filter(query_params.merge(:locations => locations_map), &block)
126
+ query = TweetStream::Arguments.new(locations_map)
127
+ filter(query.options.merge(:locations => query), &block)
123
128
  end
124
129
 
125
130
  # Make a call to the statuses/filter method of the Streaming API,
@@ -142,8 +147,8 @@ module TweetStream
142
147
  def sitestream(user_ids = [], query_params = {}, &block)
143
148
  stream_params = { :host => "sitestream.twitter.com" }
144
149
  query_params.merge!({
145
- :method => :post,
146
- :follow => user_ids,
150
+ :method => :post,
151
+ :follow => user_ids,
147
152
  :extra_stream_parameters => stream_params
148
153
  })
149
154
  query_params.merge!(:with => 'followings') if query_params.delete(:followings)
@@ -361,13 +366,23 @@ module TweetStream
361
366
  # Set a Proc to be run on userstream events
362
367
  #
363
368
  # @client = TweetStream::Client.new
364
- # @client.event(:favorite) do |event|
369
+ # @client.on_event(:favorite) do |event|
365
370
  # # do something with the status
366
371
  # end
367
372
  def on_event(event, &block)
368
373
  on(event, &block)
369
374
  end
370
375
 
376
+ # Set a Proc to be run when sitestream control is received
377
+ #
378
+ # @client = TweetStream::Client.new
379
+ # @client.on_control do
380
+ # # do something with the status
381
+ # end
382
+ def on_control(&block)
383
+ on('control', &block)
384
+ end
385
+
371
386
  def on(event, &block)
372
387
  if block_given?
373
388
  @callbacks[event.to_s] = block
@@ -398,9 +413,9 @@ module TweetStream
398
413
  @stream = EM::Twitter::Client.connect(stream_parameters)
399
414
  @stream.each do |item|
400
415
  begin
401
- hash = Yajl::Parser.parse(item, :symbolize_keys => true)
402
- rescue Yajl::ParseError
403
- invoke_callback(callbacks['error'], "Yajl::ParseError occured in stream: #{item}")
416
+ hash = MultiJson.decode(item, :symbolize_keys => true)
417
+ rescue MultiJson::DecodeError
418
+ invoke_callback(callbacks['error'], "MultiJson::DecodeError occured in stream: #{item}")
404
419
  next
405
420
  end
406
421
 
@@ -443,12 +458,34 @@ module TweetStream
443
458
  @stream
444
459
  end
445
460
 
461
+ # Terminate the currently running TweetStream and close EventMachine loop
462
+ def stop
463
+ EventMachine.stop_event_loop
464
+ @last_status
465
+ end
466
+
467
+ # Close the connection to twitter without closing the eventmachine loop
468
+ def close_connection
469
+ @stream.close_connection if @stream
470
+ end
471
+
472
+ def stop_stream
473
+ @stream.stop if @stream
474
+ end
475
+
476
+ def controllable?
477
+ !!@control
478
+ end
479
+
480
+ protected
481
+
446
482
  def respond_to(hash, callbacks, &block)
447
483
  if hash[:control] && hash[:control][:control_uri]
448
484
  @control_uri = hash[:control][:control_uri]
449
485
  require 'tweetstream/site_stream_client'
450
486
  @control = TweetStream::SiteStreamClient.new(@control_uri, options)
451
487
  @control.on_error(&callbacks['error'])
488
+ invoke_callback(callbacks['control'])
452
489
  elsif hash[:warning]
453
490
  invoke_callback(callbacks['stall_warning'], hash[:warning])
454
491
  elsif hash[:delete] && hash[:delete][:status]
@@ -477,23 +514,6 @@ module TweetStream
477
514
  end
478
515
  end
479
516
 
480
- # Terminate the currently running TweetStream and close EventMachine loop
481
- def stop
482
- EventMachine.stop_event_loop
483
- @last_status
484
- end
485
-
486
- # Close the connection to twitter without closing the eventmachine loop
487
- def close_connection
488
- @stream.close_connection if @stream
489
- end
490
-
491
- def stop_stream
492
- @stream.stop if @stream
493
- end
494
-
495
- protected
496
-
497
517
  def normalize_filter_parameters(query_parameters = {})
498
518
  [:follow, :track, :locations].each do |param|
499
519
  if query_parameters[param].kind_of?(Array)
@@ -0,0 +1,22 @@
1
+ module TweetStream
2
+ module Middleware
3
+ class Builder
4
+ attr_accessor :options
5
+
6
+ def initialize(options={}, &block)
7
+ @options = options
8
+ @stack = []
9
+ yield self if block_given?
10
+ end
11
+
12
+ def use(middleware, *args)
13
+ @stack << [middleware, args]
14
+ end
15
+
16
+ def call(env=nil)
17
+ TweetStream::Runner.new(@stack.dup).call(env)
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,42 @@
1
+ module TweetStream
2
+ module Middleware
3
+ class Runner
4
+
5
+ EMPTY_MIDDLEWARE = lambda { |env| env }
6
+
7
+ def initialize(stack)
8
+ @stack = stack
9
+ @chain = build_chain
10
+ end
11
+
12
+ def call(env)
13
+ @chain.call(env)
14
+ end
15
+
16
+ private
17
+
18
+ def build_chain
19
+ @stack.reverse.inject(EMPTY_MIDDLEWARE) do |next_middleware, current_middleware|
20
+ # Unpack the actual item
21
+ klass, args = current_middleware
22
+
23
+ if klass.is_a?(Class)
24
+ # If the klass actually is a class, then instantiate it with
25
+ # the app and any other arguments given.
26
+ klass.new(next_middleware, *args)
27
+ elsif klass.respond_to?(:call)
28
+ # Make it a lambda which calls the item then forwards up
29
+ # the chain.
30
+ lambda do |env|
31
+ klass.call(env)
32
+ next_middleware.call(env)
33
+ end
34
+ else
35
+ raise "Invalid middleware, doesn't respond to `call`: #{klass.inspect}"
36
+ end
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -115,8 +115,12 @@ module TweetStream
115
115
  end
116
116
 
117
117
  def normalized_user_ids(user_id)
118
- user_id.join(',') if user_id.kind_of?(Array)
118
+ if user_id.kind_of?(Array)
119
+ user_id.join(',')
120
+ else
121
+ user_id.to_s
122
+ end
119
123
  end
120
124
 
121
125
  end
122
- end
126
+ end
@@ -0,0 +1,19 @@
1
+ class Parameter
2
+
3
+ def initialize(params={})
4
+ @params = params
5
+ end
6
+
7
+ def to_h
8
+ query_parameters = @params.dup
9
+ [:follow, :track, :locations].each do |param|
10
+ if query_parameters[param].kind_of?(Array)
11
+ query_parameters[param] = query_parameters[param].flatten.collect { |q| q.to_s }.join(',')
12
+ elsif query_parameters[param]
13
+ query_parameters[param] = query_parameters[param].to_s
14
+ end
15
+ end
16
+ query_parameters
17
+ end
18
+
19
+ end
@@ -1,3 +1,3 @@
1
1
  module TweetStream
2
- VERSION = '2.5.0' unless defined?(TweetStream::VERSION)
2
+ VERSION = '2.6.0' unless defined?(TweetStream::VERSION)
3
3
  end
@@ -1 +1,20 @@
1
- {"favorited":false,"text":"listening to Where U Headed by Universal Playaz. http://iLike.com/s/9zpOZ #musicmonday something for the ladies","in_reply_to_user_id":null,"in_reply_to_screen_name":null,"source":"<a href=\"http://www.iLike.com\" rel=\"nofollow\">iLike</a>","truncated":false,"created_at":"Tue Sep 22 01:29:13 +0000 2009","user":{"statuses_count":378,"favourites_count":1,"profile_text_color":"666666","location":"Atlanta, Ga","profile_background_image_url":"http://a3.twimg.com/profile_background_images/36516125/Universal_Playaz.jpg","profile_link_color":"2FC2EF","description":"Paper Chaser","following":null,"verified":false,"notifications":null,"profile_sidebar_fill_color":"252429","profile_image_url":"http://a1.twimg.com/profile_images/413331530/DIESELSTATScopy_normal.jpg","url":"http://www.myspace.com/DieselDtheg","profile_sidebar_border_color":"181A1E","screen_name":"DieselD2143","profile_background_tile":true,"followers_count":75,"protected":false,"time_zone":"Eastern Time (US & Canada)","created_at":"Thu Jun 18 15:56:32 +0000 2009","name":"Diesel D","friends_count":119,"profile_background_color":"1A1B1F","id":48392351,"utc_offset":-18000},"in_reply_to_status_id":null,"id":4161231023} {"favorited":false,"text":"David Bowie and Nine Inch Nails perform \"Hurt\" http://bit.ly/AOaWG #musicmonday #nineinchnails #nin","in_reply_to_user_id":null,"in_reply_to_screen_name":null,"source":"web","truncated":false,"created_at":"Tue Sep 22 01:29:16 +0000 2009","user":{"statuses_count":668,"favourites_count":25,"profile_text_color":"445d85","location":"S\u00e3o Paulo, Brazil","profile_background_image_url":"http://a3.twimg.com/profile_background_images/38174991/GeorgeRomero-oil-400.jpg","profile_link_color":"555757","description":"You think I ain't worth a dollar, but I feel like a millionaire","following":null,"verified":false,"notifications":null,"profile_sidebar_fill_color":"a3a7ad","profile_image_url":"http://a1.twimg.com/profile_images/96034368/n1076431955_30001395_7912_normal.jpg","url":null,"profile_sidebar_border_color":"c7d1ed","screen_name":"RenatonMiranda","profile_background_tile":true,"followers_count":111,"protected":false,"time_zone":"Santiago","created_at":"Sat Mar 14 15:03:59 +0000 2009","name":"Renato Miranda","friends_count":143,"profile_background_color":"287356","id":24379310,"utc_offset":-14400},"in_reply_to_status_id":null,"id":4161232008} {"favorited":false,"text":"#musicmonday ,time to download some songs today!! :)","in_reply_to_user_id":null,"in_reply_to_screen_name":null,"source":"web","truncated":false,"created_at":"Tue Sep 22 01:29:19 +0000 2009","user":{"statuses_count":188,"favourites_count":0,"profile_text_color":"3D1957","location":"under the water","profile_background_image_url":"http://s.twimg.com/a/1253562286/images/themes/theme10/bg.gif","profile_link_color":"FF0000","description":"ask me ","following":null,"verified":false,"notifications":null,"profile_sidebar_fill_color":"7AC3EE","profile_image_url":"http://a1.twimg.com/profile_images/421281292/twit_pic_normal.jpg","url":"http://www.exploretalent.com/contest_video.php?talentnum=2053105&cm_id=3398","profile_sidebar_border_color":"65B0DA","screen_name":"julieanne11343","profile_background_tile":true,"followers_count":9,"protected":false,"time_zone":"Pacific Time (US & Canada)","created_at":"Mon Jul 20 21:08:22 +0000 2009","name":"Julieanne","friends_count":17,"profile_background_color":"642D8B","id":58591151,"utc_offset":-28800},"in_reply_to_status_id":null,"id":4161233120} {"text":"#Musicmonday \"Dont be tardy f0r the party\"","truncated":false,"source":"<a href=\"http://twitterhelp.blogspot.com/2008/05/twitter-via-mobile-web-mtwittercom.html\" rel=\"nofollow\">mobile web</a>","in_reply_to_status_id":null,"favorited":false,"created_at":"Tue Sep 22 01:29:19 +0000 2009","user":{"verified":false,"notifications":null,"profile_sidebar_fill_color":"e0ff92","location":"Dope Girl Island","profile_sidebar_border_color":"87bc44","description":"","following":null,"profile_background_tile":false,"followers_count":29,"profile_image_url":"http://a3.twimg.com/profile_images/217487577/badbad_normal.jpg","time_zone":"Eastern Time (US & Canada)","url":null,"friends_count":65,"profile_background_color":"9ae4e8","screen_name":"SwagGirlOnDeck","protected":false,"statuses_count":847,"favourites_count":0,"created_at":"Fri May 01 16:59:15 +0000 2009","profile_text_color":"000000","name":"Mariah Reta","id":36987168,"profile_background_image_url":"http://s.twimg.com/a/1253301564/images/themes/theme1/bg.png","utc_offset":-18000,"profile_link_color":"0000ff"},"in_reply_to_user_id":null,"id":4161233317,"in_reply_to_screen_name":null}
1
+ {"created_at":"Fri Sep 07 16:35:24 +0000 2012","id":244111636544225280,"id_str":"244111636544225280","text":"Happy Birthday @imdane. Watch out for those @rally pranksters!","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":5819322,"id_str":"5819322","name":"Maggie Utgoff","screen_name":"mutgoff","location":"san francisco","description":"I live every week like it's Shark Week. ","url":"http:\/\/www.mutgoff.com","entities":{"url":{"urls":[{"url":"http:\/\/www.mutgoff.com","expanded_url":null,"indices":[0,22]}]},"description":{"urls":[]}},"protected":false,"followers_count":263063,"friends_count":708,"listed_count":534,"created_at":"Mon May 07 01:02:52 +0000 2007","favourites_count":444,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":4604,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/344662358\/x88fe902ff835983434794eb1f9d7370.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/344662358\/x88fe902ff835983434794eb1f9d7370.jpg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1199277090\/Screen_shot_2010-12-26_at_11.31.51_AM_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1199277090\/Screen_shot_2010-12-26_at_11.31.51_AM_normal.png","profile_link_color":"9DDD95","profile_sidebar_border_color":"A0EEF5","profile_sidebar_fill_color":"1A3F57","profile_text_color":"72B9BF","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":{"type":"Point","coordinates":[43.46481998,-73.64247884]},"coordinates":{"type":"Point","coordinates":[-73.64247884,43.46481998]},"place":{"id":"003cd76c24b9fa3b","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/003cd76c24b9fa3b.json","place_type":"city","name":"Bolton","full_name":"Bolton, NY","country_code":"US","country":"United States","bounding_box":{"type":"Polygon","coordinates":[[[-73.750813,43.442073],[-73.525347,43.442073],[-73.525347,43.678377],[-73.750813,43.678377]]]},"attributes":{}},"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"imdane","name":"Dane Hurtubise","id":14076314,"id_str":"14076314","indices":[15,22]},{"screen_name":"rally","name":"Rally","id":16364838,"id_str":"16364838","indices":[44,50]}]},"favorited":false,"retweeted":false}
2
+ {"created_at":"Fri Sep 07 16:33:36 +0000 2012","id":244111183165157376,"id_str":"244111183165157376","text":"If you like good real-life stories, check out @NarrativelyNY\u2019s just-launched site http:\/\/t.co\/wiUL07jE (and also visit http:\/\/t.co\/ZoyQxqWA)","source":"\u003ca href=\"http:\/\/tapbots.com\" rel=\"nofollow\"\u003eTweetbot for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":14163141,"id_str":"14163141","name":"David Friedman","screen_name":"ironicsans","location":"New York","description":"Photographer. Idea blogger. Occasional historian.","url":"http:\/\/www.davidfriedman.info","entities":{"url":{"urls":[{"url":"http:\/\/www.davidfriedman.info","expanded_url":null,"indices":[0,29]}]},"description":{"urls":[]}},"protected":false,"followers_count":4131,"friends_count":1270,"listed_count":220,"created_at":"Mon Mar 17 13:47:33 +0000 2008","favourites_count":1377,"utc_offset":-18000,"time_zone":"Eastern Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":4753,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"AAB4B5","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/66248418\/Untitled-1.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/66248418\/Untitled-1.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/427291735\/n645611374_892426_9102_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/427291735\/n645611374_892426_9102_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"BDDCAD","profile_sidebar_fill_color":"DDFFCC","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/wiUL07jE","expanded_url":"http:\/\/narrative.ly","display_url":"narrative.ly","indices":[82,102]},{"url":"http:\/\/t.co\/ZoyQxqWA","expanded_url":"http:\/\/www.kickstarter.com\/projects\/narratively\/narratively","display_url":"kickstarter.com\/projects\/narra\u2026","indices":[119,139]}],"user_mentions":[{"screen_name":"NarrativelyNY","name":"Narratively","id":576457087,"id_str":"576457087","indices":[46,60]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
3
+ {"created_at":"Fri Sep 07 16:30:14 +0000 2012","id":244110336414859264,"id_str":"244110336414859264","text":"Something else to vote for: \"New Rails workshops to bring more women into the Boston software scene\" http:\/\/t.co\/eNBuckHc \/cc @bostonrb","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":43234200,"id_str":"43234200","name":"Pat Shaughnessy","screen_name":"pat_shaughnessy","location":"Boston","description":"Blogger, Rubyist, Writing a new eBook: http:\/\/patshaughnessy.net\/ruby-under-a-microscope","url":"http:\/\/patshaughnessy.net","entities":{"url":{"urls":[{"url":"http:\/\/patshaughnessy.net","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":734,"friends_count":362,"listed_count":38,"created_at":"Fri May 29 00:55:48 +0000 2009","favourites_count":35,"utc_offset":-18000,"time_zone":"Eastern Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":1620,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1950093297\/pat2_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1950093297\/pat2_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":true,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/eNBuckHc","expanded_url":"http:\/\/news.ycombinator.com\/item?id=4489199","display_url":"news.ycombinator.com\/item?id=4489199","indices":[101,121]}],"user_mentions":[{"screen_name":"bostonrb","name":"Boston Ruby Group","id":21431343,"id_str":"21431343","indices":[126,135]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
4
+ {"created_at":"Fri Sep 07 16:28:05 +0000 2012","id":244109797308379136,"id_str":"244109797308379136","text":"Pushing the button to launch the site. http:\/\/t.co\/qLoEn5jG","source":"\u003ca href=\"http:\/\/instagr.am\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1882641,"id_str":"1882641","name":"Caleb Elston","screen_name":"calebelston","location":"San Francisco","description":"Co-founder & CEO of Yobongo. Dubious of people who claim to be experts. Formerly VP Products at Justin.tv. Advisor to Simpler.","url":"http:\/\/www.calebelston.com","entities":{"url":{"urls":[{"url":"http:\/\/www.calebelston.com","expanded_url":null,"indices":[0,26]}]},"description":{"urls":[]}},"protected":false,"followers_count":1960,"friends_count":151,"listed_count":136,"created_at":"Thu Mar 22 14:34:22 +0000 2007","favourites_count":815,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":7068,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"666666","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_link_color":"0099CC","profile_sidebar_border_color":"E3E3E3","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"292E38","profile_use_background_image":false,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/qLoEn5jG","expanded_url":"http:\/\/instagr.am\/p\/PR7YFvRhiO\/","display_url":"instagr.am\/p\/PR7YFvRhiO\/","indices":[39,59]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
5
+ {"created_at":"Fri Sep 07 16:23:50 +0000 2012","id":244108728834592770,"id_str":"244108728834592770","text":"RT @olivercameron: Mosaic looks cool: http:\/\/t.co\/A8013C9k","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1882641,"id_str":"1882641","name":"Caleb Elston","screen_name":"calebelston","location":"San Francisco","description":"Co-founder & CEO of Yobongo. Dubious of people who claim to be experts. Formerly VP Products at Justin.tv. Advisor to Simpler.","url":"http:\/\/www.calebelston.com","entities":{"url":{"urls":[{"url":"http:\/\/www.calebelston.com","expanded_url":null,"indices":[0,26]}]},"description":{"urls":[]}},"protected":false,"followers_count":1960,"friends_count":151,"listed_count":136,"created_at":"Thu Mar 22 14:34:22 +0000 2007","favourites_count":815,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":7068,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"666666","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_link_color":"0099CC","profile_sidebar_border_color":"E3E3E3","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"292E38","profile_use_background_image":false,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 16:12:47 +0000 2012","id":244105944508796931,"id_str":"244105944508796931","text":"Mosaic looks cool: http:\/\/t.co\/A8013C9k","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":13634322,"id_str":"13634322","name":"Oliver Cameron","screen_name":"olivercameron","location":"Palo Alto, CA","description":"Co-founder of @everyme.","url":"http:\/\/everyme.com","entities":{"url":{"urls":[{"url":"http:\/\/everyme.com","expanded_url":null,"indices":[0,18]}]},"description":{"urls":[]}},"protected":false,"followers_count":1365,"friends_count":218,"listed_count":57,"created_at":"Mon Feb 18 18:08:32 +0000 2008","favourites_count":8,"utc_offset":0,"time_zone":"London","geo_enabled":false,"verified":false,"statuses_count":3346,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/5435833\/pat_20060420022220.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/5435833\/pat_20060420022220.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1237999642\/Oliver_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1237999642\/Oliver_normal.png","profile_link_color":"454545","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"000000","profile_use_background_image":false,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":1,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/A8013C9k","expanded_url":"http:\/\/heymosaic.com\/i\/1Z8ssK","display_url":"heymosaic.com\/i\/1Z8ssK","indices":[19,39]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false},"retweet_count":1,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/A8013C9k","expanded_url":"http:\/\/heymosaic.com\/i\/1Z8ssK","display_url":"heymosaic.com\/i\/1Z8ssK","indices":[38,58]}],"user_mentions":[{"screen_name":"olivercameron","name":"Oliver Cameron","id":13634322,"id_str":"13634322","indices":[3,17]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
6
+ {"created_at":"Fri Sep 07 16:20:31 +0000 2012","id":244107890632294400,"id_str":"244107890632294400","text":"The Weatherman is Not a Moron: http:\/\/t.co\/ZwL5Gnq5. An excerpt from my book, THE SIGNAL AND THE NOISE (http:\/\/t.co\/fNXj8vCE)","source":"\u003ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":16017475,"id_str":"16017475","name":"Nate Silver","screen_name":"fivethirtyeight","location":"New York","description":"FiveThirtyEight blogger (http:\/\/nyti.ms\/Qp8cqb). Author, The Signal and the Noise (http:\/\/amzn.to\/QdyFYV). Sports\/politics\/food geek.","url":"http:\/\/amzn.to\/QdyFYV","entities":{"url":{"urls":[{"url":"http:\/\/amzn.to\/QdyFYV","expanded_url":null,"indices":[0,21]}]},"description":{"urls":[]}},"protected":false,"followers_count":183238,"friends_count":475,"listed_count":8160,"created_at":"Wed Aug 27 20:56:45 +0000 2008","favourites_count":6,"utc_offset":-18000,"time_zone":"Eastern Time (US & Canada)","geo_enabled":false,"verified":true,"statuses_count":6786,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1110592135\/fivethirtyeight73_twitter_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1110592135\/fivethirtyeight73_twitter_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":true,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":19,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/ZwL5Gnq5","expanded_url":"http:\/\/nyti.ms\/OW7n5p","display_url":"nyti.ms\/OW7n5p","indices":[31,51]},{"url":"http:\/\/t.co\/fNXj8vCE","expanded_url":"http:\/\/amzn.to\/Qg2SEu","display_url":"amzn.to\/Qg2SEu","indices":[104,124]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
7
+ {"created_at":"Fri Sep 07 16:20:15 +0000 2012","id":244107823733174272,"id_str":"244107823733174272","text":"RT @randomhacks: Going to Code Across Austin II: Y'all Come Hack Now, Sat, Sep 8 http:\/\/t.co\/Sk5BM7U3 We'll see y'all there! #rhok @cod ...","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":64482503,"id_str":"64482503","name":"Code for America","screen_name":"codeforamerica","location":"San Francisco, California","description":"Code for America helps governments work better for everyone with the people and the power of the web.","url":"http:\/\/www.codeforamerica.org","entities":{"url":{"urls":[{"url":"http:\/\/www.codeforamerica.org","expanded_url":null,"indices":[0,29]}]},"description":{"urls":[]}},"protected":false,"followers_count":11824,"friends_count":783,"listed_count":981,"created_at":"Mon Aug 10 18:59:29 +0000 2009","favourites_count":20,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":3611,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"EBEBEB","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1118630094\/logosquare_bigger_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1118630094\/logosquare_bigger_normal.jpg","profile_link_color":"990000","profile_sidebar_border_color":"DFDFDF","profile_sidebar_fill_color":"F3F3F3","profile_text_color":"333333","profile_use_background_image":false,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 16:11:02 +0000 2012","id":244105505390350336,"id_str":"244105505390350336","text":"Going to Code Across Austin II: Y'all Come Hack Now, Sat, Sep 8 http:\/\/t.co\/Sk5BM7U3 We'll see y'all there! #rhok @codeforamerica @TheaClay","source":"\u003ca href=\"http:\/\/twitter.com\/tweetbutton\" rel=\"nofollow\"\u003eTweet Button\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":75361247,"id_str":"75361247","name":"Random Hacks","screen_name":"randomhacks","location":"USA","description":"Official Twitter account for Random Hacks of Kindness.","url":"http:\/\/www.rhok.org","entities":{"url":{"urls":[{"url":"http:\/\/www.rhok.org","expanded_url":null,"indices":[0,19]}]},"description":{"urls":[]}},"protected":false,"followers_count":3917,"friends_count":202,"listed_count":209,"created_at":"Fri Sep 18 19:22:26 +0000 2009","favourites_count":1,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":1173,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/102109549\/rhok_social_media_wallpaper.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/102109549\/rhok_social_media_wallpaper.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/905274924\/rhok_social_media_logo_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/905274924\/rhok_social_media_logo_normal.png","profile_link_color":"2087E7","profile_sidebar_border_color":"2087E7","profile_sidebar_fill_color":"E8E7E7","profile_text_color":"030303","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":2,"entities":{"hashtags":[{"text":"rhok","indices":[109,114]}],"urls":[{"url":"http:\/\/t.co\/Sk5BM7U3","expanded_url":"http:\/\/zvents.com\/e\/IhP3T\/7o","display_url":"zvents.com\/e\/IhP3T\/7o","indices":[64,84]}],"user_mentions":[{"screen_name":"codeforamerica","name":"Code for America","id":64482503,"id_str":"64482503","indices":[115,130]},{"screen_name":"TheaClay","name":"Thea Clay","id":34324747,"id_str":"34324747","indices":[131,140]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false},"retweet_count":2,"entities":{"hashtags":[{"text":"rhok","indices":[126,131]}],"urls":[{"url":"http:\/\/t.co\/Sk5BM7U3","expanded_url":"http:\/\/zvents.com\/e\/IhP3T\/7o","display_url":"zvents.com\/e\/IhP3T\/7o","indices":[81,101]}],"user_mentions":[{"screen_name":"randomhacks","name":"Random Hacks","id":75361247,"id_str":"75361247","indices":[3,15]},{"screen_name":"cod","name":"Chris OBrien","id":13791662,"id_str":"13791662","indices":[132,136]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
8
+ {"created_at":"Fri Sep 07 16:17:55 +0000 2012","id":244107236262170624,"id_str":"244107236262170624","text":"RT @jondot: Just published: \"Pragmatic Concurrency With #Ruby\" http:\/\/t.co\/kGEykswZ \/cc @JRuby @headius","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":10248172,"id_str":"10248172","name":"Fredrik Bj\u00f6rk","screen_name":"fbjork","location":"San Francisco, CA","description":"Director of Engineering at @banjo","url":"http:\/\/ban.jo","entities":{"url":{"urls":[{"url":"http:\/\/ban.jo","expanded_url":null,"indices":[0,13]}]},"description":{"urls":[]}},"protected":false,"followers_count":266,"friends_count":343,"listed_count":18,"created_at":"Wed Nov 14 14:58:28 +0000 2007","favourites_count":7,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":944,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"131516","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2167836514\/252562_10150648192185221_786305220_19068177_4887761_n_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2167836514\/252562_10150648192185221_786305220_19068177_4887761_n_normal.jpg","profile_link_color":"009999","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 15:53:34 +0000 2012","id":244101108983803904,"id_str":"244101108983803904","text":"Just published: \"Pragmatic Concurrency With #Ruby\" http:\/\/t.co\/kGEykswZ \/cc @JRuby @headius","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":25607541,"id_str":"25607541","name":"dotan nahum","screen_name":"jondot","location":"","description":"I'm just a mean code machine. Constantly scanning, hunting and building the next big thing.","url":"http:\/\/blog.paracode.com","entities":{"url":{"urls":[{"url":"http:\/\/blog.paracode.com","expanded_url":null,"indices":[0,24]}]},"description":{"urls":[]}},"protected":false,"followers_count":410,"friends_count":85,"listed_count":13,"created_at":"Sat Mar 21 00:26:10 +0000 2009","favourites_count":0,"utc_offset":-10800,"time_zone":"Greenland","geo_enabled":false,"verified":false,"statuses_count":784,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"2B1F44","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/437973354\/nwgrand_516_142243.jpg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/437973354\/nwgrand_516_142243.jpg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1181955409\/nd_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1181955409\/nd_normal.png","profile_link_color":"1C62B9","profile_sidebar_border_color":"F1A253","profile_sidebar_fill_color":"221309","profile_text_color":"755C8A","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":8,"entities":{"hashtags":[{"text":"Ruby","indices":[44,49]}],"urls":[{"url":"http:\/\/t.co\/kGEykswZ","expanded_url":"http:\/\/blog.paracode.com\/2012\/09\/07\/pragmatic-concurrency-with-ruby\/","display_url":"blog.paracode.com\/2012\/09\/07\/pra\u2026","indices":[51,71]}],"user_mentions":[{"screen_name":"jruby","name":"JRuby Dev Team","id":16132186,"id_str":"16132186","indices":[78,84]},{"screen_name":"headius","name":"Charles Nutter","id":9989362,"id_str":"9989362","indices":[85,93]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false},"retweet_count":8,"entities":{"hashtags":[{"text":"Ruby","indices":[56,61]}],"urls":[{"url":"http:\/\/t.co\/kGEykswZ","expanded_url":"http:\/\/blog.paracode.com\/2012\/09\/07\/pragmatic-concurrency-with-ruby\/","display_url":"blog.paracode.com\/2012\/09\/07\/pra\u2026","indices":[63,83]}],"user_mentions":[{"screen_name":"jondot","name":"dotan nahum","id":25607541,"id_str":"25607541","indices":[3,10]},{"screen_name":"jruby","name":"JRuby Dev Team","id":16132186,"id_str":"16132186","indices":[90,96]},{"screen_name":"headius","name":"Charles Nutter","id":9989362,"id_str":"9989362","indices":[97,105]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
9
+ {"created_at":"Fri Sep 07 16:14:53 +0000 2012","id":244106476048764928,"id_str":"244106476048764928","text":"If you are wondering how we computed the split bubbles: http:\/\/t.co\/BcaqSs5u","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":43593,"id_str":"43593","name":"Mike Bostock","screen_name":"mbostock","location":"San Francisco, CA","description":"Purveyor of fine misinformations.","url":"http:\/\/bost.ocks.org","entities":{"url":{"urls":[{"url":"http:\/\/bost.ocks.org","expanded_url":null,"indices":[0,20]}]},"description":{"urls":[]}},"protected":false,"followers_count":4090,"friends_count":181,"listed_count":227,"created_at":"Tue Dec 05 21:57:30 +0000 2006","favourites_count":124,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":2237,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"131516","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme14\/bg.gif","profile_background_tile":true,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1434042628\/mbostock-sf_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1434042628\/mbostock-sf_normal.png","profile_link_color":"9F0606","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"EFEFEF","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":1,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/BcaqSs5u","expanded_url":"http:\/\/bl.ocks.org\/3422480","display_url":"bl.ocks.org\/3422480","indices":[56,76]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
10
+ {"created_at":"Fri Sep 07 16:11:24 +0000 2012","id":244105599351148544,"id_str":"244105599351148544","text":"\u201cWrite drunk. Edit sober.\u201d\u2014Ernest Hemingway","source":"\u003ca href=\"http:\/\/stone.com\/neue\" rel=\"nofollow\"\u003eTwittelator Neue\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":485409945,"id_str":"485409945","name":"Fake Jack Dorsey","screen_name":"FakeDorsey","location":"San Francisco","description":"Simplify, bitches.","url":"http:\/\/square.twitter.com","entities":{"url":{"urls":[{"url":"http:\/\/square.twitter.com","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":3275,"friends_count":1,"listed_count":61,"created_at":"Tue Feb 07 05:16:26 +0000 2012","favourites_count":4,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":86,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1810072255\/Untitled_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1810072255\/Untitled_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":true,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":14,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false}
11
+ {"created_at":"Fri Sep 07 16:07:16 +0000 2012","id":244104558433951744,"id_str":"244104558433951744","text":"RT @wcmaier: Better banking through better ops: build something new with us @Simplify (remote, PDX) http:\/\/t.co\/8WgzKZH3","source":"\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for iOS\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":18713,"id_str":"18713","name":"Alex Payne","screen_name":"al3x","location":"Berlin (Aug 31 - Sept 21)","description":"Programmer. Writer. Secular Humanist.","url":"http:\/\/al3x.net","entities":{"url":{"urls":[{"url":"http:\/\/al3x.net","expanded_url":null,"indices":[0,15]}]},"description":{"urls":[]}},"protected":false,"followers_count":36487,"friends_count":323,"listed_count":2272,"created_at":"Thu Nov 23 19:29:11 +0000 2006","favourites_count":4615,"utc_offset":3600,"time_zone":"Berlin","geo_enabled":true,"verified":false,"statuses_count":23134,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"E5E9EB","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/357750272\/small_3_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/357750272\/small_3_normal.png","profile_link_color":"336699","profile_sidebar_border_color":"333333","profile_sidebar_fill_color":"C3CBD0","profile_text_color":"232323","profile_use_background_image":false,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 15:27:38 +0000 2012","id":244094582411890689,"id_str":"244094582411890689","text":"Better banking through better ops: build something new with us @Simplify (remote, PDX) http:\/\/t.co\/8WgzKZH3","source":"\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for iOS\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":11125102,"id_str":"11125102","name":"Will Maier","screen_name":"wcmaier","location":"Madison, WI, USA","description":"I help @Simplify ship beautiful things. Previously @lt_kije.","url":"http:\/\/wcm.aier.us\/","entities":{"url":{"urls":[{"url":"http:\/\/wcm.aier.us\/","expanded_url":null,"indices":[0,19]}]},"description":{"urls":[]}},"protected":false,"followers_count":240,"friends_count":193,"listed_count":16,"created_at":"Thu Dec 13 12:35:31 +0000 2007","favourites_count":2,"utc_offset":-21600,"time_zone":"Central Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":3898,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/39909052\/kije-final_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/39909052\/kije-final_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":3,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/8WgzKZH3","expanded_url":"http:\/\/careers.simple.com\/apply\/LKW4tQ\/Operations-Engineer.html","display_url":"careers.simple.com\/apply\/LKW4tQ\/O\u2026","indices":[87,107]}],"user_mentions":[{"screen_name":"Simplify","name":"Simple","id":71165241,"id_str":"71165241","indices":[63,72]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false},"retweet_count":3,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/8WgzKZH3","expanded_url":"http:\/\/careers.simple.com\/apply\/LKW4tQ\/Operations-Engineer.html","display_url":"careers.simple.com\/apply\/LKW4tQ\/O\u2026","indices":[100,120]}],"user_mentions":[{"screen_name":"wcmaier","name":"Will Maier","id":11125102,"id_str":"11125102","indices":[3,11]},{"screen_name":"Simplify","name":"Simple","id":71165241,"id_str":"71165241","indices":[76,85]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
12
+ {"created_at":"Fri Sep 07 16:05:38 +0000 2012","id":244104146997870594,"id_str":"244104146997870594","text":"We just announced Mosaic, what we've been working on since the Yobongo acquisition. My personal post, http:\/\/t.co\/ELOyIRZU @heymosaic","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":1882641,"id_str":"1882641","name":"Caleb Elston","screen_name":"calebelston","location":"San Francisco","description":"Co-founder & CEO of Yobongo. Dubious of people who claim to be experts. Formerly VP Products at Justin.tv. Advisor to Simpler.","url":"http:\/\/www.calebelston.com","entities":{"url":{"urls":[{"url":"http:\/\/www.calebelston.com","expanded_url":null,"indices":[0,26]}]},"description":{"urls":[]}},"protected":false,"followers_count":1960,"friends_count":151,"listed_count":136,"created_at":"Thu Mar 22 14:34:22 +0000 2007","favourites_count":815,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":7068,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"666666","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/322151965\/ngb.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2584558450\/elyaf9epw0kcnh9gxglp_normal.jpeg","profile_link_color":"0099CC","profile_sidebar_border_color":"E3E3E3","profile_sidebar_fill_color":"FFFFFF","profile_text_color":"292E38","profile_use_background_image":false,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":4,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/ELOyIRZU","expanded_url":"http:\/\/calebelston.com\/2012\/09\/07\/meet-mosaic\/","display_url":"calebelston.com\/2012\/09\/07\/mee\u2026","indices":[102,122]}],"user_mentions":[{"screen_name":"heymosaic","name":"Mosaic","id":772256556,"id_str":"772256556","indices":[123,133]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
13
+ {"created_at":"Fri Sep 07 16:01:18 +0000 2012","id":244103057175113729,"id_str":"244103057175113729","text":"Donate $10 or more --&gt; get your favorite car magnet: http:\/\/t.co\/NfRhl2s2 #Obama2012","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":813286,"id_str":"813286","name":"Barack Obama","screen_name":"BarackObama","location":"Washington, DC","description":"This account is run by #Obama2012 campaign staff. Tweets from the President are signed -bo.","url":"http:\/\/www.barackobama.com","entities":{"url":{"urls":[{"url":"http:\/\/www.barackobama.com","expanded_url":null,"indices":[0,26]}]},"description":{"urls":[]}},"protected":false,"followers_count":19449227,"friends_count":673288,"listed_count":175179,"created_at":"Mon Mar 05 22:08:25 +0000 2007","favourites_count":0,"utc_offset":-18000,"time_zone":"Eastern Time (US & Canada)","geo_enabled":false,"verified":true,"statuses_count":5968,"lang":"en","contributors_enabled":true,"is_translator":false,"profile_background_color":"77B0DC","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/584034019\/tkwyaf768hs9bylnus1k.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/584034019\/tkwyaf768hs9bylnus1k.jpeg","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2325704772\/wrrmef61i6jl91kwkmzq_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2325704772\/wrrmef61i6jl91kwkmzq_normal.png","profile_link_color":"2574AD","profile_sidebar_border_color":"C2E0F6","profile_sidebar_fill_color":"C2E0F6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":147,"entities":{"hashtags":[{"text":"Obama2012","indices":[77,87]}],"urls":[{"url":"http:\/\/t.co\/NfRhl2s2","expanded_url":"http:\/\/OFA.BO\/eWNq2T","display_url":"OFA.BO\/eWNq2T","indices":[56,76]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
14
+ {"created_at":"Fri Sep 07 16:00:25 +0000 2012","id":244102834398851073,"id_str":"244102834398851073","text":"RT @tenderlove: If corporations are people, can we use them to drive in the carpool lane?","source":"\u003ca href=\"http:\/\/sites.google.com\/site\/yorufukurou\/\" rel=\"nofollow\"\u003eYoruFukurou\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":20941662,"id_str":"20941662","name":"James Edward Gray II","screen_name":"JEG2","location":"Edmond, OK","description":"Rubyist, Husband, Father, Atheist, Oklahoman, and all around weird guy.","url":"http:\/\/blog.grayproductions.net","entities":{"url":{"urls":[{"url":"http:\/\/blog.grayproductions.net","expanded_url":null,"indices":[0,31]}]},"description":{"urls":[]}},"protected":false,"followers_count":4206,"friends_count":174,"listed_count":389,"created_at":"Sun Feb 15 22:05:54 +0000 2009","favourites_count":0,"utc_offset":-21600,"time_zone":"Central Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":11780,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"EBEBEB","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2311650093\/fkgorpzafxmsafxpf6wi_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2311650093\/fkgorpzafxmsafxpf6wi_normal.png","profile_link_color":"990000","profile_sidebar_border_color":"DFDFDF","profile_sidebar_fill_color":"F3F3F3","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 15:57:28 +0000 2012","id":244102091730210816,"id_str":"244102091730210816","text":"If corporations are people, can we use them to drive in the carpool lane?","source":"\u003ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003eEchofon\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":14761655,"id_str":"14761655","name":"Aaron Patterson","screen_name":"tenderlove","location":"Seattle, WA","description":"\u3072\u3052\u306e\u5c71\u7537\u3002 When I'm not trimming my beard, I'm hanging out with my lady, @ebiltwin.","url":"http:\/\/tenderlovemaking.com","entities":{"url":{"urls":[{"url":"http:\/\/tenderlovemaking.com","expanded_url":null,"indices":[0,27]}]},"description":{"urls":[]}},"protected":false,"followers_count":10869,"friends_count":365,"listed_count":862,"created_at":"Tue May 13 17:25:31 +0000 2008","favourites_count":275,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":14623,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1261953917\/headshot_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1261953917\/headshot_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":10,"entities":{"hashtags":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false},"retweet_count":10,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"tenderlove","name":"Aaron Patterson","id":14761655,"id_str":"14761655","indices":[3,14]}]},"favorited":false,"retweeted":false}
15
+ {"created_at":"Fri Sep 07 16:00:03 +0000 2012","id":244102741125890048,"id_str":"244102741125890048","text":"LDN\u2014Obama's nomination; Putin woos APEC; Bombs hit Damascus; Quakes shake China; Canada cuts Iran ties; weekend read: http:\/\/t.co\/OFs6dVW4","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":632391565,"id_str":"632391565","name":"Evening Edition","screen_name":"eveningedition","location":"","description":"The perfect commute-sized way to catch up on the day\u2019s news after a long day at work. Brought to you by @MuleDesign.","url":"http:\/\/evening-edition.com","entities":{"url":{"urls":[{"url":"http:\/\/evening-edition.com","expanded_url":null,"indices":[0,26]}]},"description":{"urls":[]}},"protected":false,"followers_count":3357,"friends_count":3,"listed_count":115,"created_at":"Tue Jul 10 23:02:44 +0000 2012","favourites_count":19,"utc_offset":null,"time_zone":null,"geo_enabled":false,"verified":false,"statuses_count":76,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"FFFFFF","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2406639576\/q8cnprnmdv0z0gt6wtda_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2406639576\/q8cnprnmdv0z0gt6wtda_normal.png","profile_link_color":"CC3333","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":false,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":3,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/OFs6dVW4","expanded_url":"http:\/\/evening-edition.com","display_url":"evening-edition.com","indices":[118,138]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
16
+ {"created_at":"Fri Sep 07 16:00:00 +0000 2012","id":244102729860009984,"id_str":"244102729860009984","text":"RT @ggreenwald: Democrats parade Osama bin Laden's corpse as their proudest achievement: why this goulish jingoism is so warped http:\/\/t ...","source":"\u003ca href=\"http:\/\/www.echofon.com\/\" rel=\"nofollow\"\u003eEchofon\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":14561327,"id_str":"14561327","name":"DHH","screen_name":"dhh","location":"Chicago, USA","description":"Creator of Ruby on Rails, Partner at 37signals, Co-author of NYT Best-Seller Rework, and racing driver in ALMS.","url":"http:\/\/david.heinemeierhansson.com","entities":{"url":{"urls":[{"url":"http:\/\/david.heinemeierhansson.com","expanded_url":null,"indices":[0,34]}]},"description":{"urls":[]}},"protected":false,"followers_count":63074,"friends_count":140,"listed_count":4874,"created_at":"Sun Apr 27 20:19:25 +0000 2008","favourites_count":5,"utc_offset":-21600,"time_zone":"Central Time (US & Canada)","geo_enabled":true,"verified":true,"statuses_count":8710,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2556368541\/alng5gtlmjhrdlr3qxqv_normal.jpeg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2556368541\/alng5gtlmjhrdlr3qxqv_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":true,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Fri Sep 07 15:23:23 +0000 2012","id":244093513216696321,"id_str":"244093513216696321","text":"Democrats parade Osama bin Laden's corpse as their proudest achievement: why this goulish jingoism is so warped http:\/\/t.co\/kood278s","source":"web","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":16076032,"id_str":"16076032","name":"Glenn Greenwald","screen_name":"ggreenwald","location":"","description":"Columnist & blogger for the Guardian (http:\/\/is.gd\/WWjIKY) - author, With Liberty and Justice for Some - dog\/animal fanatic ","url":"http:\/\/is.gd\/WWjIKY","entities":{"url":{"urls":[{"url":"http:\/\/is.gd\/WWjIKY","expanded_url":null,"indices":[0,19]}]},"description":{"urls":[]}},"protected":false,"followers_count":93616,"friends_count":610,"listed_count":5680,"created_at":"Mon Sep 01 03:13:32 +0000 2008","favourites_count":22,"utc_offset":-16200,"time_zone":"Caracas","geo_enabled":false,"verified":true,"statuses_count":22441,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2182259529\/glenn_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2182259529\/glenn_normal.jpg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":95,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/kood278s","expanded_url":"http:\/\/is.gd\/6rrjXd","display_url":"is.gd\/6rrjXd","indices":[112,132]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false},"retweet_count":95,"entities":{"hashtags":[],"urls":[],"user_mentions":[{"screen_name":"ggreenwald","name":"Glenn Greenwald","id":16076032,"id_str":"16076032","indices":[3,14]}]},"favorited":false,"retweeted":false}
17
+ {"created_at":"Fri Sep 07 15:59:03 +0000 2012","id":244102490646278146,"id_str":"244102490646278146","text":"The story of Mars Curiosity's gears, made by a factory in Rockford, IL: http:\/\/t.co\/MwCRsHQg","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":14372143,"id_str":"14372143","name":"Jason Fried","screen_name":"jasonfried","location":"Chicago, IL","description":"Founder of 37signals. Co-author of REWORK. Credo: It's simple until you make it complicated.","url":"http:\/\/www.37signals.com","entities":{"url":{"urls":[{"url":"http:\/\/www.37signals.com","expanded_url":null,"indices":[0,24]}]},"description":{"urls":[]}},"protected":false,"followers_count":90623,"friends_count":94,"listed_count":6724,"created_at":"Sun Apr 13 01:31:17 +0000 2008","favourites_count":502,"utc_offset":-21600,"time_zone":"Central Time (US & Canada)","geo_enabled":false,"verified":true,"statuses_count":11501,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/157820538\/37sicon1.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/157820538\/37sicon1.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/585991126\/jasonfried-avatar_normal.jpg","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/585991126\/jasonfried-avatar_normal.jpg","profile_link_color":"0099CC","profile_sidebar_border_color":"FFF8AD","profile_sidebar_fill_color":"F6FFD1","profile_text_color":"000000","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":4,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/MwCRsHQg","expanded_url":"http:\/\/kottke.org\/12\/09\/the-story-of-mars-curiositys-gears","display_url":"kottke.org\/12\/09\/the-stor\u2026","indices":[72,92]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
18
+ {"created_at":"Fri Sep 07 15:57:56 +0000 2012","id":244102209942458368,"id_str":"244102209942458368","text":"@episod @twitterapi now https:\/\/t.co\/I17jUTu2 and https:\/\/t.co\/deDu4Hgw seem to be missing \"1.1\" from the URL.","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":244100786940964865,"in_reply_to_status_id_str":"244100786940964865","in_reply_to_user_id":819797,"in_reply_to_user_id_str":"819797","in_reply_to_screen_name":"episod","user":{"id":7505382,"id_str":"7505382","name":"Erik Michaels-Ober","screen_name":"sferik","location":"San Francisco","description":"Vagabond.","url":"https:\/\/github.com\/sferik","entities":{"url":{"urls":[{"url":"https:\/\/github.com\/sferik","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":2383,"friends_count":210,"listed_count":126,"created_at":"Mon Jul 16 12:59:01 +0000 2007","favourites_count":4157,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":8342,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/643217856\/we_concept_bg2.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/643217856\/we_concept_bg2.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/I17jUTu2","expanded_url":"https:\/\/dev.twitter.com\/docs\/api\/post\/direct_messages\/destroy","display_url":"dev.twitter.com\/docs\/api\/post\/\u2026","indices":[24,45]},{"url":"https:\/\/t.co\/deDu4Hgw","expanded_url":"https:\/\/dev.twitter.com\/docs\/api\/post\/direct_messages\/new","display_url":"dev.twitter.com\/docs\/api\/post\/\u2026","indices":[50,71]}],"user_mentions":[{"screen_name":"episod","name":"Taylor Singletary","id":819797,"id_str":"819797","indices":[0,7]},{"screen_name":"twitterapi","name":"Twitter API","id":6253282,"id_str":"6253282","indices":[8,19]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
19
+ {"created_at":"Fri Sep 07 15:50:47 +0000 2012","id":244100411563339777,"id_str":"244100411563339777","text":"@episod @twitterapi Did you catch https:\/\/t.co\/VHsQvZT0 as well?","source":"\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":244097234432565248,"in_reply_to_status_id_str":"244097234432565248","in_reply_to_user_id":819797,"in_reply_to_user_id_str":"819797","in_reply_to_screen_name":"episod","user":{"id":7505382,"id_str":"7505382","name":"Erik Michaels-Ober","screen_name":"sferik","location":"San Francisco","description":"Vagabond.","url":"https:\/\/github.com\/sferik","entities":{"url":{"urls":[{"url":"https:\/\/github.com\/sferik","expanded_url":null,"indices":[0,25]}]},"description":{"urls":[]}},"protected":false,"followers_count":2383,"friends_count":210,"listed_count":126,"created_at":"Mon Jul 16 12:59:01 +0000 2007","favourites_count":4157,"utc_offset":-28800,"time_zone":"Pacific Time (US & Canada)","geo_enabled":true,"verified":false,"statuses_count":8342,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/643217856\/we_concept_bg2.png","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/643217856\/we_concept_bg2.png","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1759857427\/image1326743606_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"show_all_inline_media":true,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/VHsQvZT0","expanded_url":"https:\/\/twitter.com\/sferik\/status\/243988000076337152","display_url":"twitter.com\/sferik\/status\/\u2026","indices":[34,55]}],"user_mentions":[{"screen_name":"episod","name":"Taylor Singletary","id":819797,"id_str":"819797","indices":[0,7]},{"screen_name":"twitterapi","name":"Twitter API","id":6253282,"id_str":"6253282","indices":[8,19]}]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
20
+ {"created_at":"Fri Sep 07 15:47:01 +0000 2012","id":244099460672679938,"id_str":"244099460672679938","text":"Gentlemen, you can't fight in here! This is the war room! http:\/\/t.co\/kMxMYyqF","source":"\u003ca href=\"http:\/\/instagr.am\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":2897431,"id_str":"2897431","name":"Dave Wiskus ","screen_name":"dwiskus","location":"Denver \/ Amsterdam","description":"I draw pictures of software for money.","url":"http:\/\/betterelevation.com\/","entities":{"url":{"urls":[{"url":"http:\/\/betterelevation.com\/","expanded_url":null,"indices":[0,27]}]},"description":{"urls":[]}},"protected":false,"followers_count":2367,"friends_count":271,"listed_count":187,"created_at":"Thu Mar 29 21:37:02 +0000 2007","favourites_count":3314,"utc_offset":-25200,"time_zone":"Mountain Time (US & Canada)","geo_enabled":false,"verified":false,"statuses_count":12827,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"C6E2EE","profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme2\/bg.gif","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme2\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1514640834\/dwiskus-avatar-2011_normal.png","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1514640834\/dwiskus-avatar-2011_normal.png","profile_link_color":"1F98C7","profile_sidebar_border_color":"C6E2EE","profile_sidebar_fill_color":"DAECF4","profile_text_color":"663B12","profile_use_background_image":true,"show_all_inline_media":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweet_count":0,"entities":{"hashtags":[],"urls":[{"url":"http:\/\/t.co\/kMxMYyqF","expanded_url":"http:\/\/instagr.am\/p\/PR5cDLzFz5\/","display_url":"instagr.am\/p\/PR5cDLzFz5\/","indices":[58,78]}],"user_mentions":[]},"favorited":false,"retweeted":false,"possibly_sensitive":false}
@@ -5,14 +5,15 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
5
  SimpleCov::Formatter::HTMLFormatter,
6
6
  Coveralls::SimpleCov::Formatter
7
7
  ]
8
- SimpleCov.start
8
+ SimpleCov.start do
9
+ add_filter '.bundle'
10
+ end
9
11
 
10
12
  require 'tweetstream'
11
13
  require 'tweetstream/site_stream_client'
12
14
  require 'json'
13
15
  require 'rspec'
14
16
  require 'webmock/rspec'
15
- require 'yajl'
16
17
 
17
18
  WebMock.disable_net_connect!(:allow => 'coveralls.io')
18
19
 
@@ -28,8 +29,8 @@ end
28
29
 
29
30
  def samples(fixture)
30
31
  samples = []
31
- Yajl::Parser.parse(fixture(fixture), :symbolize_keys => true) do |hash|
32
- samples << hash
32
+ fixture(fixture).each_line do |line|
33
+ samples << JSON.parse(line, :symbolize_names => true)
33
34
  end
34
35
  samples
35
36
  end