sporkmonger-sax-machine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +3 -0
- data/LICENSE +20 -0
- data/README.md +56 -0
- data/Rakefile +53 -0
- data/lib/sax-machine.rb +17 -0
- data/lib/sax-machine/ns_stack.rb +41 -0
- data/lib/sax-machine/sax_collection_config.rb +56 -0
- data/lib/sax-machine/sax_config.rb +57 -0
- data/lib/sax-machine/sax_document.rb +107 -0
- data/lib/sax-machine/sax_element_config.rb +80 -0
- data/lib/sax-machine/sax_event_recorder.rb +35 -0
- data/lib/sax-machine/sax_handler.rb +118 -0
- data/lib/sax-machine/version.rb +33 -0
- data/spec/benchmarks/amazon.xml +40 -0
- data/spec/benchmarks/benchmark.rb +158 -0
- data/spec/benchmarks/public_timeline.xml +411 -0
- data/spec/sax-machine/atom.xml +165 -0
- data/spec/sax-machine/sax_document_spec.rb +667 -0
- data/spec/spec.opts +2 -0
- data/spec/spec_helper.rb +7 -0
- data/tasks/clobber.rake +2 -0
- data/tasks/gem.rake +69 -0
- data/tasks/git.rake +40 -0
- data/tasks/metrics.rake +22 -0
- data/tasks/rdoc.rake +26 -0
- data/tasks/spec.rake +70 -0
- data/tasks/yard.rake +26 -0
- metadata +175 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
module SAXMachine
|
2
|
+
class SAXEventRecorder < SAXHandler
|
3
|
+
def initialize(nsstack)
|
4
|
+
super(nil, nsstack)
|
5
|
+
@events = []
|
6
|
+
end
|
7
|
+
|
8
|
+
def object
|
9
|
+
# First and last belong to the parent element
|
10
|
+
@events[1..-2]
|
11
|
+
end
|
12
|
+
|
13
|
+
def start_element(name, attrs = nil)
|
14
|
+
@nsstack = NSStack.new(@nsstack, attrs)
|
15
|
+
prefix, name = name.split(COLON, 2)
|
16
|
+
prefix, name = nil, prefix unless name
|
17
|
+
@events << [:start_element, @nsstack[prefix], name, attrs]
|
18
|
+
end
|
19
|
+
|
20
|
+
def end_element(name)
|
21
|
+
prefix, name = name.split(COLON, 2)
|
22
|
+
prefix, name = nil, prefix unless name
|
23
|
+
@events << [:end_element, @nsstack[prefix], name]
|
24
|
+
@nsstack = @nsstack.pop
|
25
|
+
end
|
26
|
+
|
27
|
+
def characters(string)
|
28
|
+
@events << [:chars, string]
|
29
|
+
end
|
30
|
+
|
31
|
+
def sax_config
|
32
|
+
raise
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
require 'sax-machine/ns_stack'
|
3
|
+
|
4
|
+
module SAXMachine
|
5
|
+
class SAXHandler < Nokogiri::XML::SAX::Document
|
6
|
+
attr_reader :object
|
7
|
+
|
8
|
+
def initialize(object, nsstack=nil)
|
9
|
+
@object = object
|
10
|
+
@nsstack = nsstack || NSStack.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def characters(string)
|
14
|
+
if parsing_collection?
|
15
|
+
@collection_handler.characters(string)
|
16
|
+
elsif @element_config
|
17
|
+
if !@value || @value == EMPTY_STRING
|
18
|
+
@value = string
|
19
|
+
else
|
20
|
+
@value << string
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def cdata_block(string)
|
26
|
+
characters(string)
|
27
|
+
end
|
28
|
+
|
29
|
+
def start_element(name, attrs = nil)
|
30
|
+
@name = name
|
31
|
+
@attrs = (attrs || []).map do |k, v|
|
32
|
+
# Do we actually need to decode the attribute key or just the value?
|
33
|
+
[SAXHandler.decode_xml(k), SAXHandler.decode_xml(v)]
|
34
|
+
end
|
35
|
+
@nsstack = NSStack.new(@nsstack, @attrs)
|
36
|
+
|
37
|
+
if parsing_collection?
|
38
|
+
@collection_handler.start_element(@name, @attrs)
|
39
|
+
elsif @collection_config = sax_config.collection_config(@name, @nsstack)
|
40
|
+
@collection_handler = @collection_config.handler(@nsstack)
|
41
|
+
if @object.class != @collection_handler.object.class
|
42
|
+
@collection_handler.start_element(@name, @attrs)
|
43
|
+
end
|
44
|
+
elsif (element_configs = sax_config.element_configs_for_attribute(@name, @attrs)).any?
|
45
|
+
parse_element_attributes(element_configs)
|
46
|
+
set_element_config_for_element_value
|
47
|
+
else
|
48
|
+
set_element_config_for_element_value
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def end_element(name)
|
53
|
+
if parsing_collection? && @collection_config.name == name.split(COLON, 2).last
|
54
|
+
@collection_handler.end_element(name)
|
55
|
+
@object.send(@collection_config.accessor) << @collection_handler.object
|
56
|
+
reset_current_collection
|
57
|
+
elsif parsing_collection?
|
58
|
+
@collection_handler.end_element(name)
|
59
|
+
elsif characaters_captured?
|
60
|
+
@object.send(@element_config.setter, @value)
|
61
|
+
end
|
62
|
+
|
63
|
+
reset_current_tag
|
64
|
+
@nsstack = @nsstack.pop
|
65
|
+
end
|
66
|
+
|
67
|
+
def characaters_captured?
|
68
|
+
!@value.nil? && !@value.empty?
|
69
|
+
end
|
70
|
+
|
71
|
+
def parsing_collection?
|
72
|
+
!@collection_handler.nil?
|
73
|
+
end
|
74
|
+
|
75
|
+
def parse_element_attributes(element_configs)
|
76
|
+
element_configs.each do |ec|
|
77
|
+
@object.send(ec.setter, ec.value_from_attrs(@attrs))
|
78
|
+
end
|
79
|
+
@element_config = nil
|
80
|
+
end
|
81
|
+
|
82
|
+
def set_element_config_for_element_value
|
83
|
+
@value = EMPTY_STRING
|
84
|
+
@element_config = sax_config.element_config_for_tag(@name, @attrs, @nsstack)
|
85
|
+
end
|
86
|
+
|
87
|
+
def reset_current_collection
|
88
|
+
@collection_handler = nil
|
89
|
+
@collection_config = nil
|
90
|
+
end
|
91
|
+
|
92
|
+
def reset_current_tag
|
93
|
+
@name = nil
|
94
|
+
@attrs = nil
|
95
|
+
@value = nil
|
96
|
+
@element_config = nil
|
97
|
+
end
|
98
|
+
|
99
|
+
def sax_config
|
100
|
+
@object.class.sax_config
|
101
|
+
end
|
102
|
+
|
103
|
+
##
|
104
|
+
# Decodes XML special characters.
|
105
|
+
def self.decode_xml(str)
|
106
|
+
return str.map &method(:decode_xml) if str.kind_of?(Array)
|
107
|
+
|
108
|
+
# entities = {
|
109
|
+
# '#38' => '&',
|
110
|
+
# '#13' => "\r",
|
111
|
+
# }
|
112
|
+
# entities.keys.inject(str) { |string, key|
|
113
|
+
# string.gsub(/&#{key};/, entities[key])
|
114
|
+
# }
|
115
|
+
CGI.unescapeHTML(str)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# SAX Machine, Copyright (c) 2009 Paul Dix
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
# a copy of this software and associated documentation files (the
|
5
|
+
# "Software"), to deal in the Software without restriction, including
|
6
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
# the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
22
|
+
# Used to prevent the class/module from being loaded more than once
|
23
|
+
unless defined? SAXMachine::VERSION
|
24
|
+
module SAXMachine
|
25
|
+
module VERSION
|
26
|
+
MAJOR = 0
|
27
|
+
MINOR = 1
|
28
|
+
TINY = 0
|
29
|
+
|
30
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ItemSearchResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
|
3
|
+
<OperationRequest>
|
4
|
+
<HTTPHeaders>
|
5
|
+
<Header Name="UserAgent">
|
6
|
+
</Header>
|
7
|
+
</HTTPHeaders>
|
8
|
+
<RequestId>16WRJBVEM155Q026KCV1</RequestId>
|
9
|
+
<Arguments>
|
10
|
+
<Argument Name="SearchIndex" Value="Books"></Argument>
|
11
|
+
<Argument Name="Service" Value="AWSECommerceService"></Argument>
|
12
|
+
<Argument Name="Title" Value="Ruby on Rails"></Argument>
|
13
|
+
<Argument Name="Operation" Value="ItemSearch"></Argument>
|
14
|
+
<Argument Name="AWSAccessKeyId" Value="dontbeaswoosh"></Argument>
|
15
|
+
</Arguments>
|
16
|
+
<RequestProcessingTime>0.064924955368042</RequestProcessingTime>
|
17
|
+
</OperationRequest>
|
18
|
+
<Items>
|
19
|
+
<Request>
|
20
|
+
<IsValid>True</IsValid>
|
21
|
+
<ItemSearchRequest>
|
22
|
+
<SearchIndex>Books</SearchIndex>
|
23
|
+
<Title>Ruby on Rails</Title>
|
24
|
+
</ItemSearchRequest>
|
25
|
+
</Request>
|
26
|
+
<TotalResults>22</TotalResults>
|
27
|
+
<TotalPages>3</TotalPages>
|
28
|
+
<Item>
|
29
|
+
<ASIN>0321480791</ASIN>
|
30
|
+
<DetailPageURL>http://www.amazon.com/gp/redirect.html%3FASIN=0321480791%26tag=ws%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/0321480791%253FSubscriptionId=dontbeaswoosh</DetailPageURL>
|
31
|
+
<ItemAttributes>
|
32
|
+
<Author>Michael Hartl</Author>
|
33
|
+
<Author>Aurelius Prochazka</Author>
|
34
|
+
<Manufacturer>Addison-Wesley Professional</Manufacturer>
|
35
|
+
<ProductGroup>Book</ProductGroup>
|
36
|
+
<Title>RailsSpace: Building a Social Networking Website with Ruby on Rails (Addison-Wesley Professional Ruby Series)</Title>
|
37
|
+
</ItemAttributes>
|
38
|
+
</Item>
|
39
|
+
</Items>
|
40
|
+
</ItemSearchResponse>
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'benchmark'
|
3
|
+
require 'happymapper'
|
4
|
+
require 'sax-machine'
|
5
|
+
require 'rfeedparser'
|
6
|
+
include Benchmark
|
7
|
+
benchmark_iterations = 100
|
8
|
+
|
9
|
+
module Feedzirra
|
10
|
+
class AtomEntry
|
11
|
+
include SAXMachine
|
12
|
+
element :title
|
13
|
+
element :name, :as => :author
|
14
|
+
element "feedburner:origLink", :as => :url
|
15
|
+
element :summary
|
16
|
+
element :content
|
17
|
+
element :published
|
18
|
+
end
|
19
|
+
|
20
|
+
# Class for parsing Atom feeds
|
21
|
+
class Atom
|
22
|
+
include SAXMachine
|
23
|
+
element :title
|
24
|
+
element :link, :value => :href, :as => :url, :with => {:type => "text/html"}
|
25
|
+
element :link, :value => :href, :as => :feed_url, :with => {:type => "application/atom+xml"}
|
26
|
+
elements :entry, :as => :entries, :class => AtomEntry
|
27
|
+
end
|
28
|
+
end
|
29
|
+
feed_text = File.read("spec/sax-machine/atom.xml")
|
30
|
+
|
31
|
+
benchmark do |t|
|
32
|
+
t.report("feedzirra") do
|
33
|
+
benchmark_iterations.times {
|
34
|
+
Feedzirra::Atom.new.parse(feed_text)
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
t.report("rfeedparser") do
|
39
|
+
benchmark_iterations.times {
|
40
|
+
FeedParser.parse(feed_text)
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# class AtomEntry
|
46
|
+
# include SAXMachine
|
47
|
+
# element :title
|
48
|
+
# element :name, :as => :author
|
49
|
+
# element :summary
|
50
|
+
# end
|
51
|
+
# class Atom
|
52
|
+
# include SAXMachine
|
53
|
+
# element :title
|
54
|
+
# elements :entry, :as => :entries, :class => AtomEntry
|
55
|
+
# end
|
56
|
+
#
|
57
|
+
# class Entry
|
58
|
+
# include HappyMapper
|
59
|
+
# element :title, String
|
60
|
+
# element :name, String
|
61
|
+
# element :summary, String
|
62
|
+
# end
|
63
|
+
# class Feed
|
64
|
+
# include HappyMapper
|
65
|
+
# element :title, String
|
66
|
+
# has_many :entry, Entry
|
67
|
+
# end
|
68
|
+
# feed_text = File.read("spec/sax-machine/atom.xml")
|
69
|
+
#
|
70
|
+
# benchmark do |t|
|
71
|
+
# t.report("sax-machine") do
|
72
|
+
# benchmark_iterations.times {
|
73
|
+
# Atom.new.parse(feed_text)
|
74
|
+
# }
|
75
|
+
# end
|
76
|
+
#
|
77
|
+
# t.report("happymapper") do
|
78
|
+
# benchmark_iterations.times {
|
79
|
+
# Feed.parse(feed_text)
|
80
|
+
# }
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
|
84
|
+
# xml = File.read("spec/benchmarks/public_timeline.xml")
|
85
|
+
# class Status
|
86
|
+
# include HappyMapper
|
87
|
+
#
|
88
|
+
# element :text, String
|
89
|
+
# element :source, String
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
# class Statuses
|
93
|
+
# include SAXMachine
|
94
|
+
#
|
95
|
+
# elements :status, {:as => :statuses, :class => Class.new do
|
96
|
+
# include SAXMachine
|
97
|
+
# element :text
|
98
|
+
# element :source
|
99
|
+
# end}
|
100
|
+
# end
|
101
|
+
#
|
102
|
+
# benchmark do |t|
|
103
|
+
# t.report("happy mapper") do
|
104
|
+
# benchmark_iterations.times {
|
105
|
+
# Status.parse(xml)
|
106
|
+
# }
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
# t.report("sax-machine") do
|
110
|
+
# benchmark_iterations.times {
|
111
|
+
# Statuses.parse(xml)
|
112
|
+
# }
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
|
116
|
+
# xml = File.read("spec/benchmarks/amazon.xml")
|
117
|
+
# class HItem
|
118
|
+
# include HappyMapper
|
119
|
+
#
|
120
|
+
# tag 'Item' # if you put class in module you need tag
|
121
|
+
# element :asin, String, :tag => 'ASIN'
|
122
|
+
# element :detail_page_url, String, :tag => 'DetailPageURL'
|
123
|
+
# element :manufacturer, String, :tag => 'Manufacturer', :deep => true
|
124
|
+
# end
|
125
|
+
# class HItems
|
126
|
+
# include HappyMapper
|
127
|
+
#
|
128
|
+
# tag 'Items' # if you put class in module you need tag
|
129
|
+
# # element :total_results, Integer, :tag => 'TotalResults'
|
130
|
+
# # element :total_pages, Integer, :tag => 'TotalPages'
|
131
|
+
# has_many :items, Item
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
# class Item
|
135
|
+
# include SAXMachine
|
136
|
+
#
|
137
|
+
# element :ASIN, :as => :asin
|
138
|
+
# element :DetailPageUrl, :as => :detail_page_url
|
139
|
+
# element :Manufacturer, :as => :manufacturer
|
140
|
+
# end
|
141
|
+
# class Items
|
142
|
+
# include SAXMachine
|
143
|
+
# elements :Item, :as => :items
|
144
|
+
# end
|
145
|
+
#
|
146
|
+
# benchmark do |t|
|
147
|
+
# t.report("sax-machine") do
|
148
|
+
# benchmark_iterations.times {
|
149
|
+
# Items.new.parse(xml)
|
150
|
+
# }
|
151
|
+
# end
|
152
|
+
#
|
153
|
+
# t.report("happymapper") do
|
154
|
+
# benchmark_iterations.times {
|
155
|
+
# HItems.parse(xml)
|
156
|
+
# }
|
157
|
+
# end
|
158
|
+
# end
|
@@ -0,0 +1,411 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<statuses type="array">
|
3
|
+
<status>
|
4
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
5
|
+
<id>1122786091</id>
|
6
|
+
<text>@Ryudokun :-P</text>
|
7
|
+
<source>web</source>
|
8
|
+
<truncated>false</truncated>
|
9
|
+
<in_reply_to_status_id>1122783776</in_reply_to_status_id>
|
10
|
+
<in_reply_to_user_id>14090866</in_reply_to_user_id>
|
11
|
+
<favorited>false</favorited>
|
12
|
+
<user>
|
13
|
+
<id>2685941</id>
|
14
|
+
<name>Zafiro Hernández</name>
|
15
|
+
<screen_name>kethzy</screen_name>
|
16
|
+
<description>Escritora de la revista Niponia, turistologa y loca enamorada</description>
|
17
|
+
<location>Mexico</location>
|
18
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/57794212/candado_normal.jpg</profile_image_url>
|
19
|
+
<url>http://www.niponia.com.mx</url>
|
20
|
+
<protected>false</protected>
|
21
|
+
<followers_count>280</followers_count>
|
22
|
+
</user>
|
23
|
+
</status><status>
|
24
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
25
|
+
<id>1122786090</id>
|
26
|
+
<text>New blog post: Welcome to Life Sais http://lifesais.com/2009/01/life-sais/</text>
|
27
|
+
<source><a href="http://alexking.org/projects/wordpress">Twitter Tools</a></source>
|
28
|
+
<truncated>false</truncated>
|
29
|
+
<in_reply_to_status_id />
|
30
|
+
<in_reply_to_user_id />
|
31
|
+
<favorited>false</favorited>
|
32
|
+
<user>
|
33
|
+
<id>16279065</id>
|
34
|
+
<name>Sais</name>
|
35
|
+
<screen_name>Sais</screen_name>
|
36
|
+
<description>I'm sort of a big deal hehehehe*</description>
|
37
|
+
<location>NY</location>
|
38
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/69122175/Picture_2_normal.png</profile_image_url>
|
39
|
+
<url>http://www.supersais.com/blog</url>
|
40
|
+
<protected>false</protected>
|
41
|
+
<followers_count>134</followers_count>
|
42
|
+
</user>
|
43
|
+
</status><status>
|
44
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
45
|
+
<id>1122786089</id>
|
46
|
+
<text>On Youtube. Youtube.com/TinyHustla</text>
|
47
|
+
<source>web</source>
|
48
|
+
<truncated>false</truncated>
|
49
|
+
<in_reply_to_status_id />
|
50
|
+
<in_reply_to_user_id />
|
51
|
+
<favorited>false</favorited>
|
52
|
+
<user>
|
53
|
+
<id>19052333</id>
|
54
|
+
<name>Alonzo Nuno</name>
|
55
|
+
<screen_name>SouljaSkoolSwag</screen_name>
|
56
|
+
<description />
|
57
|
+
<location />
|
58
|
+
<profile_image_url>http://static.twitter.com/images/default_profile_normal.png</profile_image_url>
|
59
|
+
<url />
|
60
|
+
<protected>false</protected>
|
61
|
+
<followers_count>0</followers_count>
|
62
|
+
</user>
|
63
|
+
</status><status>
|
64
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
65
|
+
<id>1122786088</id>
|
66
|
+
<text>@scanhead it will be a well deserved win if it walks away with Best Animated. I can't think of anything that comes close</text>
|
67
|
+
<source><a href="http://www.tweetdeck.com/">TweetDeck</a></source>
|
68
|
+
<truncated>false</truncated>
|
69
|
+
<in_reply_to_status_id>1122156627</in_reply_to_status_id>
|
70
|
+
<in_reply_to_user_id>16721278</in_reply_to_user_id>
|
71
|
+
<favorited>false</favorited>
|
72
|
+
<user>
|
73
|
+
<id>14518496</id>
|
74
|
+
<name>David Chapman</name>
|
75
|
+
<screen_name>davechappers</screen_name>
|
76
|
+
<description></description>
|
77
|
+
<location>Cambridge</location>
|
78
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/70439325/Photo_3_normal.jpg</profile_image_url>
|
79
|
+
<url></url>
|
80
|
+
<protected>false</protected>
|
81
|
+
<followers_count>2</followers_count>
|
82
|
+
</user>
|
83
|
+
</status><status>
|
84
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
85
|
+
<id>1122786087</id>
|
86
|
+
<text>Craps is an interesting game.</text>
|
87
|
+
<source><a href="http://orangatame.com/products/twitterberry/">TwitterBerry</a></source>
|
88
|
+
<truncated>false</truncated>
|
89
|
+
<in_reply_to_status_id />
|
90
|
+
<in_reply_to_user_id />
|
91
|
+
<favorited>false</favorited>
|
92
|
+
<user>
|
93
|
+
<id>16436531</id>
|
94
|
+
<name>chaser1975</name>
|
95
|
+
<screen_name>chaser1975</screen_name>
|
96
|
+
<description></description>
|
97
|
+
<location>Jacksonville</location>
|
98
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/63201969/July8_2008_047_normal.jpg</profile_image_url>
|
99
|
+
<url></url>
|
100
|
+
<protected>false</protected>
|
101
|
+
<followers_count>27</followers_count>
|
102
|
+
</user>
|
103
|
+
</status><status>
|
104
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
105
|
+
<id>1122786086</id>
|
106
|
+
<text>Intel's net profit drops 90 percent... ouch. http://tinyurl.com/8elfpl</text>
|
107
|
+
<source><a href="http://iconfactory.com/software/twitterrific">twitterrific</a></source>
|
108
|
+
<truncated>false</truncated>
|
109
|
+
<in_reply_to_status_id />
|
110
|
+
<in_reply_to_user_id />
|
111
|
+
<favorited>false</favorited>
|
112
|
+
<user>
|
113
|
+
<id>14970813</id>
|
114
|
+
<name>blobinabottle</name>
|
115
|
+
<screen_name>blobinabottle</screen_name>
|
116
|
+
<description></description>
|
117
|
+
<location></location>
|
118
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/54912507/domo_normal.jpg</profile_image_url>
|
119
|
+
<url>http://blobinabottle.blogspot.com</url>
|
120
|
+
<protected>false</protected>
|
121
|
+
<followers_count>38</followers_count>
|
122
|
+
</user>
|
123
|
+
</status><status>
|
124
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
125
|
+
<id>1122786083</id>
|
126
|
+
<text>Re-pinging @Greed32: hahah I'm bored/curious and plus I only respond to good answers and normal people</text>
|
127
|
+
<source><a href="http://twitter.com/twinkleking">Twinkle</a></source>
|
128
|
+
<truncated>false</truncated>
|
129
|
+
<in_reply_to_status_id />
|
130
|
+
<in_reply_to_user_id />
|
131
|
+
<favorited>false</favorited>
|
132
|
+
<user>
|
133
|
+
<id>18010200</id>
|
134
|
+
<name>lenalover</name>
|
135
|
+
<screen_name>lenalover</screen_name>
|
136
|
+
<description>escapism is key in this fantasy world </description>
|
137
|
+
<location>Pompton Lakes, New Jersey</location>
|
138
|
+
<profile_image_url>http://static.twitter.com/images/default_profile_normal.png</profile_image_url>
|
139
|
+
<url></url>
|
140
|
+
<protected>false</protected>
|
141
|
+
<followers_count>31</followers_count>
|
142
|
+
</user>
|
143
|
+
</status><status>
|
144
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
145
|
+
<id>1122786082</id>
|
146
|
+
<text>And what is the grocery store membership all about anyway?</text>
|
147
|
+
<source><a href="http://www.twittermail.com/">TwitterMail</a></source>
|
148
|
+
<truncated>false</truncated>
|
149
|
+
<in_reply_to_status_id />
|
150
|
+
<in_reply_to_user_id />
|
151
|
+
<favorited>false</favorited>
|
152
|
+
<user>
|
153
|
+
<id>14221234</id>
|
154
|
+
<name>susbarefoot</name>
|
155
|
+
<screen_name>susbarefoot</screen_name>
|
156
|
+
<description>In life, we have poop.</description>
|
157
|
+
<location>Raleigh, NC</location>
|
158
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/54048743/avatar_normal.gif</profile_image_url>
|
159
|
+
<url></url>
|
160
|
+
<protected>false</protected>
|
161
|
+
<followers_count>49</followers_count>
|
162
|
+
</user>
|
163
|
+
</status><status>
|
164
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
165
|
+
<id>1122786081</id>
|
166
|
+
<text>@nfreader I...should be FLYING! NOT SWIMMING!!</text>
|
167
|
+
<source><a href="http://iconfactory.com/software/twitterrific">twitterrific</a></source>
|
168
|
+
<truncated>false</truncated>
|
169
|
+
<in_reply_to_status_id>1122783193</in_reply_to_status_id>
|
170
|
+
<in_reply_to_user_id>10014522</in_reply_to_user_id>
|
171
|
+
<favorited>false</favorited>
|
172
|
+
<user>
|
173
|
+
<id>5723532</id>
|
174
|
+
<name>Bradley</name>
|
175
|
+
<screen_name>warbrain</screen_name>
|
176
|
+
<description></description>
|
177
|
+
<location>Des Plaines, IL (42.028351,-87</location>
|
178
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/69653184/Photo_112_normal.jpg</profile_image_url>
|
179
|
+
<url>http://bradleysays.com</url>
|
180
|
+
<protected>false</protected>
|
181
|
+
<followers_count>420</followers_count>
|
182
|
+
</user>
|
183
|
+
</status><status>
|
184
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
185
|
+
<id>1122786080</id>
|
186
|
+
<text>You guys are too funny, do you think we have worn out TWTTRSTRM yet? LOL I'm heading off for the night, not feeling too well * pout *</text>
|
187
|
+
<source>web</source>
|
188
|
+
<truncated>false</truncated>
|
189
|
+
<in_reply_to_status_id />
|
190
|
+
<in_reply_to_user_id />
|
191
|
+
<favorited>false</favorited>
|
192
|
+
<user>
|
193
|
+
<id>16618589</id>
|
194
|
+
<name>Pretty Bullet</name>
|
195
|
+
<screen_name>prettybullet</screen_name>
|
196
|
+
<description>The prettiest bullet on Squidoo!</description>
|
197
|
+
<location>Spanish, Ontario Canada</location>
|
198
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/67497171/1avatar-xmas-78_normal.jpg</profile_image_url>
|
199
|
+
<url>http://www.squidoo.com/lensmasters/awelldressedbullet</url>
|
200
|
+
<protected>false</protected>
|
201
|
+
<followers_count>109</followers_count>
|
202
|
+
</user>
|
203
|
+
</status><status>
|
204
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
205
|
+
<id>1122786079</id>
|
206
|
+
<text>Thinks her scones are good but a little well done...</text>
|
207
|
+
<source><a href="http://help.twitter.com/index.php?pg=kb.page&id=75">txt</a></source>
|
208
|
+
<truncated>false</truncated>
|
209
|
+
<in_reply_to_status_id />
|
210
|
+
<in_reply_to_user_id />
|
211
|
+
<favorited>false</favorited>
|
212
|
+
<user>
|
213
|
+
<id>15357848</id>
|
214
|
+
<name>brittymine</name>
|
215
|
+
<screen_name>brittymine</screen_name>
|
216
|
+
<description>i make your dreams come true!</description>
|
217
|
+
<location>at my house!</location>
|
218
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/56368682/543476751_70398214dc_t_normal.jpg</profile_image_url>
|
219
|
+
<url></url>
|
220
|
+
<protected>false</protected>
|
221
|
+
<followers_count>15</followers_count>
|
222
|
+
</user>
|
223
|
+
</status><status>
|
224
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
225
|
+
<id>1122786078</id>
|
226
|
+
<text>Mariam N’KASSAI : Togo:
|
227
|
+
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
$0 of $1,025 raised.
|
232
|
+
|
233
|
+
Started raising funds on Jan 1.. http://tinyurl.com/99bx65</text>
|
234
|
+
<source><a href="http://twitterfeed.com">twitterfeed</a></source>
|
235
|
+
<truncated>false</truncated>
|
236
|
+
<in_reply_to_status_id />
|
237
|
+
<in_reply_to_user_id />
|
238
|
+
<favorited>false</favorited>
|
239
|
+
<user>
|
240
|
+
<id>18072695</id>
|
241
|
+
<name>Microfinance</name>
|
242
|
+
<screen_name>Microfinance</screen_name>
|
243
|
+
<description />
|
244
|
+
<location />
|
245
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/69655320/kiva_normal.jpg</profile_image_url>
|
246
|
+
<url />
|
247
|
+
<protected>false</protected>
|
248
|
+
<followers_count>12</followers_count>
|
249
|
+
</user>
|
250
|
+
</status><status>
|
251
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
252
|
+
<id>1122786077</id>
|
253
|
+
<text>@VibeMagazine ...jokin.. but nah fo' real i killed it, though!! lol</text>
|
254
|
+
<source>web</source>
|
255
|
+
<truncated>false</truncated>
|
256
|
+
<in_reply_to_status_id>1122779374</in_reply_to_status_id>
|
257
|
+
<in_reply_to_user_id>14691200</in_reply_to_user_id>
|
258
|
+
<favorited>false</favorited>
|
259
|
+
<user>
|
260
|
+
<id>16541773</id>
|
261
|
+
<name>Leroy Duncan Jr.</name>
|
262
|
+
<screen_name>gooduncan</screen_name>
|
263
|
+
<description>imma music lover, cool and funny in a nerdy way brother, spread peace not hate, get along with one another...</description>
|
264
|
+
<location>North Carolina</location>
|
265
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/69820903/my_stare_normal.jpg</profile_image_url>
|
266
|
+
<url></url>
|
267
|
+
<protected>false</protected>
|
268
|
+
<followers_count>15</followers_count>
|
269
|
+
</user>
|
270
|
+
</status><status>
|
271
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
272
|
+
<id>1122786076</id>
|
273
|
+
<text>tonight was great to be a part of. looking forward to sunday to see Gods work in action.</text>
|
274
|
+
<source><a href="http://help.twitter.com/index.php?pg=kb.page&id=75">txt</a></source>
|
275
|
+
<truncated>false</truncated>
|
276
|
+
<in_reply_to_status_id />
|
277
|
+
<in_reply_to_user_id />
|
278
|
+
<favorited>false</favorited>
|
279
|
+
<user>
|
280
|
+
<id>19048879</id>
|
281
|
+
<name>Erica Rupert</name>
|
282
|
+
<screen_name>ericarupert</screen_name>
|
283
|
+
<description>obsessed with Bryson ; )</description>
|
284
|
+
<location>Gville</location>
|
285
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/71370743/127_127_normal.JPG</profile_image_url>
|
286
|
+
<url></url>
|
287
|
+
<protected>false</protected>
|
288
|
+
<followers_count>2</followers_count>
|
289
|
+
</user>
|
290
|
+
</status><status>
|
291
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
292
|
+
<id>1122786075</id>
|
293
|
+
<text>@Crystal_clear I need to update my twitter</text>
|
294
|
+
<source>web</source>
|
295
|
+
<truncated>false</truncated>
|
296
|
+
<in_reply_to_status_id>1122782227</in_reply_to_status_id>
|
297
|
+
<in_reply_to_user_id>11832612</in_reply_to_user_id>
|
298
|
+
<favorited>false</favorited>
|
299
|
+
<user>
|
300
|
+
<id>16586561</id>
|
301
|
+
<name>KristinaLeigh</name>
|
302
|
+
<screen_name>KristinaLeigh</screen_name>
|
303
|
+
<description>A Momma with a six year old son with Bipolar and one girl on the way....</description>
|
304
|
+
<location>Mandeville</location>
|
305
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/61244564/Phillip_normal.jpg</profile_image_url>
|
306
|
+
<url>http://itrhymeswithbanana.blogspot.com</url>
|
307
|
+
<protected>false</protected>
|
308
|
+
<followers_count>42</followers_count>
|
309
|
+
</user>
|
310
|
+
</status><status>
|
311
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
312
|
+
<id>1122786074</id>
|
313
|
+
<text>RT @BreakingNewsOn: The Minnesota Star Tribune which was founded in 1867 says it has filed for Chapter 11 bankruptcy, according to its w ...</text>
|
314
|
+
<source><a href="http://socialscope.net">SocialScope</a></source>
|
315
|
+
<truncated>false</truncated>
|
316
|
+
<in_reply_to_status_id />
|
317
|
+
<in_reply_to_user_id />
|
318
|
+
<favorited>false</favorited>
|
319
|
+
<user>
|
320
|
+
<id>12332112</id>
|
321
|
+
<name>Amit Kumar</name>
|
322
|
+
<screen_name>amitkumar01</screen_name>
|
323
|
+
<description>CEO Ubiquitous Systems </description>
|
324
|
+
<location>San Francisco, California 9410</location>
|
325
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/52548135/frameAndServeImage.pl_normal.jpeg</profile_image_url>
|
326
|
+
<url>http:///www.socialscope.net</url>
|
327
|
+
<protected>false</protected>
|
328
|
+
<followers_count>125</followers_count>
|
329
|
+
</user>
|
330
|
+
</status><status>
|
331
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
332
|
+
<id>1122786073</id>
|
333
|
+
<text>Annie made my birthday cake herself! She is sooooo proud.</text>
|
334
|
+
<source><a href="http://iconfactory.com/software/twitterrific">twitterrific</a></source>
|
335
|
+
<truncated>false</truncated>
|
336
|
+
<in_reply_to_status_id />
|
337
|
+
<in_reply_to_user_id />
|
338
|
+
<favorited>false</favorited>
|
339
|
+
<user>
|
340
|
+
<id>17530527</id>
|
341
|
+
<name>TimRhodus</name>
|
342
|
+
<screen_name>TimRhodus</screen_name>
|
343
|
+
<description>Christ-follower, Husband of Kathi, Dad of Trevor &amp; Annie, Pastor of 400-500 amazing people</description>
|
344
|
+
<location>Carlinville, IL</location>
|
345
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/65406330/Tim_2_normal.jpg</profile_image_url>
|
346
|
+
<url>http://www.timrhodus.com</url>
|
347
|
+
<protected>false</protected>
|
348
|
+
<followers_count>70</followers_count>
|
349
|
+
</user>
|
350
|
+
</status><status>
|
351
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
352
|
+
<id>1122786072</id>
|
353
|
+
<text>Demo de Skate 2 na PSN européia!</text>
|
354
|
+
<source><a href="http://twitterfox.net/">TwitterFox</a></source>
|
355
|
+
<truncated>false</truncated>
|
356
|
+
<in_reply_to_status_id />
|
357
|
+
<in_reply_to_user_id />
|
358
|
+
<favorited>false</favorited>
|
359
|
+
<user>
|
360
|
+
<id>15067571</id>
|
361
|
+
<name>jcvasc</name>
|
362
|
+
<screen_name>jcvasc</screen_name>
|
363
|
+
<description>Um viciado em DVD e BD - DVDBDAddict</description>
|
364
|
+
<location>Porto Alegre - Brazil</location>
|
365
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/55257978/avatar_81190_f_normal.jpg</profile_image_url>
|
366
|
+
<url>http://jcvasc.wordpress.com</url>
|
367
|
+
<protected>false</protected>
|
368
|
+
<followers_count>84</followers_count>
|
369
|
+
</user>
|
370
|
+
</status><status>
|
371
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
372
|
+
<id>1122786064</id>
|
373
|
+
<text>@shortyawards I vote for @StockTwits in the Shorty Awards Finals for #finance because it's the best thing going on Twitter</text>
|
374
|
+
<source>web</source>
|
375
|
+
<truncated>false</truncated>
|
376
|
+
<in_reply_to_status_id>1122785132</in_reply_to_status_id>
|
377
|
+
<in_reply_to_user_id>17663756</in_reply_to_user_id>
|
378
|
+
<favorited>false</favorited>
|
379
|
+
<user>
|
380
|
+
<id>899941</id>
|
381
|
+
<name>Sam Huleatt</name>
|
382
|
+
<screen_name>squasher98</screen_name>
|
383
|
+
<description>I dream Workstreams and post two interesting links daily on the Twitter</description>
|
384
|
+
<location>New York, NY</location>
|
385
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/54138892/newyearsme_normal.jpg</profile_image_url>
|
386
|
+
<url>http://Leveragingideas.com</url>
|
387
|
+
<protected>false</protected>
|
388
|
+
<followers_count>506</followers_count>
|
389
|
+
</user>
|
390
|
+
</status><status>
|
391
|
+
<created_at>Fri Jan 16 03:13:39 +0000 2009</created_at>
|
392
|
+
<id>1122786062</id>
|
393
|
+
<text>Once again, I glance at The Super-Organism in a bookstore display and see the title as... erm... something else. It fools me every time.</text>
|
394
|
+
<source>web</source>
|
395
|
+
<truncated>false</truncated>
|
396
|
+
<in_reply_to_status_id />
|
397
|
+
<in_reply_to_user_id />
|
398
|
+
<favorited>false</favorited>
|
399
|
+
<user>
|
400
|
+
<id>17876737</id>
|
401
|
+
<name>Amanda</name>
|
402
|
+
<screen_name>irreverentmuse</screen_name>
|
403
|
+
<description></description>
|
404
|
+
<location>Boston, MA, USA</location>
|
405
|
+
<profile_image_url>http://s3.amazonaws.com/twitter_production/profile_images/66363500/amandaMA_normal.jpg</profile_image_url>
|
406
|
+
<url>http://www.irreverentmusings.com</url>
|
407
|
+
<protected>false</protected>
|
408
|
+
<followers_count>11</followers_count>
|
409
|
+
</user>
|
410
|
+
</status>
|
411
|
+
</statuses>
|