geo-spider 0.2.1 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
- == 0.1.0 2008-09-06
1
+ == 0.0.1 2008-11-24
2
2
 
3
- * Initial release
3
+ * 1 major enhancement:
4
+ * Initial release
@@ -1,12 +1,10 @@
1
1
  History.txt
2
2
  License.txt
3
3
  Manifest.txt
4
- PostInstall.txt
5
- README.txt
4
+ README.rdoc
6
5
  Rakefile
7
- config/hoe.rb
8
- config/requirements.rb
9
6
  lib/geo-spider.rb
7
+ lib/geo-spider/exceptions.rb
10
8
  lib/geo-spider/extractors/base.rb
11
9
  lib/geo-spider/extractors/master.rb
12
10
  lib/geo-spider/extractors/microformat.rb
@@ -14,13 +12,14 @@ lib/geo-spider/extractors/postcode.rb
14
12
  lib/geo-spider/location.rb
15
13
  lib/geo-spider/page.rb
16
14
  lib/geo-spider/site.rb
17
- lib/geo-spider/version.rb
18
15
  script/console
19
16
  script/destroy
20
17
  script/generate
21
- setup.rb
18
+ spec/assets/pages/empty_body.html
22
19
  spec/assets/pages/multiple_postcodes_and_microformats.html
23
20
  spec/assets/pages/page_with_links.html
21
+ spec/assets/pages/page_with_widget_links.html
22
+ spec/assets/pages/postcode_in_url.html
24
23
  spec/assets/pages/separate_microformat_and_postcode.html
25
24
  spec/assets/pages/single_microformat.html
26
25
  spec/assets/pages/single_postcode.html
@@ -28,7 +27,4 @@ spec/geo-spider/page_spec.rb
28
27
  spec/geo-spider/site_spec.rb
29
28
  spec/spec.opts
30
29
  spec/spec_helper.rb
31
- tasks/deployment.rake
32
- tasks/environment.rake
33
30
  tasks/rspec.rake
34
- tasks/website.rake
@@ -13,7 +13,7 @@ The typical use case is spidering an entire blog for posts which contain geodata
13
13
 
14
14
  Different methods for extracting geodata can be used. It currently supports UK postcodes and the abbr design pattern geo microformat <http://microformats.org/wiki/geo>.
15
15
 
16
- It is current in use behind the scenes of the Geoblogomatic <http://www.geoblogomatic.com>
16
+ It is current in use behind the scenes of the Geoblogomatic <http://www.geoblogomatic.com>.
17
17
 
18
18
  == FEATURES/PROBLEMS:
19
19
 
data/Rakefile CHANGED
@@ -1,4 +1,28 @@
1
- require 'config/requirements'
2
- require 'config/hoe' # setup Hoe + all gem configuration
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/geo-spider'
3
3
 
4
- Dir['tasks/**/*.rake'].each { |rake| load rake }
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('geo-spider', GeoSpider::VERSION) do |p|
7
+ p.developer('Tom Taylor', 'tom@tomtaylor.co.uk')
8
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
+ p.rubyforge_name = 'geospider'
10
+ p.extra_deps = [
11
+ ['hpricot','>= 0.6.164'],
12
+ ['graticule', '>= 0.2.8']
13
+ ]
14
+ p.extra_dev_deps = [
15
+ ['newgem', ">= #{::Newgem::VERSION}"]
16
+ ]
17
+
18
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
19
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
20
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
21
+ p.rsync_args = '-av --delete --ignore-errors'
22
+ end
23
+
24
+ require 'newgem/tasks' # load /tasks/*.rake
25
+ Dir['tasks/**/*.rake'].each { |t| load t }
26
+
27
+ # TODO - want other tests/tasks run by default? Add them to the list
28
+ # task :default => [:spec, :features]
@@ -1,23 +1,26 @@
1
1
  $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
+
4
5
  require 'rubygems'
5
6
  require 'hpricot'
6
7
  require 'open-uri'
7
8
 
9
+ require 'geo-spider/exceptions'
8
10
  require 'geo-spider/page'
9
11
  require 'geo-spider/site'
10
12
 
11
13
  module GeoSpider
12
-
14
+
15
+ VERSION = '0.2.3'
13
16
  DEFAULT_USER_AGENT = 'geo-spider (http://github.com/tomtaylor/geo-spider)'
14
-
17
+
15
18
  def self.user_agent
16
19
  @user_agent || DEFAULT_USER_AGENT
17
20
  end
18
-
21
+
19
22
  def self.user_agent=(user_agent)
20
23
  @user_agent = user_agent
21
24
  end
22
-
25
+
23
26
  end
@@ -0,0 +1 @@
1
+ class InvalidElement < Exception; end
@@ -5,6 +5,7 @@ module GeoSpider
5
5
  class Base
6
6
 
7
7
  def initialize(element)
8
+ raise InvalidElement if element.class != Hpricot::Elem || element.nil?
8
9
  @element = element
9
10
  end
10
11
 
@@ -9,6 +9,7 @@ module GeoSpider
9
9
 
10
10
  DEFAULT_CONTENT_CSS_SELECTOR = "body" # Find locations within the entire body by default
11
11
  DEFAULT_TITLE_CSS_SELECTOR = "title" # Use the title in the head by deault
12
+ DO_NOT_SPIDER_REGEXP = /(mp3|m4a|mov|jpg|png|gif|zip|pdf)$/i # do not spider these extensions by default
12
13
 
13
14
  # Create a new page based on the URL.
14
15
 
@@ -17,6 +18,7 @@ module GeoSpider
17
18
  @site = options[:site]
18
19
  @content_css_selector = options[:content_css_selector] || DEFAULT_CONTENT_CSS_SELECTOR
19
20
  @title_css_selector = options[:title_css_selector] || DEFAULT_TITLE_CSS_SELECTOR
21
+ @do_not_spider_regexp = options[:do_not_spider_regexp] || DO_NOT_SPIDER_REGEXP
20
22
  hpricot_doc
21
23
  end
22
24
 
@@ -63,7 +65,7 @@ module GeoSpider
63
65
  end
64
66
 
65
67
  def rejected_url?(url_to_test)
66
- url_to_test =~ /(mp3|m4a|mov|jpg|png|gif|zip|pdf)$/i
68
+ url_to_test =~ @do_not_spider_regexp
67
69
  end
68
70
 
69
71
  def normalize_url(link_url)
@@ -12,7 +12,6 @@ module GeoSpider
12
12
 
13
13
  def each_page(options = {}, &block)
14
14
  regexp = options.delete(:regexp) || DEFAULT_REGEXP
15
-
16
15
  options = options.merge( { :site => self } )
17
16
 
18
17
  queue = [self.url.to_s]
@@ -28,7 +27,7 @@ module GeoSpider
28
27
  seen << url
29
28
  next_links = (page.internal_links - seen - queue) # only add internal links that we've not seen or already have queued.
30
29
  queue.concat(next_links)
31
- rescue Timeout::Error, OpenURI::HTTPError
30
+ rescue Timeout::Error, OpenURI::HTTPError, InvalidElement
32
31
  next
33
32
  end
34
33
  end
@@ -0,0 +1,527 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <meta name="generator" content="http://www.typepad.com/" />
7
+
8
+
9
+
10
+
11
+
12
+ <link rel="stylesheet" href="http://www.stalbansblog.co.uk/styles.css" type="text/css" media="screen" />
13
+ <link rel="stylesheet" href="/.shared-typepad/themes/common/print.css" type="text/css" media="print" />
14
+ <link rel="alternate" type="application/atom+xml" title="Posts on 'St. Albans Blog' (Atom)" href="http://www.stalbansblog.co.uk/atom.xml" />
15
+ <link rel="alternate" type="application/rss+xml" title="Posts on 'St. Albans Blog' (RSS 1.0)" href="http://www.stalbansblog.co.uk/index.rdf" />
16
+ <link rel="alternate" type="application/rss+xml" title="Posts on 'St. Albans Blog' (RSS 2.0)" href="http://www.stalbansblog.co.uk/rss.xml" />
17
+
18
+
19
+
20
+
21
+ <title>St. Albans Blog: Italian Market</title>
22
+ <link rel="start" href="http://www.stalbansblog.co.uk/" title="Home" />
23
+ <link rel="prev" href="http://www.stalbansblog.co.uk/2008/07/little-wonders.html?no_prefetch=1" title="Little Wonders - independent Toy Shop" />
24
+ <link rel="next" href="http://www.stalbansblog.co.uk/2008/07/aylett-nursery.html?no_prefetch=1" title="Aylett Nursery St. Albans" />
25
+
26
+
27
+ </head>
28
+
29
+ <body class="layout-three-column">
30
+
31
+ <div id="container">
32
+ <div id="container-inner" class="pkg">
33
+
34
+ <!-- banner -->
35
+ <div id="banner">
36
+ <div id="banner-inner" class="pkg">
37
+
38
+ <h1 id="banner-header"><a href="http://www.stalbansblog.co.uk/" accesskey="1">St. Albans Blog</a></h1>
39
+ <h2 id="banner-description">St. Albans blog contains information and independent reviews about living, shopping, eating and drinking in St. Albans. It's authored primarily by a man in his 30's who occasionally begs for posts from other local bloggers. No cash or other rewards have ever been received in an exchange for a review.</h2>
40
+ </div>
41
+ </div>
42
+
43
+
44
+
45
+ <div id="pagebody">
46
+ <div id="pagebody-inner" class="pkg">
47
+ <div id="alpha">
48
+ <div id="alpha-inner" class="pkg">
49
+
50
+ <!-- sidebar1 -->
51
+
52
+
53
+ <div class="module-typelist module">
54
+ <h2 class="module-header">Map of Free Wifi in St. Albans</h2>
55
+ <div class="typelist-plain module-content">
56
+ <ul class="module-list">
57
+ <li class="module-list-item"><div class="typelist-note"><center><iframe width="130" height="150" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps/ms?ie=UTF8&amp;hl=en&amp;s=AARTsJrbAs_r5IX1HX9M6iqPXQhAxB9e5A&amp;msa=0&amp;msid=103236823974929135255.0004372dd3f9a1d1e65bf&amp;ll=51.750733,-0.342636&amp;spn=0.00797,0.011158&amp;z=14&amp;output=embed"></iframe><br /><small><a href="http://maps.google.co.uk/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=103236823974929135255.0004372dd3f9a1d1e65bf&amp;ll=51.750733,-0.342636&amp;spn=0.00797,0.011158&amp;z=14&amp;source=embed" style="color:#0000FF;text-align:left">View Larger Map</a></small></center></div></li>
58
+
59
+ </ul>
60
+ </div>
61
+ </div>
62
+
63
+ <div class="module-typelist module">
64
+ <h2 class="module-header">Photos of St. Albans</h2>
65
+ <div class="typelist-plain module-content">
66
+ <ul class="module-list">
67
+ <li class="module-list-item"><div class="typelist-note"><!-- Start of Flickr Badge -->
68
+ <center><style type="text/css">
69
+ #flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;}
70
+ #flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;}
71
+ #flickr_icon_td {padding:0 5px 0 0 !important;}
72
+ .flickr_badge_image {text-align:center !important;}
73
+ .flickr_badge_image img {border: 1px solid black !important;}
74
+ #flickr_badge_uber_wrapper {width:150px;}
75
+ #flickr_www {display:block; text-align:center; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;}
76
+ #flickr_badge_uber_wrapper a:hover,
77
+ #flickr_badge_uber_wrapper a:link,
78
+ #flickr_badge_uber_wrapper a:active,
79
+ #flickr_badge_uber_wrapper a:visited {text-decoration:none !important; background:inherit !important;color:#3993ff;}
80
+ #flickr_badge_wrapper {background-color:#ffffff;border: solid 1px #000000}
81
+ #flickr_badge_source {padding:0 !important; font: 11px Arial, Helvetica, Sans serif !important; color:#666666 !important;}
82
+ </style>
83
+ <table id="flickr_badge_uber_wrapper" border="0" cellpadding="0" cellspacing="10"><tr><td><a id="flickr_www" href="http://www.flickr.com">www.<strong style="color:#3993ff">flick<span style="color:#ff1c92">r</span></strong>.com</a><table border="0" id="flickr_badge_wrapper" cellpadding="0" cellspacing="10">
84
+ <script src="http://www.flickr.com/badge_code_v2.gne?show_name=1&count=3&display=latest&size=t&layout=v&source=all_tag&tag=St.+Albans&user=40571485%40N00" type="text/javascript"></script>
85
+ <tr>
86
+ <td id="flickr_badge_source" valign="center" align="center">
87
+ <table border="0" cellpadding="0" cellspacing="0"><tr>
88
+ <td id="flickr_badge_source_txt">More <a href="http://www.flickr.com/photos/tags/St. Albans/">Flickr photos tagged with St. Albans</a></td>
89
+ </tr></table>
90
+ </td>
91
+ </tr>
92
+ </table>
93
+ </td></tr></table></center>
94
+ <!-- End of Flickr Badge --></div></li>
95
+
96
+ </ul>
97
+ </div>
98
+ </div>
99
+
100
+ <div class="module-typelist module">
101
+ <h2 class="module-header">Local Bloggers</h2>
102
+ <div class="module-content">
103
+ <ul class="module-list">
104
+ <li class="module-list-item"><a href="http://wwasightings.blogspot.com/">Watercress Wildlife Sightings</a></li>
105
+ <li class="module-list-item"><a href="http://tall-rich.livejournal.com/">Volumes from Verulamium</a></li>
106
+ <li class="module-list-item"><a href="http://uhwatch.com/">UH Watch (unofficial herts uni)</a></li>
107
+ <li class="module-list-item"><a href="http://www.trunkguy.com">TrunkGuy.com</a></li>
108
+ <li class="module-list-item"><a href="http://lifeandtimesofmrsb.blogspot.com/">the life and times of Mrs.B</a></li>
109
+ <li class="module-list-item"><a href="http://www.snoo.net">The Daily Snoo</a></li>
110
+ <li class="module-list-item"><a href="http://www.thebroadsheetrag.co.uk/">The Broadsheet Rag</a></li>
111
+ <li class="module-list-item"><a href="http://tescocampaign.blogspot.com">Stop Tesco (St. Albans)</a></li>
112
+ <li class="module-list-item"><a href="http://www.qype.co.uk/people/StephaniexXx/">StephaniexXx on Qype</a></li>
113
+ <li class="module-list-item"><a href="http://stalbanscyclecampaign.blogspot.com/">St. Albans Cycle Campaign</a></li>
114
+ <li class="module-list-item"><a href="http://www.shedworking.co.uk">Shedworking</a></li>
115
+ <li class="module-list-item"><a href="http://radioverulam.blogspot.com/">Radio Verulam Blog</a></li>
116
+ <li class="module-list-item"><a href="http://www.pompomemporium.com">Pom Pom Emporium</a></li>
117
+ <li class="module-list-item"><a href="http://planetmike.blogspot.com/">PlanetMike</a></li>
118
+ <li class="module-list-item"><a href="http://nontrivialsolutions.blogspot.com/">Non-trivial Solutions</a></li>
119
+ <li class="module-list-item"><a href="http://maban.co.uk/index.php/blog/">maban (designer)</a></li>
120
+ <li class="module-list-item"><a href="http://lifeinthenhs.blogspot.com/">Life in the NHS</a></li>
121
+ <li class="module-list-item"><a href="http://kateallan.blogspot.com/">Kate Allan</a></li>
122
+ <li class="module-list-item"><a href="http://www.journeytorussia.co.uk/">Journey To Russia</a></li>
123
+ <li class="module-list-item"><a href="http://jonmell.co.uk">Jon Mell's Web 2.0 ideas & strategy</a></li>
124
+ <li class="module-list-item"><a href="http://www.hertsad.co.uk/flatfiles/weblogs/default.aspx">Herts Ad blogs</a></li>
125
+ <li class="module-list-item"><a href="http://digitalevangelist.blogspot.com/">Digital Evangelist</a></li>
126
+ <li class="module-list-item"><a href="http://www.neiloxtoby.com/blog/">Detritus</a></li>
127
+ <li class="module-list-item"><a href="http://www.cybersoc.com">cybersoc.com</a></li>
128
+ <li class="module-list-item"><a href="http://www.cuddlybear.org/">Cuddly Bear</a></li>
129
+ <li class="module-list-item"><a href="http://www.carlknibbs.net">Carl's Product Management Blog</a></li>
130
+ <li class="module-list-item"><a href="http://biztwozero.com/btz/">Business Two Zero</a></li>
131
+ <li class="module-list-item"><a href="http://beingamummy.blogspot.com/">Being a Mummy</a></li>
132
+ <li class="module-list-item"><a href="http://alwaysthecritic.typepad.com/">Always The Critic</a></li>
133
+ <li class="module-list-item"><a href="http://ornsfan.blogspot.com/">8th Worst Type of Fan</a></li>
134
+
135
+ </ul>
136
+ </div>
137
+ </div>
138
+
139
+ <div class="module-widget module" id="widget-Yahoo__Pipes_yahoo_pipes">
140
+ <div class="module-content">
141
+ <script src="http://pipes.yahoo.com/js/listbadge.js">{"pipe_id":"HPLV4t_e3BGEKJqjX0sBXw","_btype":"list","width":"196","height":"200"}</script>
142
+ </div>
143
+ </div>
144
+
145
+
146
+
147
+
148
+ </div>
149
+ </div>
150
+ <div id="beta">
151
+ <div id="beta-inner" class="pkg">
152
+ <!-- content nav -->
153
+ <p class="content-nav">
154
+ <a href="http://www.stalbansblog.co.uk/2008/07/little-wonders.html">&laquo; Little Wonders - independent Toy Shop</a> |
155
+ <a href="http://www.stalbansblog.co.uk/">Main</a>
156
+ | <a href="http://www.stalbansblog.co.uk/2008/07/aylett-nursery.html">Aylett Nursery St. Albans &raquo;</a>
157
+ </p>
158
+
159
+ <!-- entry -->
160
+
161
+
162
+ <div class="entry" id="entry-52909448">
163
+ <h3 class="entry-header">Italian Market</h3>
164
+
165
+ <div class="entry-content">
166
+ <div class="entry-body">
167
+ <p><a href="http://cybersoc.blogs.com/photos/uncategorized/2008/07/19/italian_market.jpg"><img class="image-full" src="http://cybersoc.blogs.com/photos/uncategorized/2008/07/19/italian_market.jpg" border="0" alt="" /></a></p>
168
+
169
+ <p><br />
170
+ <br style="clear: left;" /></p>
171
+ </div>
172
+
173
+ <script src="http://feeds.feedburner.com/~s/StAlbansBlog?i=http%3A%2F%2Fwww.stalbansblog.co.uk%2F2008%2F07%2Fitalian-marke-1.html" type="text/javascript"></script>
174
+
175
+ </div>
176
+ <div class="entry-footer">
177
+ <p class="entry-footer-info">
178
+ <span class="post-footers">07/19/2008 </span> <span class="separator">|</span> <a class="permalink" href="http://www.stalbansblog.co.uk/2008/07/italian-marke-1.html">Permalink</a>
179
+ </p>
180
+
181
+ <!-- technorati tags -->
182
+
183
+
184
+
185
+ <!-- post footer links -->
186
+
187
+
188
+ </div>
189
+ </div>
190
+
191
+
192
+
193
+ <a id="comments"></a>
194
+ <div class="comments" id="all-comments">
195
+ <h3 class="comments-header">Comments</h3>
196
+
197
+ <div class="comments-content" id="comments-content">
198
+
199
+ <!-- comment list -->
200
+
201
+
202
+ </div>
203
+
204
+ </div>
205
+
206
+ <!-- comment form -->
207
+ <script type="text/javascript" src="/.shared-typepad/js/comments.js"></script>
208
+ <script type="text/javascript">hostName = '.co.uk';</script>
209
+
210
+ <form id="comment-form"
211
+ method="post" action="http://www.typepad.com/t/comments">
212
+ <input type="hidden" name="entry_id" value="52909448" />
213
+ <input type="hidden" name="user_id" value="333875" />
214
+
215
+ <div class="comments-open">
216
+ <h2 class="comments-open-header">Post a comment</h2>
217
+ <div class="comments-open-content">
218
+
219
+
220
+ <script type="text/javascript" src="http://www.typepad.com/t/comments?__mode=check_login"></script>
221
+ <script type="text/javascript">
222
+ checkLocal();
223
+ </script>
224
+
225
+ <p id="comments-open-login" style="display: block;">
226
+ If you have a TypeKey or TypePad account, please
227
+ <a href="http://www.typepad.com/t/comments?__mode=signin_redir&amp;user_id=333875&amp;entry_id=52909448">Sign In</a>
228
+
229
+ </p>
230
+
231
+ <p id="comments-open-logout" style="display: none;">
232
+ You are currently signed in as
233
+ <span id="commenter-name">(nobody)</span>.
234
+ <a href="http://www.typepad.com/t/comments?__mode=signout&amp;user_id=333875&amp;entry_id=52909448">Sign Out</a>
235
+ </p>
236
+
237
+
238
+ <div id="comments-open-data">
239
+ <p>
240
+ <label for="comment-author">Name:</label>
241
+ <input id="comment-author" name="author" size="30" />
242
+ </p>
243
+ <p>
244
+ <label for="comment-email">Email Address: <span class="comment-form-note">(Not displayed with comment.)</span></label>
245
+ <input id="comment-email" name="email" size="30" />
246
+ </p>
247
+ <p>
248
+ <label for="comment-url">URL:</label>
249
+ <input id="comment-url" name="url" size="30" />
250
+ </p>
251
+ <p>
252
+ <label for="comment-bake-cookie"><input type="checkbox"
253
+ id="comment-bake-cookie" name="bakecookie" value="1" />
254
+ Remember personal info?</label>
255
+ </p>
256
+ </div>
257
+
258
+
259
+ <p id="comments-open-text">
260
+
261
+
262
+ <label for="comment-text">Comments:</label>
263
+ <textarea id="comment-text" name="text" rows="10" cols="30" onkeyup="maxTextarea(this, 64000)"></textarea>
264
+ </p>
265
+ </div>
266
+
267
+ <div id="comments-open-footer" class="comments-open-footer">
268
+
269
+
270
+ <input type="submit" name="preview" id="comment-preview" value="&nbsp;Preview&nbsp;" />
271
+ <input type="submit" name="post" id="comment-post" value="&nbsp;Post&nbsp;" onclick="disableButton(this)" />
272
+ </div>
273
+ </div>
274
+ </form>
275
+
276
+ <script type="text/javascript">
277
+ commentSignIn();
278
+ </script>
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+ </div>
289
+ </div>
290
+ <div id="gamma">
291
+ <div id="gamma-inner" class="pkg">
292
+
293
+ <!-- sidebar2 -->
294
+
295
+
296
+ <div class="module-typelist module">
297
+ <h2 class="module-header">Search St. Albans Blog</h2>
298
+ <div class="typelist-plain module-content">
299
+ <ul class="module-list">
300
+ <li class="module-list-item"><div class="typelist-note"><style type="text/css">
301
+ @import url(http://www.google.com/cse/api/branding.css);
302
+ </style>
303
+ <div class="cse-branding-right" style="background-color:#FFFFFF;color:#000000">
304
+ <div class="cse-branding-form">
305
+ <form action="http://www.google.co.uk/cse" id="cse-search-box">
306
+ <div>
307
+ <input type="hidden" name="cx" value="partner-pub-3598802846550102:23hyca7xpm7" />
308
+ <input type="hidden" name="ie" value="ISO-8859-1" />
309
+ <input type="text" name="q" size="30" />
310
+ <input type="submit" name="sa" value="Search" />
311
+ </div>
312
+ </form>
313
+ </div>
314
+ <div class="cse-branding-logo">
315
+ <img src="http://www.google.com/images/poweredby_transparent/poweredby_FFFFFF.gif" alt="Google" />
316
+ </div>
317
+ <div class="cse-branding-text">
318
+ Custom Search
319
+ </div>
320
+ </div>
321
+ </div></li>
322
+
323
+ </ul>
324
+ </div>
325
+ </div>
326
+
327
+ <div class="module-typelist module">
328
+ <h2 class="module-header">St. Albans Blog Ads</h2>
329
+ <div class="typelist-plain module-content">
330
+ <ul class="module-list">
331
+ <li class="module-list-item"><div class="typelist-note"><script type="text/javascript"><!--
332
+ google_ad_client = "pub-3598802846550102";
333
+ /* 120x240, created 10/15/08 */
334
+ google_ad_slot = "1103414690";
335
+ google_ad_width = 120;
336
+ google_ad_height = 240;
337
+ //-->
338
+ </script>
339
+ <script type="text/javascript"
340
+ src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
341
+ </script></div></li>
342
+
343
+ </ul>
344
+ </div>
345
+ </div>
346
+
347
+ <div class="module-widget module" id="widget-FeedBurner_standardSmall">
348
+ <div class="module-content">
349
+ <p><a href="http://feeds.feedburner.com/StAlbansBlog" rel="alternate" type="application/rss+xml"><img src="http://www.feedburner.com/fb/images/pub/feed-icon16x16.png" alt="" style="vertical-align:middle;border:0"/></a>&nbsp;<a href="http://feeds.feedburner.com/StAlbansBlog" rel="alternate" type="application/rss+xml">Subscribe via RSS</a></p>
350
+ </div>
351
+ </div><div class="module-widget module" id="widget-AddThis_Button_add_this_bookmark_button">
352
+ <div class="module-content">
353
+ <a href="http://www.addthis.com/bookmark.php" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&pub=JHK9N571DB5MNRCZ&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" title="Bookmark using any bookmark manager!" target="_blank"><img src="http://s3.addthis.com/button1-bm.gif" width="125" height="16" border="0" alt="AddThis Social Bookmark Button" /></a>
354
+ </div>
355
+ </div><div class="module-typelist module">
356
+ <h2 class="module-header">Send a Voice Message</h2>
357
+ <div class="typelist-plain module-content">
358
+ <ul class="module-list">
359
+ <li class="module-list-item"><div class="typelist-note"><center><a href="http://odeo.com/sendmeamessage/Cybersoc" target="_blank"><img alt="Send Me A Voice Message" border="0" height="50" src="http://odeo.com/img/badge-send-me-med-green.gif" width="80" /></a></center></div></li>
360
+
361
+ </ul>
362
+ </div>
363
+ </div>
364
+
365
+ <div class="module-categories module">
366
+ <h2 class="module-header"><a href="http://www.stalbansblog.co.uk/archives.html">Categories</a></h2>
367
+ <div class="module-content">
368
+ <ul class="module-list">
369
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/food_in_st_albans/">Food in St. Albans</a></li>
370
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/free_wifi_in_st_albans/">Free Wifi in St. Albans</a></li>
371
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/hotels_in_st_albans/">Hotels in St. Albans</a></li>
372
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/nightlife_in_st_albans/">Nightlife in St. Albans</a></li>
373
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/property_in_st_albans/">Property in St. Albans</a></li>
374
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/pubs_in_st_albans/">Pubs in St. Albans</a></li>
375
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/recreation_in_st_albans/">Recreation in St. Albans</a></li>
376
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/restaurants_in_st_albans/">Restaurants in St. Albans</a></li>
377
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/services_in_st_albans/">Services in St. Albans</a></li>
378
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/shopping_in_st_albans/">Shopping in St. Albans</a></li>
379
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/specialist_food_and_wine_in_st_albans/">Specialist Food and Wine in St. Albans</a></li>
380
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/st_albans_estate_agents/">St. Albans Estate Agents</a></li>
381
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/st_albans/">St. Albans Information</a></li>
382
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/st_albans_shops_for_children/">St. Albans Shops for Children</a></li>
383
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/things_to_do_close_to_st_albans/">Things to do Close to St. Albans</a></li>
384
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/things_to_do_with_kids_in_st_albans/">Things to do with Kids in St. Albans</a></li>
385
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/tourism_in_st_albans/">Tourism in St. Albans</a></li>
386
+
387
+ </ul>
388
+ </div>
389
+ </div>
390
+ <div class="module-recent-comments module">
391
+ <h2 class="module-header">Recent Comments</h2>
392
+ <div class="module-content">
393
+ <ul class="module-list">
394
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-135144145">Sam</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
395
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-135031153">tbrrob</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
396
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-134994173">Robin</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
397
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-134990213">Richard</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
398
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html#comment-134987561">Neil</a> on <a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html">St. Albans' Newest Restaurant - Kashu</a></li>
399
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-134913585">Todd</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
400
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html#comment-134876863">alex</a> on <a href="http://www.stalbansblog.co.uk/2008/10/st-albans-blogg.html">St. Albans Blogger Meet-Up</a></li>
401
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html#comment-134798889">Robin</a> on <a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html">St. Albans' Newest Restaurant - Kashu</a></li>
402
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html#comment-134790587">Graham Anderson</a> on <a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html">St. Albans' Newest Restaurant - Kashu</a></li>
403
+ <li class="module-list-item"><a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html#comment-134389575">Jane</a> on <a href="http://www.stalbansblog.co.uk/2008/08/new-restaurant.html">St. Albans' Newest Restaurant - Kashu</a></li>
404
+
405
+ </ul>
406
+ </div>
407
+ </div><div class="module-feed module">
408
+ <h2 class="module-header">BBC Beds, Herts and Bucks</h2>
409
+ <div class="module-content" id="feed-10f1745e849f46f67f63863b9ebde1a80a34c8e3">
410
+ <script type="text/javascript" defer="defer" src="http://cybersoc.blogs.com/.services/content?src=Feed:http%3A%2F%2Fnewsrss.bbc.co.uk%2Frss%2Fnewsonline_uk_edition%2Fengland%2Fbeds%2Fbucks%2Fherts%2Frss.xml,5"></script>
411
+ </div>
412
+ </div>
413
+ <div class="module-typelist module">
414
+ <h2 class="module-header">News and Weather</h2>
415
+ <div class="module-content">
416
+ <ul class="module-list">
417
+ <li class="module-list-item"><a title="" href="http://www.bbc.co.uk/hertfordshire">BBC 3 Counties</a></li>
418
+ <li class="module-list-item"><a title="" href="http://www.bbc.co.uk/weather/5day.shtml?id=1035">BBC Weather for St. Albans</a></li>
419
+ <li class="module-list-item"><a title="" href="http://www.hertsad.co.uk/">The Herts Advertiser</a></li>
420
+ <li class="module-list-item"><a title="" href="http://www.stalbansobserver.co.uk/">St. Albans Observer</a></li>
421
+ <li class="module-list-item"><a title="" href="http://www.thisishertfordshire.co.uk/news/stalbans/">This Is Hertfordshire</a></li>
422
+
423
+ </ul>
424
+ </div>
425
+ </div>
426
+
427
+ <div class="module-typelist module">
428
+ <h2 class="module-header">St. Albans Guides</h2>
429
+ <div class="module-content">
430
+ <ul class="module-list">
431
+ <li class="module-list-item"><a title="" href="http://stalbansguide.users.btopenworld.com/">Dave's Guide</a></li>
432
+ <li class="module-list-item"><a title="" href="http://www.knowhere.co.uk/64.html">Knowhere Guide to St Albans</a></li>
433
+
434
+ </ul>
435
+ </div>
436
+ </div>
437
+
438
+ <div class="module-typelist module">
439
+ <h2 class="module-header">St. Albans Government and Info</h2>
440
+ <div class="module-content">
441
+ <ul class="module-list">
442
+ <li class="module-list-item"><a title="" href="http://www.hertsparts.nhs.uk/">Hertfordshire Partnership NHS Trust :</a></li>
443
+ <li class="module-list-item"><a title="" href="http://www.herts.police.uk/">Hertfordshire Constabulary</a></li>
444
+ <li class="module-list-item"><a title="" href="http://www.hertsmuseums.org.uk/">Museums in Hertfordshire</a></li>
445
+ <li class="module-list-item"><a title="" href="http://www.herts.ac.uk">University of Hertfordshire</a></li>
446
+ <li class="module-list-item"><a title="" href="http://www.hertsdirect.org">hertsdirect.org</a></li>
447
+
448
+ </ul>
449
+ </div>
450
+ </div>
451
+
452
+ <div class="module-typelist module">
453
+ <h2 class="module-header">Sport in St. Albans</h2>
454
+ <div class="module-content">
455
+ <ul class="module-list">
456
+ <li class="module-list-item"><a title="" href="http://www.stalbans.gov.uk/leisure/sports/sportlist.php?sport=Football">football clubs (list)</a></li>
457
+ <li class="module-list-item"><a title="" href="http://www.hertsba.com/">Herts Bowling Assoc</a></li>
458
+ <li class="module-list-item"><a title="" href="http://www.herts-squash.org.uk/">Herts Squash Rackets Assoc</a></li>
459
+ <li class="module-list-item"><a title="" href="http://www.hertsarchery.org.uk/">Herts Archery Assoc</a></li>
460
+ <li class="module-list-item"><a title="" href="http://www.hertsasa.org.uk/">Herts ASA (Swimming)</a></li>
461
+
462
+ </ul>
463
+ </div>
464
+ </div>
465
+
466
+ <div class="module-typelist module">
467
+ <h2 class="module-header">St.AlbansBlogBits</h2>
468
+ <div class="typelist-plain module-content">
469
+ <ul class="module-list">
470
+ <li class="module-list-item"><div class="typelist-note"><a href="http://www.britblog.com/" title="British Blog Directory."><img src="http://img.britblog.com/icons/icon_britblog_80x15.gif" width="80" height="15" border="0" alt="British Blog Directory."></a></div></li>
471
+ <li class="module-list-item"><div class="typelist-note"><!-- Start of StatCounter Code -->
472
+ <script type="text/javascript" language="javascript">
473
+ var sc_project=2322329;
474
+ var sc_invisible=0;
475
+ var sc_partition=21;
476
+ var sc_security="f4dc7df9";
477
+ </script>
478
+
479
+ <script type="text/javascript" language="javascript" src="http://www.statcounter.com/counter/counter.js"></script><noscript><a href="http://www.statcounter.com/" target="_blank"><img src="http://c22.statcounter.com/counter.php?sc_project=2322329&amp;java=0&amp;security=f4dc7df9&amp;invisible=0" alt="free html hit counter" border="0"></a> </noscript>
480
+ <!-- End of StatCounter Code -->
481
+
482
+ <script type="text/javascript" src="http://embed.technorati.com/embed/j54uvzisw3.js"></script>
483
+
484
+ <script type="text/javascript">
485
+ var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
486
+ document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
487
+ </script>
488
+ <script type="text/javascript">
489
+ var pageTracker = _gat._getTracker("UA-5968608-1");
490
+ pageTracker._trackPageview();
491
+ </script></div></li>
492
+
493
+ </ul>
494
+ </div>
495
+ </div>
496
+
497
+
498
+
499
+
500
+
501
+
502
+ </div>
503
+ </div>
504
+ </div>
505
+ </div>
506
+
507
+ </div>
508
+ </div>
509
+
510
+ <script type="text/javascript">
511
+ <!--
512
+ var extra_happy = Math.floor(1000000000 * Math.random());
513
+ document.write('<img src="http://www.typepad.com/t/stats?blog_id=290414&amp;user_id=333875&amp;page=' + escape(location.href) + '&amp;referrer=' + escape(document.referrer) + '&amp;i=' + extra_happy + '" width="1" height="1" alt="" style="position: absolute; top: 0; left: 0;" />');
514
+ // -->
515
+ </script>
516
+
517
+ <!-- Start Quantcast tag -->
518
+ <script type="text/javascript" src="http://edge.quantserve.com/quant.js"></script>
519
+ <script type="text/javascript">_qoptions = { tags:"typepad.extended" }; _qacct="p-fcYWUmj5YbYKM"; quantserve();</script>
520
+ <noscript>
521
+ <a href="http://www.quantcast.com/p-fcYWUmj5YbYKM" target="_blank"><img src="http://pixel.quantserve.com/pixel/p-fcYWUmj5YbYKM.gif?tags=typepad.extended" style="display: none" border="0" height="1" width="1" alt="Quantcast"/></a>
522
+ </noscript>
523
+ <!-- End Quantcast tag -->
524
+ </body>
525
+ </html>
526
+ <!-- ph=1 -->
527
+ <!-- nhm:from_kauri -->