semantic_hacker 0.0.1

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.
@@ -0,0 +1,29 @@
1
+ module SemanticHacker
2
+ class Api
3
+ include HTTParty
4
+ format :json
5
+ base_uri "http://api.semantichacker.com/#{APIKEY}"
6
+ default_params :format => "json"
7
+
8
+ def self.about
9
+ OpenStruct.new(@data["about"].map { |x| [ x[0].dup.to_underscore, x[1] ] } )
10
+ end
11
+
12
+ def self.generate
13
+ data = @data.dup
14
+ content_path.each{|x| data = data[x]}
15
+
16
+ result = Hash[data.map do |l|
17
+ if l.has_key?("index")
18
+ label = SemanticHacker.labels[l["index"]]
19
+ elsif l.has_key?("id")
20
+ label = SemanticHacker.categories[l["id"]]
21
+ else
22
+ label = l["label"]
23
+ end
24
+ [ label, l["weight"]]
25
+ end.collect]
26
+ return {:about => about, content_path.last.to_sym => result}
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module SemanticHacker
2
+ class Category < Api
3
+ def self.content_path
4
+ %w(categorizer categorizerResponse categories)
5
+ end
6
+ def self.uri data
7
+ options = {:query => { :uri => data }}
8
+ @data = get('/category', options)
9
+ return generate
10
+ end
11
+
12
+ def self.content data
13
+ options = {:query => { :content => data }}
14
+ @data = get('/category', options)
15
+ return generate
16
+ end
17
+ end
18
+ end
19
+ #a = SemanticHacker::Category.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
@@ -0,0 +1,14 @@
1
+ module SemanticHacker
2
+ class Concept < Api
3
+ def self.content_path
4
+ %w(conceptExtractor conceptExtractorResponse concepts)
5
+ end
6
+ def self.uri data
7
+ options = {:query => { :uri => data }}
8
+ @data = get('/concept', options)
9
+ return generate
10
+ end
11
+ end
12
+ end
13
+
14
+ #a = SemanticHacker::Concept.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
@@ -0,0 +1,32 @@
1
+ module SemanticHacker
2
+ module Setup
3
+ include HTTParty
4
+ format :plain
5
+
6
+ @convert = proc {|data| Hash[data.split("\n").map{|label| label.split("\t")}.collect]}
7
+
8
+ def self.labels
9
+ if File.exist?(file = File.join(DATA, "labels.yaml"))
10
+ labels = YAML.load(File.read(file))
11
+ else
12
+ raw = get('http://textwise.com/api_docs/labels/odp_2009_l1_1.6k.txt')
13
+ File.open(file, "W") do |f|
14
+ f.puts YAML.dump(labels = @convert.call(raw))
15
+ end
16
+ end
17
+ return labels
18
+ end
19
+
20
+ def self.categories
21
+ if File.exist?(file = File.join(DATA, "categories.yaml"))
22
+ categories = YAML.load(File.read(file))
23
+ else
24
+ raw = get('http://textwise.com/api_docs/labels/odp_2009_l1_1.6k_categories.txt')
25
+ File.open(file, "W") do |f|
26
+ f.puts YAML.dump(categories = @convert.call(raw))
27
+ end
28
+ end
29
+ return categories
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,19 @@
1
+ module SemanticHacker
2
+ class Signature < Api
3
+ def self.content_path
4
+ %w(siggen siggenResponse signature)
5
+ end
6
+ def self.uri data
7
+ options = {:query => { :uri => data }}
8
+ @data = get('/signature', options)
9
+ return generate
10
+ end
11
+
12
+ def self.content data
13
+ options = {:query => { :content => data }}
14
+ @data = get('/signature', options)
15
+ return generate
16
+ end
17
+ end
18
+ end
19
+ #a = SemanticHacker::Signature.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
@@ -0,0 +1,99 @@
1
+ require 'ostruct'
2
+ require 'httparty'
3
+
4
+ class String
5
+ def to_underscore!
6
+ self.gsub!(/(.)([A-Z])/,'\1_\2').downcase!
7
+ end
8
+ def to_underscore
9
+ self.clone.to_underscore!
10
+ end
11
+ end
12
+
13
+
14
+ module SemanticHacker
15
+
16
+ unless File.exist?(api_file = File.join(ENV["HOME"], ".semantic_hacker"))
17
+ puts "Please put the api key into `/.semantic_hacker"
18
+ exit
19
+ end
20
+
21
+ # :stopdoc:
22
+ LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
23
+ PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
24
+ DATA = File.join(PATH, "data")
25
+ APIKEY = File.read(api_file).rstrip.lstrip
26
+
27
+ # :startdoc:
28
+
29
+ # Returns the version string for the library.
30
+ #
31
+ def self.version
32
+ @version ||= File.read(path('version.txt')).strip
33
+ end
34
+
35
+ def self.check
36
+ @categories = Setup.categories
37
+ @labels = Setup.labels
38
+ end
39
+
40
+ def self.labels
41
+ @labels
42
+ end
43
+
44
+ def self.categories
45
+ @categories
46
+ end
47
+
48
+ # Returns the library path for the module. If any arguments are given,
49
+ # they will be joined to the end of the libray path using
50
+ # <tt>File.join</tt>.
51
+ #
52
+ def self.libpath( *args, &block )
53
+ rv = args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
54
+ if block
55
+ begin
56
+ $LOAD_PATH.unshift LIBPATH
57
+ rv = block.call
58
+ ensure
59
+ $LOAD_PATH.shift
60
+ end
61
+ end
62
+ return rv
63
+ end
64
+
65
+ # Returns the lpath for the module. If any arguments are given,
66
+ # they will be joined to the end of the path using
67
+ # <tt>File.join</tt>.
68
+ #
69
+ def self.path( *args, &block )
70
+ rv = args.empty? ? PATH : ::File.join(PATH, args.flatten)
71
+ if block
72
+ begin
73
+ $LOAD_PATH.unshift PATH
74
+ rv = block.call
75
+ ensure
76
+ $LOAD_PATH.shift
77
+ end
78
+ end
79
+ return rv
80
+ end
81
+
82
+ # Utility method used to require all files ending in .rb that lie in the
83
+ # directory below this file that has the same name as the filename passed
84
+ # in. Optionally, a specific _directory_ name can be passed in such that
85
+ # the _filename_ does not have to be equivalent to the directory.
86
+ #
87
+ def self.require_all_libs_relative_to( fname, dir = nil )
88
+ dir ||= ::File.basename(fname, '.*')
89
+ search_me = ::File.expand_path(
90
+ ::File.join(::File.dirname(fname), dir, '**', '*.rb'))
91
+
92
+ Dir.glob(search_me).sort.each {|rb| require rb}
93
+ end
94
+
95
+ end # module SemanticHacker
96
+
97
+ SemanticHacker.require_all_libs_relative_to(__FILE__)
98
+ SemanticHacker.check()
99
+
@@ -0,0 +1,36 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{semantic_hacker}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Thomas Gallaway"]
9
+ s.date = %q{2010-05-27}
10
+ s.default_executable = %q{semantic_hacker}
11
+ s.description = %q{Semantic Signatures® are a new way of representing and analyzing semantic information (meaning) in text. Semantic Signatures, produced by TextWise’s Trainable Semantic Vectors (TSV) technology, provide a rich semantic representation of the multiple concepts and topics contained in a body of text. Semantic Signatures can be constructed for a wide range of texts including individual words, phrases, word lists (e.g. metadata), short passages (such as text advertisements or image labels), web pages, or full text documents (e.g. technical articles).}
12
+ s.email = %q{atomist@atomlab.us}
13
+ s.executables = ["semantic_hacker"]
14
+ s.extra_rdoc_files = ["History.txt", "README.txt", "bin/semantic_hacker", "version.txt"]
15
+ s.files = ["History.txt", "README.txt", "Rakefile", "bin/semantic_hacker", "data/categories.yaml", "data/labels.yaml", "lib/semantic_hacker.rb", "lib/semantic_hacker/api.rb", "lib/semantic_hacker/category.rb", "lib/semantic_hacker/concept.rb", "lib/semantic_hacker/setup.rb", "lib/semantic_hacker/signature.rb", "semantic_hacker.gemspec", "spec/semantic_hacker_spec.rb", "spec/spec_helper.rb", "test/fixtures/1760484413.html", "test/fixtures/category.json", "test/fixtures/concept.json", "test/fixtures/signature.json", "test/semantic_hacker_test.rb", "test/test_helper.rb", "version.txt"]
16
+ s.homepage = %q{http://www.atomlab.us/semantic_hacker}
17
+ s.rdoc_options = ["--main", "README.txt"]
18
+ s.require_paths = ["lib"]
19
+ s.rubyforge_project = %q{semantic_hacker}
20
+ s.rubygems_version = %q{1.3.6}
21
+ s.summary = %q{Semantic Signatures® are a new way of representing and analyzing semantic information (meaning) in text}
22
+ s.test_files = ["test/test_helper.rb"]
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
+ s.add_development_dependency(%q<bones>, [">= 3.4.1"])
30
+ else
31
+ s.add_dependency(%q<bones>, [">= 3.4.1"])
32
+ end
33
+ else
34
+ s.add_dependency(%q<bones>, [">= 3.4.1"])
35
+ end
36
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
3
+
4
+ describe SemanticHacker do
5
+ end
6
+
@@ -0,0 +1,15 @@
1
+
2
+ require File.expand_path(
3
+ File.join(File.dirname(__FILE__), %w[.. lib semantic_hacker]))
4
+
5
+ Spec::Runner.configure do |config|
6
+ # == Mock Framework
7
+ #
8
+ # RSpec uses it's own mocking framework by default. If you prefer to
9
+ # use mocha, flexmock or RR, uncomment the appropriate line:
10
+ #
11
+ # config.mock_with :mocha
12
+ # config.mock_with :flexmock
13
+ # config.mock_with :rr
14
+ end
15
+
@@ -0,0 +1,339 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2
+ <html>
3
+ <head>
4
+ <title>Charming apartment homes at Camden Fair Lakes</title>
5
+ <meta name="robots" content="NOARCHIVE,NOFOLLOW">
6
+ <link type="text/css" rel="stylesheet" media="all" href="http://www.craigslist.org/styles/craigslist.css?v=3">
7
+ </head>
8
+
9
+ <body class="posting">
10
+
11
+
12
+ <div class="bchead">
13
+ <a id="ef" href="/email.friend?postingID=1760484413">email this posting to a friend</a>
14
+ <a href="http://washingtondc.craigslist.org/">washington, DC craigslist</a> &gt;
15
+ <a href="http://washingtondc.craigslist.org/nva/">northern virginia</a> &gt;
16
+ <a href="http://washingtondc.craigslist.org/nva/hhh/">housing</a> &gt;
17
+ <a href="http://washingtondc.craigslist.org/nva/apa/">apts/housing for rent</a>
18
+ </div>
19
+
20
+
21
+
22
+ <div id="flags">
23
+ <div id="flagMsg">
24
+ please <a href="http://www.craigslist.org/about/help/flags_and_community_moderation">flag</a> with care:
25
+ </div>
26
+ <div id="flagChooser">
27
+ <br>
28
+ <a class="fl" id="flag16" href="/flag/?flagCode=16&amp;postingID=1760484413"
29
+ title="Wrong category, wrong site, discusses another post, or otherwise misplaced">
30
+ miscategorized</a>
31
+ <br>
32
+
33
+ <a class="fl" id="flag28" href="/flag/?flagCode=28&amp;postingID=1760484413"
34
+ title="Violates craigslist Terms Of Use or other posted guidelines">
35
+ prohibited</a>
36
+ <br>
37
+
38
+ <a class="fl" id="flag15" href="/flag/?flagCode=15&amp;postingID=1760484413"
39
+ title="Posted too frequently, in multiple cities/categories, or is too commercial">
40
+ spam/overpost</a>
41
+ <br>
42
+
43
+ <a class="fl" id="flag9" href="/flag/?flagCode=9&amp;postingID=1760484413"
44
+ title="Should be considered for inclusion in the Best-Of-Craigslist">
45
+ best of craigslist</a>
46
+ <br>
47
+ </div>
48
+ </div>
49
+
50
+ <div id="tsb">
51
+ <a href="http://www.craigslist.org/about/FHA.html">Stating a discriminatory preference in a housing post is illegal - please flag discriminatory posts as prohibited</a></div> <div id="tsb"> <em>Avoid scams and fraud by dealing locally!</em> Beware any arrangement involving Western Union, Moneygram, wire transfer, or a landlord/owner who is out of the country or cannot meet you in person. <a href="http://www.craigslist.org/about/scams.html">More info</a></div>
52
+ <h2>$1468 / 2br - Charming apartment homes at Camden Fair Lakes (Fairfax)</h2>
53
+ <hr>
54
+ Date: 2010-05-26, 12:00PM EDT<br>
55
+ Reply to: <a href="mailto:hous-sebhs-1760484413@craigslist.org?subject=%241468%20%2F%202br%20-%20Charming%20apartment%20homes%20at%20Camden%20Fair%20Lakes%20(Fairfax)&amp;body=%0A%0Ahttp%3A%2F%2Fwashingtondc.craigslist.org%2Fnva%2Fapa%2F1760484413.html%0A">hous-sebhs-1760484413@craigslist.org</a> <sup>[<a href="http://www.craigslist.org/about/help/replying_to_posts" target="_blank">Errors when replying to ads?</a>]</sup><br>
56
+ <hr>
57
+ <br>
58
+ <div id="userbody">
59
+ <img src="http://www.eliterenting.com/files/_images/blank_1x1.php5?z=34869">
60
+ <table width="800" border="0" cellspacing="0" cellpadding="0">
61
+ <tr>
62
+ <td><table width="800" border="0" cellspacing="0" cellpadding="0">
63
+ <tr>
64
+ <td><table width="800" border="0" cellpadding="0" cellspacing="0">
65
+ <tr>
66
+ <td><table width="800" border="0" cellspacing="0" cellpadding="0">
67
+ <tr>
68
+ <td width="300" align="center" valign="bottom"><table width="290" border="0" cellspacing="0" cellpadding="0">
69
+ <tr>
70
+ <td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&amp;id=49418&amp;w=350" style="width:290px;height:166px;display:block;" border="0"></td>
71
+ </tr>
72
+ <tr>
73
+ <td>&nbsp;</td>
74
+ </tr>
75
+ </table></td>
76
+ <td width="500" align="left" valign="top"><img src="http://www.eliterenting.com/files/cl/cammain500.gif" width="500" height="253"></td>
77
+ </tr>
78
+ </table></td>
79
+ </tr>
80
+ </table></td>
81
+ </tr>
82
+ <tr>
83
+ <td><table width="800" border="0" cellspacing="0" cellpadding="0">
84
+ <tr>
85
+ <td width="518" valign="top" background="http://www.eliterenting.com/files/cl/cammainbar.gif"><table width="518" border="0" cellspacing="0" cellpadding="20">
86
+ <tr>
87
+ <td><table width="478" border="0" cellspacing="0" cellpadding="3">
88
+ <tr>
89
+ <td colspan="4" valign="top"><div align="left"><font size="3"><b>Features</b></font>
90
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
91
+ </div></td>
92
+ </tr>
93
+ <tr>
94
+ <td colspan="2" valign="top"></td>
95
+ <td colspan="2" valign="top"></td>
96
+ </tr>
97
+ <tr>
98
+ <td width="104" valign="top"><div align="left"><b>Bedrooms:</b></div></td>
99
+ <td width="125" valign="top"><div align="left">2 bedrooms</div></td>
100
+ <td width="104" valign="top"><div align="left"><b>Bathrooms:</b></div></td>
101
+ <td width="130" valign="top"><div align="left">2 bathrooms</div></td>
102
+ </tr>
103
+ <tr>
104
+ <td width="104" valign="top"><div align="left"><b>Sq.Ft.:</b></div></td>
105
+ <td valign="top"><div align="left">1024 Sq.Ft.</div></td>
106
+ <td width="104" valign="top"><div align="left"><b>Price:</b></div></td>
107
+ <td width="130" valign="top"><div align="left">$1468</div></td>
108
+ </tr>
109
+ <tr>
110
+ <td colspan="2" valign="top"></td>
111
+ <td colspan="2" valign="top"></td>
112
+ </tr>
113
+ <tr>
114
+ <td colspan="2" valign="top"></td>
115
+ <td colspan="2" valign="top"></td>
116
+ </tr>
117
+ <tr>
118
+ <td colspan="4" valign="top">&nbsp;</td>
119
+ </tr>
120
+ <tr>
121
+ <td colspan="4" valign="top"><div align="left"><font size="3"><b>Apartment Home Features</b></font>
122
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
123
+ </div></td>
124
+ </tr>
125
+ <tr>
126
+ <td colspan="4" valign="top"><div align="left"><table width="100%"><tr valign="top"><td><ul><li>Pantry</li><li>Vaulted Ceilings</li><li>Microwave</li><li>Patio or Balcony</li><li>Cable or Satellite</li></ul></td><td><ul><li>Oversized Closet(s)
127
+ </li><li>Air Conditioning</li><li>View</li><li></li></ul></td><td><ul><li>Fireplace</li><li>Washer Dryer In Unit</li><li>Ceiling Fan(s)</li><li>Refrigerator</li></ul></td></tr></table></div></td>
128
+ </tr>
129
+ <tr>
130
+ <td colspan="4" valign="top"><div align="left"><strong><font size="3">Community Amenities</font></strong>
131
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
132
+ </div></td>
133
+ </tr>
134
+ <tr>
135
+ <td colspan="4" valign="top"><div align="left"><table width="100%"><tr valign="top"><td><ul><li>Extra Storage</li><li>Public Transportation</li><li>Covered Parking</li><li>Pool</li><li>Common Area Wi-Fi</li></ul></td><td><ul><li>Short Term Lease</li><li>Playground</li><li>Fitness Center</li><li>Garages</li></ul></td><td><ul><li>Emergency Maintenance</li><li>Freeway Access</li><li>Clubhouse</li><li>Business Center</li></ul></td></tr></table></div></td>
136
+ </tr>
137
+ <tr>
138
+ <td colspan="4" valign="top"><div align="left"><font size="3"><b>Description</b></font>
139
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
140
+ </div></td>
141
+ </tr>
142
+ <tr>
143
+ <td colspan="4" valign="top"> <div align="justify">Welcome to Camden Fair Lakes we&#039;re glad you&#039;re visiting our community! With well designed one, two, and three bedroom apartment homes, you can make the most of life at Camden Fair Lakes. Our professional management and great amenities such as full size washers and dryers, complete fitness center with flat screen TVs, and Metro shuttle mean you&#039;ll live better at Camden Fair Lakes. It all adds up to an incredible living experience. Call us today to schedule your personal tour!</div></td>
144
+ </tr>
145
+ <tr>
146
+ <td colspan="4" valign="top">&nbsp;</td>
147
+ </tr>
148
+ <tr>
149
+ <td colspan="4" valign="top"><div align="left"><font size="3"><b>Contact Camden Fair Lakes</b></font>
150
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
151
+ </div></td>
152
+ </tr>
153
+ <tr>
154
+ <td colspan="4" valign="top"><div align="left">
155
+ <table width="472" border="0" cellspacing="0" cellpadding="0">
156
+ <tr>
157
+ <td width="268" rowspan="4" valign="top"><table width="272" border="0" cellspacing="0" cellpadding="0">
158
+ <tr>
159
+ <td><div align="left"><b>Phone:</b></div></td>
160
+ <td><div align="left">(866) 932-3843</div></td>
161
+ </tr>
162
+ <tr>
163
+ <td></td>
164
+ <td></td>
165
+ </tr>
166
+ <tr>
167
+ <td width="100"><div align="left"><b>Address:</b></div></td>
168
+ <td><div align="left">12565 Summit Manor Dr</div></td>
169
+ </tr>
170
+ <tr>
171
+ <td width="100"></td>
172
+ <td><div align="left">Fairfax, VA 22033</div></td>
173
+ </tr>
174
+ </table></td>
175
+ <td width="75" valign="top"><div align="left"><b>Email:</b> </div></td>
176
+ <td width="125" valign="top"><div align="left"><a href="http://www.eliterenting.com/contact_property.php5?z=34869" rel="nofollow">Click Here</a></div></td>
177
+ </tr>
178
+ <tr>
179
+ <td colspan="2" valign="top"></td>
180
+ </tr>
181
+ <tr>
182
+ <td valign="top"><div align="left"><b>Website:</b> </div></td>
183
+ <td valign="top"><div align="left"><a href="http://apartments.camdenliving.com/camdenfairlakes/AptPropertyDetail.aspx" rel="nofollow">Click Here</a></div></td>
184
+ </tr>
185
+ <tr>
186
+ <td colspan="2" valign="top"><div><a href="https://twitter.com/CamdenFairLakes" target="_blank" rel="nofollow"><img src="http://eliterenting.s3.amazonaws.com/cl/icons/ticon.jpg" style="display:inline;" border="0"></a> <a href="http://www.eliterenting.com/contact_property.php5?z=34869" target="_blank" rel="nofollow"><img src="http://eliterenting.s3.amazonaws.com/cl/icons/eicon.jpg" style="display:inline;" border="0"></a> </div></td>
187
+ </tr>
188
+ <tr>
189
+ <td width="268" valign="top"></td>
190
+ <td width="200" colspan="2" valign="top"></td>
191
+ </tr>
192
+ <tr>
193
+ <td valign="top"></td>
194
+ <td colspan="2" valign="top"></td>
195
+ </tr>
196
+ <tr>
197
+ <td colspan="3" valign="top">&nbsp;</td>
198
+ </tr>
199
+ <tr>
200
+ <td colspan="3" valign="top"><div align="left"><font size="3"><b>Directions</b></font>
201
+ <hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
202
+ </div></td>
203
+ </tr>
204
+ <tr>
205
+ <td colspan="3" valign="top"><div align="justify">
206
+ <p>Take I-66 to exit 55B. Go through first traffic light and make a right onto Monument Dr. Take a left on Fields Brigade. Camden Fair Lakes is on the left.</p>
207
+ </div></td>
208
+ </tr>
209
+ </table>
210
+ </div></td>
211
+ </tr>
212
+ <tr>
213
+ <td colspan="4" valign="top">&nbsp;</td>
214
+ </tr>
215
+ <tr>
216
+ <td colspan="4" valign="top">&nbsp;</td>
217
+ </tr>
218
+ <tr>
219
+ <td colspan="4" valign="top">&nbsp;</td>
220
+ </tr>
221
+ </table></td>
222
+ </tr>
223
+
224
+ </table></td>
225
+ <td width="282" valign="top"><table width="282" border="0" cellpadding="0" cellspacing="0">
226
+ <tr>
227
+ <td align="left">&nbsp;</td>
228
+ </tr>
229
+ <tr>
230
+ <td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
231
+ <tr>
232
+ </tr>
233
+ </table></td>
234
+ </tr>
235
+ <tr>
236
+ <td>&nbsp;</td>
237
+ </tr>
238
+ <tr>
239
+ <td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
240
+ <tr>
241
+ <td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&amp;id=30124&amp;w=250&amp;h=188" width="250" height="188"></td>
242
+ </tr>
243
+ </table></td>
244
+ </tr>
245
+ <tr>
246
+ <td>&nbsp;</td>
247
+ </tr>
248
+ <tr>
249
+ <td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
250
+ <tr>
251
+ <td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&amp;id=30125&amp;w=250&amp;h=188" width="250" height="188"></td>
252
+ </tr>
253
+ </table></td>
254
+ </tr>
255
+ <tr>
256
+ <td>&nbsp;</td>
257
+ </tr>
258
+ <tr>
259
+ <td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
260
+ <tr>
261
+ <td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&amp;id=30126&amp;w=250&amp;h=188" width="250" height="188"></td>
262
+ </tr>
263
+ </table></td>
264
+ </tr>
265
+ <tr>
266
+ <td align="right"><img src="http://www.eliterenting.com/files/cl/cammainrightbtm.gif" width="282" height="105"></td>
267
+ </tr>
268
+ </table></td>
269
+ </tr>
270
+ </table></td>
271
+ </tr>
272
+ </table></td>
273
+ </tr>
274
+ <tr>
275
+ <td>&nbsp;</td>
276
+ </tr>
277
+ <tr>
278
+ <td>&nbsp;</td>
279
+ </tr>
280
+ <tr>
281
+ <td><img src="http://eliterenting.s3.amazonaws.com/cl/ER-Footer800.gif"></td>
282
+ </tr>
283
+ <tr>
284
+ <td><font size="1">115959-20100526-395767</font></td>
285
+ </tr>
286
+ </table>
287
+ <!-- START CLTAGS -->
288
+
289
+
290
+ <br><br>
291
+ <!-- CLTAG xstreet0=12565 Summit Manor Dr -->
292
+ <!-- CLTAG xstreet1= -->
293
+ <!-- CLTAG city=Fairfax -->
294
+ <!-- CLTAG region=VA -->
295
+ 12565 Summit Manor Dr
296
+ <small>
297
+ (<a target="_blank" href="http://maps.google.com/?q=loc%3A+%31%32%35%36%35+Summit+Manor+Dr+Fairfax+VA+US">google map</a>)
298
+ (<a target="_blank" href="http://maps.yahoo.com/maps_result?addr=%31%32%35%36%35+Summit+Manor+Dr&amp;csz=Fairfax+VA&amp;country=US">yahoo map</a>)
299
+ </small>
300
+ <ul class="blurbs">
301
+ <li><!-- CLTAG catsAreOK=on -->cats are OK - purrr
302
+ <li><!-- CLTAG dogsAreOK=on -->dogs are OK - wooof
303
+ <li> <!-- CLTAG GeographicArea=Fairfax -->Location: Fairfax
304
+ <li>it's NOT ok to contact this poster with services or other commercial interests</ul>
305
+ <!-- END CLTAGS -->
306
+ <table summary="craigslist hosted images">
307
+ <tr>
308
+ <td align="center"></td>
309
+ <td align="center"></td>
310
+ </tr>
311
+ <tr>
312
+ <td align="center"></td>
313
+ <td align="center"></td>
314
+ </tr>
315
+ </table>
316
+
317
+ </div>
318
+ PostingID: 1760484413<br>
319
+
320
+
321
+ <br>
322
+
323
+ <hr>
324
+ <ul class="clfooter">
325
+ <li>Copyright &copy; 2010 craigslist, inc.</li>
326
+ <li><a href="http://www.craigslist.org/about/terms.of.use.html">terms of use</a></li>
327
+ <li><a href="http://www.craigslist.org/about/privacy_policy">privacy policy</a></li>
328
+ <li><a href="/forums/?forumID=8">feedback forum</a></li>
329
+ </ul>
330
+
331
+ <script type="text/javascript" src="http://www.craigslist.org/js/jquery-1.4.2.js"></script>
332
+ <script type="text/javascript" src="http://www.craigslist.org/js/postings.js"></script>
333
+ <script type="text/javascript"><!--
334
+ pID = 1760484413;
335
+ -->
336
+ </script>
337
+ </body>
338
+ </html>
339
+
@@ -0,0 +1,17 @@
1
+ {
2
+ "about": {
3
+ "requestId": "65A7E9AEDC63E1CE0406C1B8D1A3E7AB",
4
+ "docId": "2627917C26F7F284C8364209B0B21354",
5
+ "systemType": "category",
6
+ "configId": "odp_2007_l1_1.7k",
7
+ "contentType": "text/html",
8
+ "contentDigest": "C7DBE9045BF3F905EA8E7273EC1A4540",
9
+ "requestDate": "2010-05-27T19:19:04+00:00",
10
+ "systemVersion": "2.0",
11
+ "sourceUri": "http://washingtondc.craigslist.org/nva/apa/1760484413.html"
12
+ },
13
+ "categorizer": {"categorizerResponse": {"categories": [ {
14
+ "id": "1242",
15
+ "weight": "1.011652"
16
+ }]}}
17
+ }