feedjira-redis 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 584a2621cb48936a41def45f081be85a8a231629
4
+ data.tar.gz: c110460460fd313a05dc3e1ccb3ec25fd71d5748
5
+ SHA512:
6
+ metadata.gz: 5f29a913f4a125854f6cda02c70ce32ab59c6d56ca7e191fcd3ee408d11102f193d389a831ee4ae593b4c1bbbfafc6a43ae2ca8e094bc61c77ffdd438a8cc843
7
+ data.tar.gz: 76d19bfaae1afe53a7b565264256b500a3bf9bf19e942d124857cae330f1c6429d1fe05b9d3f0ae8ada176a91f86c48b2e45bd8934e83db2063075081024e0f7
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm --create ruby-2.0.0@feedzirra_redis_gem
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'dm-redis-adapter'
4
+ gem 'feedjira'
5
+ gem 'i18n'
6
+
7
+ group :development do
8
+ gem "shoulda", ">= 0"
9
+ gem "bundler"#, "~> 1.0.0"
10
+ gem "jeweler", ">= 2.0.1"
11
+ #gem "rcov", ">= 0"
12
+ end
@@ -0,0 +1,119 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activesupport (4.1.1)
5
+ i18n (~> 0.6, >= 0.6.9)
6
+ json (~> 1.7, >= 1.7.7)
7
+ minitest (~> 5.1)
8
+ thread_safe (~> 0.1)
9
+ tzinfo (~> 1.1)
10
+ addressable (2.3.6)
11
+ bcrypt (3.1.7)
12
+ bcrypt-ruby (3.1.5)
13
+ bcrypt (>= 3.1.3)
14
+ builder (3.2.2)
15
+ curb (0.8.5)
16
+ descendants_tracker (0.0.4)
17
+ thread_safe (~> 0.3, >= 0.3.1)
18
+ dm-core (1.2.1)
19
+ addressable (~> 2.3)
20
+ dm-redis-adapter (0.9.0)
21
+ dm-core (>= 1.2.0)
22
+ dm-core (>= 1.2.0)
23
+ dm-types (>= 1.2.0)
24
+ dm-types (>= 1.2.0)
25
+ dm-validations (>= 1.2.0)
26
+ hiredis (~> 0.4.0)
27
+ hiredis (~> 0.4.0)
28
+ jeweler (>= 1.4.0)
29
+ rake (>= 10.0.3)
30
+ redis (>= 3.0.4)
31
+ redis (>= 3.0.4)
32
+ rspec (~> 1.3.2)
33
+ dm-types (1.2.2)
34
+ bcrypt-ruby (~> 3.0)
35
+ dm-core (~> 1.2.0)
36
+ fastercsv (~> 1.5)
37
+ json (~> 1.6)
38
+ multi_json (~> 1.0)
39
+ stringex (~> 1.4)
40
+ uuidtools (~> 2.1)
41
+ dm-validations (1.2.0)
42
+ dm-core (~> 1.2.0)
43
+ faraday (0.9.0)
44
+ multipart-post (>= 1.2, < 3)
45
+ fastercsv (1.5.5)
46
+ feedjira (1.2.0)
47
+ curb (~> 0.8.1)
48
+ loofah (~> 1.2.1)
49
+ sax-machine (~> 0.2.1)
50
+ git (1.2.6)
51
+ github_api (0.11.3)
52
+ addressable (~> 2.3)
53
+ descendants_tracker (~> 0.0.1)
54
+ faraday (~> 0.8, < 0.10)
55
+ hashie (>= 1.2)
56
+ multi_json (>= 1.7.5, < 2.0)
57
+ nokogiri (~> 1.6.0)
58
+ oauth2
59
+ hashie (2.1.1)
60
+ highline (1.6.21)
61
+ hiredis (0.4.5)
62
+ i18n (0.6.9)
63
+ jeweler (2.0.1)
64
+ builder
65
+ bundler (>= 1.0)
66
+ git (>= 1.2.5)
67
+ github_api
68
+ highline (>= 1.6.15)
69
+ nokogiri (>= 1.5.10)
70
+ rake
71
+ rdoc
72
+ json (1.8.1)
73
+ jwt (0.1.13)
74
+ multi_json (>= 1.5)
75
+ loofah (1.2.1)
76
+ nokogiri (>= 1.4.4)
77
+ mini_portile (0.5.3)
78
+ minitest (5.3.3)
79
+ multi_json (1.10.0)
80
+ multi_xml (0.5.5)
81
+ multipart-post (2.0.0)
82
+ nokogiri (1.6.1)
83
+ mini_portile (~> 0.5.0)
84
+ oauth2 (0.9.3)
85
+ faraday (>= 0.8, < 0.10)
86
+ jwt (~> 0.1.8)
87
+ multi_json (~> 1.3)
88
+ multi_xml (~> 0.5)
89
+ rack (~> 1.2)
90
+ rack (1.5.2)
91
+ rake (10.3.2)
92
+ rdoc (4.1.1)
93
+ json (~> 1.4)
94
+ redis (3.0.7)
95
+ rspec (1.3.2)
96
+ sax-machine (0.2.1)
97
+ nokogiri (~> 1.6.0)
98
+ shoulda (3.5.0)
99
+ shoulda-context (~> 1.0, >= 1.0.1)
100
+ shoulda-matchers (>= 1.4.1, < 3.0)
101
+ shoulda-context (1.2.1)
102
+ shoulda-matchers (2.6.1)
103
+ activesupport (>= 3.0.0)
104
+ stringex (1.5.1)
105
+ thread_safe (0.3.3)
106
+ tzinfo (1.1.0)
107
+ thread_safe (~> 0.1)
108
+ uuidtools (2.1.4)
109
+
110
+ PLATFORMS
111
+ ruby
112
+
113
+ DEPENDENCIES
114
+ bundler
115
+ dm-redis-adapter
116
+ feedjira
117
+ i18n
118
+ jeweler (>= 2.0.1)
119
+ shoulda
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011-2014 Logan Koester
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.
@@ -0,0 +1,55 @@
1
+ # feedjira-redis
2
+
3
+ FeedjiraRedis uses Datamapper's dm-redis-adapter to provide a persistance layer for the [feedjira](https://github.com/feedjira/feedjira) RSS/Atom feed consumption library.
4
+
5
+ ## Example Usage
6
+
7
+ FeedjiraRedis can be used in much the same fashion as [feedjira](https://github.com/feedjira/feedjira) itself. One common use for FeedjiraRedis is to avoid updating the feed with every page hit, so you could update the feed from a Rakefile on a cron job instead.
8
+
9
+ #### Shared
10
+
11
+ DataMapper.setup(:default, { :adapter => 'redis' })
12
+ FEED_URL = 'https://github.com/logankoester/feedjira-redis/commits/master.atom'
13
+
14
+ #### Rakefile
15
+
16
+ namespace :blog do
17
+ desc 'Grab the latest blog posts'
18
+ task :update do
19
+ FeedjiraRedis::Feed.fetch_and_parse(FEED_URL)
20
+ end
21
+ end
22
+
23
+ FeedjiraRedis::Feed is actually a Datamapper model that wraps the interface to Feedjira::Feed with some code to add persistence. Feeds are uniquely identified by their `feed_url` property, so when you call `fetch_and_parse` or `update` a second time the new entries are associated with the original feed.
24
+
25
+ Run `rake blog:update` to grab some entries.
26
+
27
+ #### Action
28
+ Now you just need to fetch the object your Rakefile created.
29
+
30
+ `@feed = FeedjiraRedis::Feed.first(:feed_url => FEED_URL)`
31
+
32
+ #### View
33
+ FeedjiraRedis::Entry is also a Datamapper model, but it shares the same properties as Feedjira::Entry.
34
+
35
+ %h1= @feed.title
36
+ - @feed.entries.each do |e|
37
+ %h2= e.title
38
+ %p= e.content
39
+
40
+ See the [Feedjira](https://github.com/feedjira/feedjira) documentation or [read the code](https://github.com/logankoester/feedjira-redis/blob/master/lib/feedjira-redis.rb) (it's short!) for further details.
41
+
42
+ ## Contributing to feedjira-redis
43
+
44
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
45
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
46
+ * Fork the project
47
+ * Start a feature/bugfix branch
48
+ * Commit and push until you are happy with your contribution
49
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
50
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
51
+
52
+ ## Copyright
53
+
54
+ Copyright (c) 2011-2014 Logan Koester. See LICENSE.txt for
55
+ further details.
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "feedjira-redis"
18
+ gem.homepage = "http://github.com/logankoester/feedjira-redis"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Dead simple feed persistance}
21
+ gem.description = %Q{Dead simple feed persistence}
22
+ gem.email = "logan@logankoester.com"
23
+ gem.authors = ["Logan Koester"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rake/testtask'
29
+ Rake::TestTask.new(:test) do |test|
30
+ test.libs << 'lib' << 'test'
31
+ test.pattern = 'test/**/test_*.rb'
32
+ test.verbose = true
33
+ end
34
+
35
+ #require 'simplecov'
36
+ #SimpleCov.configure do |test|
37
+ #Rcov::RcovTask.new do |test|
38
+ # test.libs << 'test'
39
+ # test.pattern = 'test/**/test_*.rb'
40
+ # test.verbose = true
41
+ # test.rcov_opts << '--exclude "gems/*"'
42
+ #end
43
+
44
+ task :default => :test
45
+
46
+ require 'rdoc/task'
47
+ Rake::RDocTask.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "feedjira-redis #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.1
@@ -0,0 +1,68 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "feedjira-redis"
8
+ s.version = "1.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Logan Koester"]
12
+ s.date = "2014-05-21"
13
+ s.description = "Dead simple feed persistence"
14
+ s.email = "logan@logankoester.com"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.markdown"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rvmrc",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.markdown",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "feedjira-redis.gemspec",
29
+ "lib/feedjira-redis.rb",
30
+ "test/fixtures/monkeys_new.atom",
31
+ "test/fixtures/monkeys_old.atom",
32
+ "test/helper.rb",
33
+ "test/test_feedjira-redis.rb"
34
+ ]
35
+ s.homepage = "http://github.com/logankoester/feedjira-redis"
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = "2.0.14"
39
+ s.summary = "Dead simple feed persistance"
40
+
41
+ if s.respond_to? :specification_version then
42
+ s.specification_version = 4
43
+
44
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
45
+ s.add_runtime_dependency(%q<dm-redis-adapter>, [">= 0"])
46
+ s.add_runtime_dependency(%q<feedjira>, [">= 0"])
47
+ s.add_runtime_dependency(%q<i18n>, [">= 0"])
48
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
49
+ s.add_development_dependency(%q<bundler>, [">= 0"])
50
+ s.add_development_dependency(%q<jeweler>, [">= 2.0.1"])
51
+ else
52
+ s.add_dependency(%q<dm-redis-adapter>, [">= 0"])
53
+ s.add_dependency(%q<feedjira>, [">= 0"])
54
+ s.add_dependency(%q<i18n>, [">= 0"])
55
+ s.add_dependency(%q<shoulda>, [">= 0"])
56
+ s.add_dependency(%q<bundler>, [">= 0"])
57
+ s.add_dependency(%q<jeweler>, [">= 2.0.1"])
58
+ end
59
+ else
60
+ s.add_dependency(%q<dm-redis-adapter>, [">= 0"])
61
+ s.add_dependency(%q<feedjira>, [">= 0"])
62
+ s.add_dependency(%q<i18n>, [">= 0"])
63
+ s.add_dependency(%q<shoulda>, [">= 0"])
64
+ s.add_dependency(%q<bundler>, [">= 0"])
65
+ s.add_dependency(%q<jeweler>, [">= 2.0.1"])
66
+ end
67
+ end
68
+
@@ -0,0 +1,81 @@
1
+ %w{rubygems feedjira dm-core dm-redis-adapter}.each { |f| require f }
2
+
3
+ module FeedjiraRedis
4
+
5
+ class Entry
6
+ include DataMapper::Resource
7
+ property :id, Serial
8
+ property :guid, String, :index => true
9
+ property :title, String
10
+ property :url, String
11
+ property :author, String
12
+ property :summary, Text
13
+ property :content, Text
14
+ property :published, Time
15
+
16
+ belongs_to :feed
17
+ end
18
+
19
+ class Feed
20
+ include DataMapper::Resource
21
+ property :id, Serial
22
+ property :title, String
23
+ property :url, String
24
+ property :feed_url, String, :index => true
25
+ property :etag, String
26
+ property :last_modified, DateTime
27
+
28
+ has n, :entries
29
+
30
+ def add_entries(entries)
31
+ entries.each do |entry|
32
+ unique_id = entry.id || entry.url
33
+ redis_entry = Entry.first_or_create( {:guid => unique_id}, {
34
+ :title => entry.title,
35
+ :summary => entry.summary,
36
+ :url => entry.url,
37
+ :published => entry.published,
38
+ :feed => self
39
+ })
40
+ end
41
+ end
42
+
43
+ def self.fetch_and_parse(urls, options = {})
44
+ if urls.is_a?(String)
45
+ feed = Feedjira::Feed.fetch_and_parse(urls, options)
46
+ update_redis_from feed
47
+ elsif urls.is_a?(Array)
48
+ feeds = Feedjira::Feed.fetch_and_parse(urls, options)
49
+ redis_feeds = {}
50
+ feeds.map do |feed|
51
+ redis_feed = update_redis_from feed
52
+ redis_feeds.merge!(redis_feed.feed_url => redis_feed)
53
+ end
54
+ else
55
+ raise "Unexpected urls class #{urls.class}"
56
+ end
57
+ end
58
+
59
+ # Delegate for compatibility
60
+ def self.update(feeds, options = {})
61
+ feeds.is_a?(Array) ? urls = feeds.map { |f| f.feed_url } : urls = feeds.feed_url
62
+ self.fetch_and_parse(urls, options)
63
+ end
64
+
65
+ private
66
+ def self.update_redis_from(feed)
67
+ redis_feed = Feed.first_or_create(:feed_url => feed.feed_url)
68
+ redis_feed.update({
69
+ :title => feed.title,
70
+ :url => feed.url,
71
+ :etag => feed.etag,
72
+ :last_modified => feed.last_modified
73
+ })
74
+ redis_feed.add_entries(feed.entries)
75
+ redis_feed.save
76
+ return redis_feed
77
+ end
78
+ end
79
+ DataMapper.finalize
80
+ end
81
+
@@ -0,0 +1,313 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/">
3
+ <id>tag:search.twitter.com,2005:search/monkeys</id>
4
+ <link type="text/html" href="http://search.twitter.com/search?q=monkeys" rel="alternate"/>
5
+ <link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=monkeys" rel="self"/>
6
+ <title>monkeys - Twitter Search</title>
7
+ <link type="application/opensearchdescription+xml" href="http://search.twitter.com/opensearch.xml" rel="search"/>
8
+ <link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=monkeys&amp;since_id=93416858476232704" rel="refresh"/>
9
+ <twitter:warning>since_id removed for pagination.</twitter:warning>
10
+ <updated>2011-07-19T20:28:09Z</updated>
11
+ <openSearch:itemsPerPage>15</openSearch:itemsPerPage>
12
+ <link type="application/atom+xml" href="http://search.twitter.com/search.atom?max_id=93416858476232704&amp;page=2&amp;q=monkeys" rel="next"/>
13
+ <entry>
14
+ <id>tag:search.twitter.com,2005:93416858476232704</id>
15
+ <published>2011-07-19T20:28:09Z</published>
16
+ <link type="text/html" href="http://twitter.com/Toots_90/statuses/93416858476232704" rel="alternate"/>
17
+ <title>Can't beat a bit of old school Arctic Monkeys.</title>
18
+ <content type="html">Can&amp;apos;t beat a bit of old school Arctic &lt;b&gt;Monkeys&lt;/b&gt;.</content>
19
+ <updated>2011-07-19T20:28:09Z</updated>
20
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1371302215/016w_normal.jpg" rel="image"/>
21
+ <twitter:geo>
22
+ </twitter:geo>
23
+ <twitter:metadata>
24
+ <twitter:result_type>recent</twitter:result_type>
25
+ </twitter:metadata>
26
+ <twitter:source>&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;</twitter:source>
27
+ <twitter:lang>en</twitter:lang>
28
+ <author>
29
+ <name>Toots_90 (Tabi Jones)</name>
30
+ <uri>http://twitter.com/Toots_90</uri>
31
+ </author>
32
+ </entry>
33
+ <entry>
34
+ <id>tag:search.twitter.com,2005:93416857209552896</id>
35
+ <published>2011-07-19T20:28:09Z</published>
36
+ <link type="text/html" href="http://twitter.com/MinnetonkaTwin/statuses/93416857209552896" rel="alternate"/>
37
+ <title>RT @MrBill01: You asked, and yes its true! - http://bit.ly/iyaqwl - I am a #Monkey's #Uncle!!!</title>
38
+ <content type="html">RT &lt;a href=&quot;http://twitter.com/MrBill01&quot;&gt;@MrBill01&lt;/a&gt;: You asked, and yes its true! - &lt;a href=&quot;http://bit.ly/iyaqwl&quot;&gt;http://bit.ly/iyaqwl&lt;/a&gt; - I am a &lt;a href=&quot;http://search.twitter.com/search?q=%23Monkey&quot; onclick=&quot;pageTracker._setCustomVar(2, 'result_type', 'recent', 3);pageTracker._trackPageview('/intra/hashtag/#Monkey');&quot;&gt;#Monkey&lt;/a&gt;&amp;apos;s &lt;a href=&quot;http://search.twitter.com/search?q=%23Uncle&quot; onclick=&quot;pageTracker._setCustomVar(2, 'result_type', 'recent', 3);pageTracker._trackPageview('/intra/hashtag/#Uncle');&quot;&gt;#Uncle&lt;/a&gt;!!!</content>
39
+ <updated>2011-07-19T20:28:09Z</updated>
40
+ <link type="image/png" href="http://a0.twimg.com/profile_images/1286228873/Laura___Linda_004_normal.JPG" rel="image"/>
41
+ <twitter:geo>
42
+ </twitter:geo>
43
+ <twitter:metadata>
44
+ <twitter:result_type>recent</twitter:result_type>
45
+ </twitter:metadata>
46
+ <twitter:source>&lt;a href=&quot;http://www.twaitter.com&quot; rel=&quot;nofollow&quot;&gt;Twaitter&lt;/a&gt;</twitter:source>
47
+ <twitter:lang>en</twitter:lang>
48
+ <author>
49
+ <name>MinnetonkaTwin (Linda Rogers)</name>
50
+ <uri>http://twitter.com/MinnetonkaTwin</uri>
51
+ </author>
52
+ </entry>
53
+ <entry>
54
+ <id>tag:search.twitter.com,2005:93416797512024065</id>
55
+ <published>2011-07-19T20:27:54Z</published>
56
+ <link type="text/html" href="http://twitter.com/wizkhalifeh/statuses/93416797512024065" rel="alternate"/>
57
+ <title>RT @iFucked_Jbarbie: I no longer call girls hoes or bitches. I call them monkeys.</title>
58
+ <content type="html">RT &lt;a href=&quot;http://twitter.com/iFucked_Jbarbie&quot;&gt;@iFucked_Jbarbie&lt;/a&gt;: I no longer call girls hoes or bitches. I call them &lt;b&gt;monkeys&lt;/b&gt;.</content>
59
+ <updated>2011-07-19T20:27:54Z</updated>
60
+ <link type="image/png" href="http://a3.twimg.com/profile_images/1380264334/40547_415279834666_768024666_4671457_3435242_n_normal.jpg" rel="image"/>
61
+ <twitter:geo>
62
+ </twitter:geo>
63
+ <twitter:metadata>
64
+ <twitter:result_type>recent</twitter:result_type>
65
+ </twitter:metadata>
66
+ <twitter:source>&lt;a href=&quot;http://ubersocial.com&quot; rel=&quot;nofollow&quot;&gt;&#220;berSocial for BlackBerry&lt;/a&gt;</twitter:source>
67
+ <twitter:lang>en</twitter:lang>
68
+ <author>
69
+ <name>wizkhalifeh (Michael Khalifeh)</name>
70
+ <uri>http://twitter.com/wizkhalifeh</uri>
71
+ </author>
72
+ </entry>
73
+ <entry>
74
+ <id>tag:search.twitter.com,2005:93416771427635200</id>
75
+ <published>2011-07-19T20:27:48Z</published>
76
+ <link type="text/html" href="http://twitter.com/Wonderland_ESA/statuses/93416771427635200" rel="alternate"/>
77
+ <title>RT @JodiWonderland: Yay!!! Birthday week starts today with rescue Monkeys!!! All my little monkeys taking me to see real little monkeys! Love it!!! Xxxx</title>
78
+ <content type="html">RT &lt;a href=&quot;http://twitter.com/JodiWonderland&quot;&gt;@JodiWonderland&lt;/a&gt;: Yay!!! Birthday week starts today with rescue &lt;b&gt;Monkeys&lt;/b&gt;!!! All my little &lt;b&gt;monkeys&lt;/b&gt; taking me to see real little &lt;b&gt;monkeys&lt;/b&gt;! Love it!!! Xxxx</content>
79
+ <updated>2011-07-19T20:27:48Z</updated>
80
+ <link type="image/png" href="http://a2.twimg.com/profile_images/1434781989/nuevo_avatar_normal.jpg" rel="image"/>
81
+ <twitter:geo>
82
+ </twitter:geo>
83
+ <twitter:metadata>
84
+ <twitter:result_type>recent</twitter:result_type>
85
+ </twitter:metadata>
86
+ <twitter:source>&lt;a href=&quot;http://www.echofon.com/&quot; rel=&quot;nofollow&quot;&gt;Echofon&lt;/a&gt;</twitter:source>
87
+ <twitter:lang>en</twitter:lang>
88
+ <author>
89
+ <name>Wonderland_ESA (Wondies El Salvador)</name>
90
+ <uri>http://twitter.com/Wonderland_ESA</uri>
91
+ </author>
92
+ </entry>
93
+ <entry>
94
+ <id>tag:search.twitter.com,2005:93416728360534020</id>
95
+ <published>2011-07-19T20:27:38Z</published>
96
+ <link type="text/html" href="http://twitter.com/KlrTwiLuver/statuses/93416728360534020" rel="alternate"/>
97
+ <title>@SunnySnark @quantumfizzx Just heard from @foundmyedward that 100 Monkeys is inKCMO on Aug 11. What ya say??</title>
98
+ <content type="html">&lt;a href=&quot;http://twitter.com/SunnySnark&quot;&gt;@SunnySnark&lt;/a&gt; &lt;a href=&quot;http://twitter.com/quantumfizzx&quot;&gt;@quantumfizzx&lt;/a&gt; Just heard from &lt;a href=&quot;http://twitter.com/foundmyedward&quot;&gt;@foundmyedward&lt;/a&gt; that 100 &lt;b&gt;Monkeys&lt;/b&gt; is inKCMO on Aug 11. What ya say??</content>
99
+ <updated>2011-07-19T20:27:38Z</updated>
100
+ <link type="image/png" href="http://a2.twimg.com/profile_images/1448216508/image_normal.jpg" rel="image"/>
101
+ <twitter:geo>
102
+ </twitter:geo>
103
+ <twitter:metadata>
104
+ <twitter:result_type>recent</twitter:result_type>
105
+ </twitter:metadata>
106
+ <twitter:source>&lt;a href=&quot;http://twitter.com/#!/download/iphone&quot; rel=&quot;nofollow&quot;&gt;Twitter for iPhone&lt;/a&gt;</twitter:source>
107
+ <twitter:lang>en</twitter:lang>
108
+ <author>
109
+ <name>KlrTwiLuver (KlrTwiLuver)</name>
110
+ <uri>http://twitter.com/KlrTwiLuver</uri>
111
+ </author>
112
+ </entry>
113
+ <entry>
114
+ <id>tag:search.twitter.com,2005:93416711990165505</id>
115
+ <published>2011-07-19T20:27:34Z</published>
116
+ <link type="text/html" href="http://twitter.com/poxamario/statuses/93416711990165505" rel="alternate"/>
117
+ <title>Arctic Monkeys diz: SHALALALALAAAAAAAA</title>
118
+ <content type="html">Arctic &lt;b&gt;Monkeys&lt;/b&gt; diz: SHALALALALAAAAAAAA</content>
119
+ <updated>2011-07-19T20:27:34Z</updated>
120
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1445779110/100_7524tt_normal.jpg" rel="image"/>
121
+ <twitter:geo>
122
+ </twitter:geo>
123
+ <twitter:metadata>
124
+ <twitter:result_type>recent</twitter:result_type>
125
+ </twitter:metadata>
126
+ <twitter:source>&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;</twitter:source>
127
+ <twitter:lang>in</twitter:lang>
128
+ <author>
129
+ <name>poxamario (M. San)</name>
130
+ <uri>http://twitter.com/poxamario</uri>
131
+ </author>
132
+ </entry>
133
+ <entry>
134
+ <id>tag:search.twitter.com,2005:93416678913884161</id>
135
+ <published>2011-07-19T20:27:26Z</published>
136
+ <link type="text/html" href="http://twitter.com/CrapSandviche/statuses/93416678913884161" rel="alternate"/>
137
+ <title>@travisrodgers So NO MOVIES WITH MONKEYS. what about Cowboys vs Aliens. Thanks.</title>
138
+ <content type="html">&lt;a href=&quot;http://twitter.com/travisrodgers&quot;&gt;@travisrodgers&lt;/a&gt; So NO MOVIES WITH &lt;b&gt;MONKEYS&lt;/b&gt;. what about Cowboys vs Aliens. Thanks.</content>
139
+ <updated>2011-07-19T20:27:26Z</updated>
140
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1431201706/RobertCrap2_normal.jpg" rel="image"/>
141
+ <twitter:geo>
142
+ </twitter:geo>
143
+ <twitter:metadata>
144
+ <twitter:result_type>recent</twitter:result_type>
145
+ </twitter:metadata>
146
+ <twitter:source>&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;</twitter:source>
147
+ <twitter:lang>en</twitter:lang>
148
+ <author>
149
+ <name>CrapSandviche (#1 Fan of Neagli)</name>
150
+ <uri>http://twitter.com/CrapSandviche</uri>
151
+ </author>
152
+ </entry>
153
+ <entry>
154
+ <id>tag:search.twitter.com,2005:93416625633632256</id>
155
+ <published>2011-07-19T20:27:13Z</published>
156
+ <link type="text/html" href="http://twitter.com/cocteaulab/statuses/93416625633632256" rel="alternate"/>
157
+ <title>RT @juangallagher: Muchas bandas quisieran un Baterista como Matt Helders de los Arctic Monkeys, que bueno es ese cabron.</title>
158
+ <content type="html">RT &lt;a href=&quot;http://twitter.com/juangallagher&quot;&gt;@juangallagher&lt;/a&gt;: Muchas bandas quisieran un Baterista como Matt Helders de los Arctic &lt;b&gt;Monkeys&lt;/b&gt;, que bueno es ese cabron.</content>
159
+ <updated>2011-07-19T20:27:13Z</updated>
160
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1241377562/Copia_de__DSC0028Total_normal.jpg" rel="image"/>
161
+ <twitter:geo>
162
+ </twitter:geo>
163
+ <twitter:metadata>
164
+ <twitter:result_type>recent</twitter:result_type>
165
+ </twitter:metadata>
166
+ <twitter:source>&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;</twitter:source>
167
+ <twitter:lang>es</twitter:lang>
168
+ <author>
169
+ <name>cocteaulab (Jean C. Rivadeneira)</name>
170
+ <uri>http://twitter.com/cocteaulab</uri>
171
+ </author>
172
+ </entry>
173
+ <entry>
174
+ <id>tag:search.twitter.com,2005:93416617517662208</id>
175
+ <published>2011-07-19T20:27:11Z</published>
176
+ <link type="text/html" href="http://twitter.com/perceptionalize/statuses/93416617517662208" rel="alternate"/>
177
+ <title>monkeys and copyright... http://huff.to/o6ySUs</title>
178
+ <content type="html">&lt;b&gt;monkeys&lt;/b&gt; and copyright... &lt;a href=&quot;http://huff.to/o6ySUs&quot;&gt;http://huff.to/o6ySUs&lt;/a&gt;</content>
179
+ <updated>2011-07-19T20:27:11Z</updated>
180
+ <link type="image/png" href="http://a2.twimg.com/profile_images/1184639208/Unbenannt-1_normal.jpg" rel="image"/>
181
+ <twitter:geo>
182
+ </twitter:geo>
183
+ <twitter:metadata>
184
+ <twitter:result_type>recent</twitter:result_type>
185
+ </twitter:metadata>
186
+ <twitter:source>&lt;a href=&quot;http://www.tweetdeck.com&quot; rel=&quot;nofollow&quot;&gt;TweetDeck&lt;/a&gt;</twitter:source>
187
+ <twitter:lang>en</twitter:lang>
188
+ <author>
189
+ <name>perceptionalize (Maria Schreiber)</name>
190
+ <uri>http://twitter.com/perceptionalize</uri>
191
+ </author>
192
+ </entry>
193
+ <entry>
194
+ <id>tag:search.twitter.com,2005:93416611993747456</id>
195
+ <published>2011-07-19T20:27:10Z</published>
196
+ <link type="text/html" href="http://twitter.com/EvaEvsEva/statuses/93416611993747456" rel="alternate"/>
197
+ <title>Photoset: fuckyeaharcticmonkeys: http://tumblr.com/xjz3l8gju8</title>
198
+ <content type="html">Photoset: fuckyeaharcticmonkeys: &lt;a href=&quot;http://tumblr.com/xjz3l8gju8&quot;&gt;http://tumblr.com/xjz3l8gju8&lt;/a&gt;</content>
199
+ <updated>2011-07-19T20:27:10Z</updated>
200
+ <link type="image/png" href="http://a3.twimg.com/profile_images/1440117754/DSC02724__479x640__normal.jpg" rel="image"/>
201
+ <twitter:geo>
202
+ </twitter:geo>
203
+ <twitter:metadata>
204
+ <twitter:result_type>recent</twitter:result_type>
205
+ </twitter:metadata>
206
+ <twitter:source>&lt;a href=&quot;http://www.tumblr.com/&quot; rel=&quot;nofollow&quot;&gt;Tumblr&lt;/a&gt;</twitter:source>
207
+ <twitter:lang>fr</twitter:lang>
208
+ <author>
209
+ <name>EvaEvsEva (Eva Paula )</name>
210
+ <uri>http://twitter.com/EvaEvsEva</uri>
211
+ </author>
212
+ </entry>
213
+ <entry>
214
+ <id>tag:search.twitter.com,2005:93416597934456832</id>
215
+ <published>2011-07-19T20:27:07Z</published>
216
+ <link type="text/html" href="http://twitter.com/rachelleannee/statuses/93416597934456832" rel="alternate"/>
217
+ <title>LOL Kathleen's dream about monkeys</title>
218
+ <content type="html">LOL Kathleen&amp;apos;s dream about &lt;b&gt;monkeys&lt;/b&gt;</content>
219
+ <updated>2011-07-19T20:27:07Z</updated>
220
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1432495459/Picture0222_normal.jpg" rel="image"/>
221
+ <twitter:geo>
222
+ </twitter:geo>
223
+ <twitter:metadata>
224
+ <twitter:result_type>recent</twitter:result_type>
225
+ </twitter:metadata>
226
+ <twitter:source>&lt;a href=&quot;http://twitter.com/devices&quot; rel=&quot;nofollow&quot;&gt;txt&lt;/a&gt;</twitter:source>
227
+ <twitter:lang>en</twitter:lang>
228
+ <author>
229
+ <name>rachelleannee (Rachelle A. Rivera)</name>
230
+ <uri>http://twitter.com/rachelleannee</uri>
231
+ </author>
232
+ </entry>
233
+ <entry>
234
+ <id>tag:search.twitter.com,2005:93416567165026304</id>
235
+ <published>2011-07-19T20:26:59Z</published>
236
+ <link type="text/html" href="http://twitter.com/tfalls13/statuses/93416567165026304" rel="alternate"/>
237
+ <title>@Cubanaaa_ @bigwilli69 You may act white..but just know that between the both of yall #mixedpeople on us &quot;porch monkeys&quot;.</title>
238
+ <content type="html">&lt;a href=&quot;http://twitter.com/Cubanaaa_&quot;&gt;@Cubanaaa_&lt;/a&gt; &lt;a href=&quot;http://twitter.com/bigwilli69&quot;&gt;@bigwilli69&lt;/a&gt; You may act white..but just know that between the both of yall &lt;a href=&quot;http://search.twitter.com/search?q=%23mixedpeople&quot; onclick=&quot;pageTracker._setCustomVar(2, 'result_type', 'recent', 3);pageTracker._trackPageview('/intra/hashtag/#mixedpeople');&quot;&gt;#mixedpeople&lt;/a&gt; on us &amp;quot;porch &lt;b&gt;monkeys&lt;/b&gt;&amp;quot;.</content>
239
+ <updated>2011-07-19T20:26:59Z</updated>
240
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1433774027/2SVCbC4R_normal" rel="image"/>
241
+ <twitter:geo>
242
+ </twitter:geo>
243
+ <twitter:metadata>
244
+ <twitter:result_type>recent</twitter:result_type>
245
+ </twitter:metadata>
246
+ <twitter:source>&lt;a href=&quot;http://twitter.com/download/android&quot; rel=&quot;nofollow&quot;&gt;Twitter for Android&lt;/a&gt;</twitter:source>
247
+ <twitter:lang>en</twitter:lang>
248
+ <author>
249
+ <name>tfalls13 (Trent Falls )</name>
250
+ <uri>http://twitter.com/tfalls13</uri>
251
+ </author>
252
+ </entry>
253
+ <entry>
254
+ <id>tag:search.twitter.com,2005:93416537817485312</id>
255
+ <published>2011-07-19T20:26:52Z</published>
256
+ <link type="text/html" href="http://twitter.com/andyohara52/statuses/93416537817485312" rel="alternate"/>
257
+ <title>The three wise monkeys. Not me. Not me and Not me. Cant see Cant hear Cant speak</title>
258
+ <content type="html">The three wise &lt;b&gt;monkeys&lt;/b&gt;. Not me. Not me and Not me. Cant see Cant hear Cant speak</content>
259
+ <updated>2011-07-19T20:26:52Z</updated>
260
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1368528953/63474592352032250_normal.jpg" rel="image"/>
261
+ <twitter:geo>
262
+ </twitter:geo>
263
+ <twitter:metadata>
264
+ <twitter:result_type>recent</twitter:result_type>
265
+ </twitter:metadata>
266
+ <twitter:source>&lt;a href=&quot;http://www.snaptu.com&quot; rel=&quot;nofollow&quot;&gt;Snaptu&lt;/a&gt;</twitter:source>
267
+ <twitter:lang>en</twitter:lang>
268
+ <author>
269
+ <name>andyohara52 (andrew ohara)</name>
270
+ <uri>http://twitter.com/andyohara52</uri>
271
+ </author>
272
+ </entry>
273
+ <entry>
274
+ <id>tag:search.twitter.com,2005:93416516598505472</id>
275
+ <published>2011-07-19T20:26:47Z</published>
276
+ <link type="text/html" href="http://twitter.com/Mr_Blackett/statuses/93416516598505472" rel="alternate"/>
277
+ <title>Monkeys are the coolest animals.</title>
278
+ <content type="html">&lt;b&gt;Monkeys&lt;/b&gt; are the coolest animals.</content>
279
+ <updated>2011-07-19T20:26:47Z</updated>
280
+ <link type="image/png" href="http://a1.twimg.com/profile_images/1449526393/b4_normal.jpg" rel="image"/>
281
+ <twitter:geo>
282
+ </twitter:geo>
283
+ <twitter:metadata>
284
+ <twitter:result_type>recent</twitter:result_type>
285
+ </twitter:metadata>
286
+ <twitter:source>&lt;a href=&quot;http://twitter.com/&quot;&gt;web&lt;/a&gt;</twitter:source>
287
+ <twitter:lang>en</twitter:lang>
288
+ <author>
289
+ <name>Mr_Blackett (Brennon Blackett)</name>
290
+ <uri>http://twitter.com/Mr_Blackett</uri>
291
+ </author>
292
+ </entry>
293
+ <entry>
294
+ <id>tag:search.twitter.com,2005:93416506418925568</id>
295
+ <published>2011-07-19T20:26:45Z</published>
296
+ <link type="text/html" href="http://twitter.com/muzza299/statuses/93416506418925568" rel="alternate"/>
297
+ <title>@chiefie @bebe33 @ronindotca timing is everything. NZ's always last on the list. Unless it's in beta. Then we're the test-monkeys.</title>
298
+ <content type="html">&lt;a href=&quot;http://twitter.com/chiefie&quot;&gt;@chiefie&lt;/a&gt; &lt;a href=&quot;http://twitter.com/bebe33&quot;&gt;@bebe33&lt;/a&gt; &lt;a href=&quot;http://twitter.com/ronindotca&quot;&gt;@ronindotca&lt;/a&gt; timing is everything. NZ&amp;apos;s always last on the list. Unless it&amp;apos;s in beta. Then we&amp;apos;re the test-&lt;b&gt;monkeys&lt;/b&gt;.</content>
299
+ <updated>2011-07-19T20:26:45Z</updated>
300
+ <link type="image/png" href="http://a3.twimg.com/profile_images/1282082203/muzza299_normal.jpeg" rel="image"/>
301
+ <twitter:geo>
302
+ </twitter:geo>
303
+ <twitter:metadata>
304
+ <twitter:result_type>recent</twitter:result_type>
305
+ </twitter:metadata>
306
+ <twitter:source>&lt;a href=&quot;http://www.osfoora.com&quot; rel=&quot;nofollow&quot;&gt;Osfoora for iPhone&lt;/a&gt;</twitter:source>
307
+ <twitter:lang>en</twitter:lang>
308
+ <author>
309
+ <name>muzza299 (Hugh McCracken)</name>
310
+ <uri>http://twitter.com/muzza299</uri>
311
+ </author>
312
+ </entry>
313
+ </feed>