feedtosis 0.0.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,34 @@
1
+ module Feedtosis
2
+
3
+ # Makes the response components both from the Curl::Easy object and the
4
+ # FeedNormalizer::Feed object available to the user by delegating appropriate
5
+ # method calls to the correct object. If FeedNormalizer wasn't able to process
6
+ # the response, calls which would be delegated to this object return nil. In
7
+ # these cases, depending on your business logic you may want to inspect the
8
+ # state of the Curl::Easy object by using methods forwarded to it.
9
+ class Result
10
+ extend Forwardable
11
+
12
+ def initialize(curl, feed)
13
+ @curl = curl
14
+ @feed = feed
15
+
16
+ raise ArgumentError, "Curl object must not be nil" if curl.nil?
17
+ end
18
+
19
+ # See what the Curl::Easy object responds to, and send any appropriate messages its way. We ignore
20
+ # Curl setter methods since those aren't really useful to delegate.
21
+ def_delegators :@curl, *Curl::Easy.instance_methods(false).reject {|m| m =~ /=$/o }
22
+
23
+ # Send methods through to the feed object unless it is nil. If feed object is nil, return nil in response to method call.
24
+ # Unfortunately we can't just see what the object responds to, since FeedNormalizer uses method_missing.
25
+ [ :title, :description, :last_updated, :copyright, :authors, :author, :urls, :url, :image, :generator, :items,
26
+ :entries, :new_items, :new_entries, :channel, :ttl, :skip_hours, :skip_days
27
+ ].each do |meth| # Example method:
28
+ define_method meth do |*args| # def author
29
+ @feed.__send__(meth, *args) unless @feed.nil? # @feed.author unless @feed.nil?
30
+ end # end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. .. spec_helper])
2
+
3
+ describe Feedtosis::FeedInstanceMethods do
4
+ before do
5
+ @fn = FeedNormalizer::FeedNormalizer.parse(xml_fixture('wooster'))
6
+ end
7
+
8
+ it "should respond to new_entries and new_items" do
9
+ @fn.should respond_to(:new_entries)
10
+ @fn.should respond_to(:new_items)
11
+ end
12
+ end
@@ -0,0 +1,162 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. spec_helper])
2
+
3
+ describe Feedtosis::Client do
4
+ before do
5
+ @url = "http://www.example.com/feed.rss"
6
+ @backend = Hash.new
7
+ @fr = Feedtosis::Client.new(@url, :backend => @backend)
8
+ end
9
+
10
+ describe "initialization" do
11
+ it "should set #url to an Array when an Array is given" do
12
+ @fr.url.should == @url
13
+ end
14
+
15
+ describe "validation of url in first argument" do
16
+ it "should not raise an error on initialization with a valid HTTP url" do
17
+ lambda {
18
+ Feedtosis::Client.new('http://www.example.com')
19
+ }.should_not raise_error
20
+ end
21
+
22
+ it "should raise an error on initialization with an invalid url" do
23
+ lambda {
24
+ Feedtosis::Client.new('ftp://www.example.com')
25
+ }.should raise_error(ArgumentError)
26
+ end
27
+ end
28
+
29
+ it "should raise ArgumentError if options is not a Hash" do
30
+ lambda {
31
+ Feedtosis::Client.new('http://www.example.com', Object.new)
32
+ }.should raise_error(ArgumentError)
33
+ end
34
+
35
+ it "should set the If-None-Match and If-Modified-Since headers to the value of the summary hash" do
36
+ curl_headers = mock('headers')
37
+ curl_headers.expects(:[]=).with('If-None-Match', '42ab')
38
+ curl_headers.expects(:[]=).with('If-Modified-Since', 'Mon, 25 May 2009 16:38:49 GMT')
39
+
40
+ summary = { :etag => '42ab', :last_modified => 'Mon, 25 May 2009 16:38:49 GMT', :digests => [ ] }
41
+
42
+ @fr.__send__(:set_summary, summary)
43
+
44
+ curl_easy = mock('curl', :perform => true, :follow_location= => true,
45
+ :response_code => 200, :body_str => xml_fixture('wooster'),
46
+ :header_str => http_header('wooster')
47
+ )
48
+
49
+ curl_easy.expects(:headers).returns(curl_headers).times(2)
50
+
51
+ @fr.expects(:new_curl_easy).returns(curl_easy)
52
+ @fr.fetch
53
+ end
54
+
55
+ describe "#summary_for_feed" do
56
+ it "should return a hash with :digests set to an empty Array when summary is nil" do
57
+ @fr.__send__(:set_summary, nil)
58
+ @fr.__send__(:summary_for_feed).should == {:digests => [ ]}
59
+ end
60
+ end
61
+
62
+ describe "when given a pre-initialized backend" do
63
+ it "should set the @backend to the pre-initialized structure" do
64
+ h = Moneta::Memory.new
65
+ fc = Feedtosis::Client.new(@url, :backend => h)
66
+ fc.__send__(:instance_variable_get, :@backend).should == h
67
+ end
68
+
69
+ it "should raise an error if the backend is not a key-value store based on behavior" do
70
+ o = Object.new
71
+
72
+ lambda {
73
+ Feedtosis::Client.new(@url, :backend => o)
74
+ }.should raise_error(ArgumentError)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe "#key_for_cached" do
80
+ it "should default to the MD5 of the url after the namespace" do
81
+ c = Feedtosis::Client.new(@url)
82
+ c.__send__(:key_for_cached).should == [ 'feedtosis', MD5.hexdigest(@url) ].join('_')
83
+ end
84
+
85
+ it "should respect a custom namespace if given" do
86
+ c = Feedtosis::Client.new(@url, :namespace => 'justin')
87
+ c.__send__(:key_for_cached).should == [ 'justin', MD5.hexdigest(@url) ].join('_')
88
+ end
89
+ end
90
+
91
+ describe "#fetch" do
92
+ it "should call Curl::Easy.perform with the url, and #process_curl_response" do
93
+ curl_easy = mock('curl', :perform => true)
94
+ @fr.expects(:build_curl_easy).returns(curl_easy)
95
+ @fr.expects(:process_curl_response)
96
+ @fr.fetch
97
+ end
98
+
99
+ describe "when called more than once" do
100
+ it "should call new_curl_easy with #{@url}" do
101
+ mock_curl = mock('curl')
102
+ mock_curl.expects(:follow_location=).with(true).twice
103
+ mock_curl.expects(:perform).twice
104
+ mock_curl.expects(:response_code).twice
105
+ @fr.expects(:new_curl_easy).with(@url).twice.returns(mock_curl)
106
+ @fr.fetch
107
+ @fr.fetch
108
+ end
109
+ end
110
+
111
+ describe "when the response code is not 200" do
112
+ it "should return nil for feed methods such as #title and #author" do
113
+ curl = mock('curl', :perform => true, :response_code => 304)
114
+ @fr.expects(:build_curl_easy).returns(curl)
115
+ res = @fr.fetch
116
+ res.title.should be_nil
117
+ res.author.should be_nil
118
+ end
119
+
120
+ it "should return a Feedtosis::Result object" do
121
+ curl = mock('curl', :perform => true, :response_code => 304)
122
+ @fr.expects(:build_curl_easy).returns(curl)
123
+ @fr.fetch.should be_a(Feedtosis::Result)
124
+ end
125
+ end
126
+
127
+ describe "when the response code is 200" do
128
+ describe "when an identical resource has been retrieved previously" do
129
+ before do
130
+ curl = mock('curl', :perform => true, :response_code => 200,
131
+ :body_str => xml_fixture('wooster'), :header_str => http_header('wooster'))
132
+ @fr.expects(:build_curl_easy).returns(curl)
133
+ @fr.fetch
134
+ end
135
+
136
+ it "should have an empty array for new_entries" do
137
+ curl = mock('curl', :perform => true, :response_code => 200,
138
+ :body_str => xml_fixture('wooster'), :header_str => http_header('wooster'))
139
+ @fr.expects(:build_curl_easy).returns(curl)
140
+ @fr.fetch.new_entries.should == []
141
+ end
142
+ end
143
+
144
+ describe "when the resource has been previously retrieved minus two entries" do
145
+ before do
146
+ curl = mock('curl', :perform => true, :response_code => 200,
147
+ :body_str => xml_fixture('older_wooster'), :header_str => http_header('wooster'))
148
+ @fr.expects(:build_curl_easy).returns(curl)
149
+ @fr.fetch
150
+ end
151
+
152
+ it "should have two elements in new_entries" do
153
+ curl = mock('curl', :perform => true, :response_code => 200,
154
+ :body_str => xml_fixture('wooster'), :header_str => http_header('wooster'))
155
+ @fr.expects(:build_curl_easy).returns(curl)
156
+ @fr.fetch.new_entries.size.should == 2
157
+ end
158
+ end
159
+ end
160
+ end
161
+
162
+ end
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__), %w[.. spec_helper])
2
+
3
+ describe Feedtosis::Result do
4
+ before do
5
+ @c = mock('curl')
6
+ @f = mock('feed')
7
+ @r = Feedtosis::Result.new(@c, @f)
8
+ end
9
+
10
+ it "should raise an ArgumentError if the Curl object is nil" do
11
+ lambda {
12
+ Feedtosis::Result.new(nil, nil)
13
+ }.should raise_error(ArgumentError)
14
+ end
15
+
16
+ it "should send author to the Feed object" do
17
+ @f.expects(:author)
18
+ @r.author
19
+ end
20
+
21
+ it "should send body_str to the curl object" do
22
+ @c.expects(:body_str)
23
+ @r.body_str
24
+ end
25
+
26
+ it "should not respond to setter methods common in the Curl::Easy class" do
27
+ @r.should_not respond_to(:encoding=)
28
+ end
29
+
30
+ it "should return nil for author if the Feed is nil" do
31
+ r = Feedtosis::Result.new(@c, nil)
32
+ r.author
33
+ end
34
+ end
@@ -0,0 +1,19 @@
1
+ HTTP/1.1 302 Found
2
+ Date: Mon, 25 May 2009 17:36:02 GMT
3
+ Server: Apache/2.0.52 (Red Hat)
4
+ Location: http://feeds.feedburner.com/wooster
5
+ Content-Length: 311
6
+ Connection: close
7
+ Content-Type: text/html; charset=iso-8859-1
8
+
9
+ HTTP/1.1 200 OK
10
+ Last-Modified: Mon, 25 May 2009 16:38:49 GMT
11
+ ETag: /YJUYmsYIcQeFAGy7OZQoaCQeXw
12
+ Content-Type: text/xml; charset=utf-8
13
+ Date: Mon, 25 May 2009 17:36:03 GMT
14
+ Expires: Mon, 25 May 2009 17:36:03 GMT
15
+ Cache-Control: private, max-age=0
16
+ X-Content-Type-Options: nosniff
17
+ Server: GFE/2.0
18
+ Transfer-Encoding: chunked
19
+
@@ -0,0 +1,203 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?>
3
+ <?xml-stylesheet type="text/css" media="screen" href="http://feeds2.feedburner.com/~d/styles/itemcontent.css"?>
4
+ <rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
5
+ <channel>
6
+ <title>Wooster Collective</title>
7
+ <link>http://www.woostercollective.com/</link>
8
+ <description/>
9
+ <language>en</language>
10
+ <copyright>Copyright 2009</copyright>
11
+ <lastBuildDate>Mon, 25 May 2009 07:48:04 -0500</lastBuildDate>
12
+ <generator>http://www.sixapart.com/movabletype/?v=3.3</generator>
13
+ <docs>http://blogs.law.harvard.edu/tech/rss</docs>
14
+ <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="www.woostercollective.com/rss/index.xml" type="application/rss+xml"/>
15
+ <feedburner:emailServiceId>wooster</feedburner:emailServiceId>
16
+ <feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname>
17
+ <item>
18
+ <title>Seen In North London: Department of Urban Censorship</title>
19
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/urbancensor.jpg"><img alt="urbancensor.jpg" src="http://www.woostercollective.com/urbancensor-thumb.jpg" width="500" height="444" /></a></p>
20
+
21
+ <p>(Thanks, <a href="http://www.tupajumi.com/jonathan/">Jonathan</a>)<br />
22
+ </p>]]></description>
23
+ <link>http://feedproxy.google.com/~r/wooster/~3/syiP17t0PKo/seen_in_north_london_department_of_urban.html</link>
24
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/seen_in_north_london_department_of_urban.html</guid>
25
+ <category>Wheatpastes</category>
26
+ <pubDate>Mon, 25 May 2009 07:39:16 -0500</pubDate>
27
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/seen_in_north_london_department_of_urban.html</feedburner:origLink>
28
+ </item>
29
+ <item>
30
+ <title>Seen On The Steets Of Stockholm</title>
31
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/poststock.jpg"><img alt="poststock.jpg" src="http://www.woostercollective.com/poststock-thumb.jpg" width="500" height="748" /></a></p>
32
+
33
+ <p>Artist: <a href="http://vimeo.com/post">Post</a></p>]]></description>
34
+ <link>http://feedproxy.google.com/~r/wooster/~3/611KGRn-ZQE/seen_on_the_steets_of_stockholm.html</link>
35
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/seen_on_the_steets_of_stockholm.html</guid>
36
+ <category>Wheatpastes</category>
37
+ <pubDate>Mon, 25 May 2009 07:29:55 -0500</pubDate>
38
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/seen_on_the_steets_of_stockholm.html</feedburner:origLink>
39
+ </item>
40
+ <item>
41
+ <title>Zevs' Electric Rainbows (2007)</title>
42
+ <description><![CDATA[<p>Zevs has updated <a href="http://www.gzzglz.com/">his website</a> with photos of past and recent project. We love the Electric Rainbows that he exchanged for advertisements back 2007:</p>
43
+
44
+ <p><a href="http://www.woostercollective.com/electric-rainbow-02.jpg"><img alt="electric-rainbow-02.jpg" src="http://www.woostercollective.com/electric-rainbow-02-thumb.jpg" width="500" height="335" /></a></p>
45
+
46
+ <p><br />
47
+ </p>]]></description>
48
+ <link>http://feedproxy.google.com/~r/wooster/~3/TpmlTS7y0f0/zevs_electric_rainbows_2007.html</link>
49
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/zevs_electric_rainbows_2007.html</guid>
50
+ <category>Art</category>
51
+ <pubDate>Mon, 25 May 2009 07:19:27 -0500</pubDate>
52
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/zevs_electric_rainbows_2007.html</feedburner:origLink>
53
+ </item>
54
+ <item>
55
+ <title>Zephyr - An Introduction</title>
56
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/zephydith.jpg"><img alt="zephydith.jpg" src="http://www.woostercollective.com/zephydith-thumb.jpg" width="500" height="347" /></a></p>
57
+
58
+ <p><object width="320" height="265"><param name="movie" value="http://www.youtube.com/v/kqXXZcy-2JU&hl=en&fs=1&rel=0&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/kqXXZcy-2JU&hl=en&fs=1&rel=0&hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="265"></embed></object></p>
59
+
60
+ <p>One of the first graffiti artists to "accept" Sara and I back in 2000 when we started the Wooster Collective was Zephyr. This week <a href="http://www.upperplayground.com/">Upper Playground</a> posted a terrific interview with Zephyr filmed a few years ago for their Dithers DVD. </p>]]></description>
61
+ <link>http://feedproxy.google.com/~r/wooster/~3/32-ED1oPdYY/zephyr_in_introduction.html</link>
62
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/zephyr_in_introduction.html</guid>
63
+ <category>Graffiti</category>
64
+ <pubDate>Sat, 23 May 2009 12:44:36 -0500</pubDate>
65
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/zephyr_in_introduction.html</feedburner:origLink>
66
+ </item>
67
+ <item>
68
+ <title>The Yes Men - An Introduction</title>
69
+ <description><![CDATA[<div><object width="512" height="322"><param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" /><param name="allowFullScreen" value="true" /><param name="AllowScriptAccess" VALUE="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="id=13527850&vid=13527850&lang=en-us&intl=us&thumbUrl=&embed=1" /><embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.40" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=13527850&vid=13527850&lang=en-us&intl=us&thumbUrl=&embed=1" ></embed></object><br /><a href="http://video.yahoo.com/watch/13527850/13527850"></a> @ <a href="http://video.yahoo.com" >Yahoo! Video</a></div>
70
+
71
+ <p>If you're not familiar with <a href="http://theyesmen.org/">The Yes Men</a>, this video of their Poptech speech from 2006 is a fantastic introduction.</p>
72
+
73
+ <p>(Hat tip to <a href="http://www.brainpickings.org/">Brain Pickings</a>)</p>]]></description>
74
+ <link>http://feedproxy.google.com/~r/wooster/~3/0yXb4Ui8C3I/the_yes_men_an_introduction.html</link>
75
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/the_yes_men_an_introduction.html</guid>
76
+ <category>Activism</category>
77
+ <pubDate>Fri, 22 May 2009 11:24:26 -0500</pubDate>
78
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/the_yes_men_an_introduction.html</feedburner:origLink>
79
+ </item>
80
+ <item>
81
+ <title>A Great Example Of Site Specific Work: Carlsbad Sidewalk Surfer</title>
82
+ <description><![CDATA[<p><img alt="bryansurfer.jpg" src="http://www.woostercollective.com/bryansurfer.jpg" width="500" height="384" /></p>
83
+
84
+ <p><object width="400" height="307"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4772503&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=4772503&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="307"></embed></object><p><a href="http://vimeo.com/4772503">Carlsbad Sidewalk Surfer by bryan snyder</a> from <a href="http://vimeo.com/bryansnyder">Bryan Snyder</a> on <a href="http://vimeo.com">Vimeo</a>.</p></p>
85
+
86
+ <p>From <a href="http://www.snyderartdesign.com">Bryan</a>:</p>
87
+
88
+ <p>Carlsbad Sidewalk Surfer interacts with its environment during mid day wind gusts. Like the waves that tumble upon our shore, the visibility of this art piece depends on the weather. Between the glassy conditions of the morning and the mellow winds at dusk, the Carlsbad Sidewalk Surfer sneaks into another ride. The goal of this project is to showcase the relationship between a piece of art and its environment when placed in the streets."</p>]]></description>
89
+ <link>http://feedproxy.google.com/~r/wooster/~3/oXfLFSd86cY/a_great_example_of_site_specific_work_ca.html</link>
90
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/a_great_example_of_site_specific_work_ca.html</guid>
91
+ <category>Environmental</category>
92
+ <pubDate>Fri, 22 May 2009 07:54:36 -0500</pubDate>
93
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/a_great_example_of_site_specific_work_ca.html</feedburner:origLink>
94
+ </item>
95
+ <item>
96
+ <title>Herakut Beautifies The Streets Of New York</title>
97
+ <description><![CDATA[<p><img alt="9501466.jpg" src="http://www.woostercollective.com/9501466.jpg" width="480" height="640" /></p>
98
+
99
+ <p>While they were in town this week for an opening at <a href="http://redflagg.com/">RedFlagg</a>, <a href="http://www.herakut.de/">Herakut</a> put up a wonderful piece outside <a href="http://eyebeam.org/">Eyebeam</a> If you haven't head about the show in New York, here's the info:</p>
100
+
101
+ <p>Herakut<br />
102
+ No Placebos<br />
103
+ May 21 – July 3, 2009</p>]]></description>
104
+ <link>http://feedproxy.google.com/~r/wooster/~3/rWAKvvkBDYY/herakut_beautifies_the_streets_of_new_yo.html</link>
105
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/herakut_beautifies_the_streets_of_new_yo.html</guid>
106
+ <category>Walls</category>
107
+ <pubDate>Fri, 22 May 2009 07:40:04 -0500</pubDate>
108
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/herakut_beautifies_the_streets_of_new_yo.html</feedburner:origLink>
109
+ </item>
110
+ <item>
111
+ <title>Fresh Stuff From Cena7</title>
112
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/cenared.jpg"><img alt="cenared.jpg" src="http://www.woostercollective.com/cenared-thumb.jpg" width="500" height="409" /></a></p>
113
+
114
+ <p>More from Cena7 <a href="http://www.flickr.com/photos/cena7-mpc">here</a>. <br />
115
+ </p>]]></description>
116
+ <link>http://feedproxy.google.com/~r/wooster/~3/x4y4ZuKBadg/fresh_stuff_from_cena7_1.html</link>
117
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/fresh_stuff_from_cena7_1.html</guid>
118
+ <category>Walls</category>
119
+ <pubDate>Fri, 22 May 2009 07:37:33 -0500</pubDate>
120
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/fresh_stuff_from_cena7_1.html</feedburner:origLink>
121
+ </item>
122
+ <item>
123
+ <title>Wooster on Facebook</title>
124
+ <description><![CDATA[<p><img alt="woostfaceo.jpg" src="http://www.woostercollective.com/woostfaceo.jpg" width="500" height="376" /></p>
125
+
126
+ <p>Each and every day we get more excited about the discussions that are taking place on our <a href="http://www.facebook.com/pages/Wooster-Collective/24080260389?ref=ts#/pages/Wooster-Collective/24080260389?ref=mf">Wooster Collective Facebook page</a>. The responses to our recent questions:</p>
127
+
128
+ <p>For those who risk getting arrested while putting up street art or writing graffiti: What motivates you to do it?</p>
129
+
130
+ <p>What's currently inspiring you?</p>
131
+
132
+ <p>How would you describe the "role" that graffiti or street art plays in your life? What does it "add" or subtract?</p>
133
+
134
+ <p>If I gave you $50 today, with the condition that you had to spend it on "art", what would you do with it?</p>
135
+
136
+ <p>If you haven't yet checked it out we can't recommend it more highly. It's become an incredible companion to the Wooster blog. </p>
137
+
138
+ <p>Also, we are indeed on Twitter. Not as "Wooster Collective" but as <a href="http://www.twitter.com/MarcSchil">Marc</a> and <a href="http://www.twitter.com/saraschiller">Sara</a>. </p>]]></description>
139
+ <link>http://feedproxy.google.com/~r/wooster/~3/4uAvR5rZn80/wooster_on_facebook.html</link>
140
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/wooster_on_facebook.html</guid>
141
+ <category>Site Announcements</category>
142
+ <pubDate>Thu, 21 May 2009 08:05:18 -0500</pubDate>
143
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/wooster_on_facebook.html</feedburner:origLink>
144
+ </item>
145
+ <item>
146
+ <title>Wooster on Facebook</title>
147
+ <description><![CDATA[<p><img alt="woostfaceo.jpg" src="http://www.woostercollective.com/woostfaceo.jpg" width="500" height="376" /></p>
148
+
149
+ <p>Each and every day we get more excited about the discussions that are taking place on our <a href="http://www.facebook.com/pages/Wooster-Collective/24080260389?ref=ts#/pages/Wooster-Collective/24080260389?ref=mf">Wooster Collective Facebook page</a>. The responses to our recent questions:</p>
150
+
151
+ <p>For those who risk getting arrested while putting up street art or writing graffiti: What motivates you to do it?</p>
152
+
153
+ <p>What's currently inspiring you?</p>
154
+
155
+ <p>How would you describe the "role" that graffiti or street art plays in your life? What does it "add" or subtract?</p>
156
+
157
+ <p>If I gave you $50 today, with the condition that you had to spend it on "art", what would you do with it?</p>
158
+
159
+ <p>If you haven't yet checked it out we can't recommend it more highly. It's become an incredible companion to the Wooster blog. </p>
160
+
161
+ <p>Also, we are indeed on Twitter. Not as "Wooster Collective" but as <a href="http://www.twitter.com/MarcSchil">Marc</a> and <a href="http://www.twitter.com/saraschiller">Sara</a>. </p>]]></description>
162
+ <link>http://feedproxy.google.com/~r/wooster/~3/CV9qfY3WZqM/wooster_on_facebook_1.html</link>
163
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/wooster_on_facebook_1.html</guid>
164
+ <category>Site Announcements</category>
165
+ <pubDate>Thu, 21 May 2009 08:05:18 -0500</pubDate>
166
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/wooster_on_facebook_1.html</feedburner:origLink>
167
+ </item>
168
+ <item>
169
+ <title>Seen On The Steets Of Berlin</title>
170
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/brownpaper1.jpg"><img alt="brownpaper1.jpg" src="http://www.woostercollective.com/brownpaper1-thumb.jpg" width="500" height="416" /></a><br />
171
+ </p>]]></description>
172
+ <link>http://feedproxy.google.com/~r/wooster/~3/O-9kaseEs8I/seen_on_the_steets_of_berlin_1.html</link>
173
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/seen_on_the_steets_of_berlin_1.html</guid>
174
+ <category>Wheatpastes</category>
175
+ <pubDate>Thu, 21 May 2009 07:57:05 -0500</pubDate>
176
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/seen_on_the_steets_of_berlin_1.html</feedburner:origLink>
177
+ </item>
178
+ <item>
179
+ <title>Checkin' In With... Lister</title>
180
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/listcheck.jpg"><img alt="listcheck.jpg" src="http://www.woostercollective.com/listcheck-thumb.jpg" width="500" height="342" /></a></p>
181
+
182
+ <p>"out onto this roof the other night. i wasnt even sure that i had finished this piece but when i returned the next day i was surprised that it looked like this. the wall was so big and high that i couldn't step back at all. i am still surprised the proportions were correct."... <a href="http://www.anthonylister.com">Lister</a></p>]]></description>
183
+ <link>http://feedproxy.google.com/~r/wooster/~3/xKfEO6qRHLY/checkin_in_with_lister.html</link>
184
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/checkin_in_with_lister.html</guid>
185
+ <category>Walls</category>
186
+ <pubDate>Thu, 21 May 2009 07:45:54 -0500</pubDate>
187
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/checkin_in_with_lister.html</feedburner:origLink>
188
+ </item>
189
+ <item>
190
+ <title>Another Great Electronic Billboard Takeover From Poster Child</title>
191
+ <description><![CDATA[<p><a href="http://www.woostercollective.com/pixeljes.jpg"><img alt="pixeljes.jpg" src="http://www.woostercollective.com/pixeljes-thumb.jpg" width="500" height="375" /></a></p>
192
+
193
+ <div><object width="480" height="381"><param name="movie" value="http://www.dailymotion.com/swf/x99ave_stained-glass-postpixelators_creation&related=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.dailymotion.com/swf/x99ave_stained-glass-postpixelators_creation&related=1" type="application/x-shockwave-flash" width="480" height="381" allowFullScreen="true" allowScriptAccess="always"></embed></object><br /><b><a href="http://www.dailymotion.com/video/x99ave_stained-glass-postpixelators_creation">Stained Glass Post-Pixelators</a></b><br /><i>Uploaded by <a href="http://www.dailymotion.com/posterchild">posterchild</a>. - <a href="http://www.dailymotion.com/channel/creation">Independent web videos.</a></i></div>
194
+
195
+ <p>More from Poster Child <a href="http://www.bladediary.com/">here</a>. </p>]]></description>
196
+ <link>http://feedproxy.google.com/~r/wooster/~3/Rz_yYr1lijQ/another_great_electronic_billboard_takeo.html</link>
197
+ <guid isPermaLink="false">http://www.woostercollective.com/2009/05/another_great_electronic_billboard_takeo.html</guid>
198
+ <category>Billboard Liberations</category>
199
+ <pubDate>Wed, 20 May 2009 07:59:04 -0500</pubDate>
200
+ <feedburner:origLink>http://www.woostercollective.com/2009/05/another_great_electronic_billboard_takeo.html</feedburner:origLink>
201
+ </item>
202
+ </channel>
203
+ </rss>