bradgessler-birdfeed 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.txt ADDED
@@ -0,0 +1,38 @@
1
+ = BirdFeed - A dead simple RSS/Atom reader
2
+
3
+ BirdFeed is a well tested RSS parsing library that uses the
4
+ Nokogiri XML parser in an attempt to normalize the concept of an
5
+ Atom and RSS feed. We wrote this library to solve the problem of
6
+ consuming several different feed types for a moderation tool.
7
+
8
+ There are a few things that currently suck about BirdFeed. First,
9
+ we haven't used this code enough to iron out design flaws. Second,
10
+ there documentation is nil. I sacrificed documentation in favor
11
+ of spec tests because I was simply too short on time.
12
+
13
+ Abandon all hope ye who enter!
14
+
15
+ == LICENSE:
16
+
17
+ The MIT License
18
+
19
+ Copyright (c) 2009 Brad Gessler
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining
22
+ a copy of this software and associated documentation files (the
23
+ 'Software'), to deal in the Software without restriction, including
24
+ without limitation the rights to use, copy, modify, merge, publish,
25
+ distribute, sublicense, and/or sell copies of the Software, and to
26
+ permit persons to whom the Software is furnished to do so, subject to
27
+ the following conditions:
28
+
29
+ The above copyright notice and this permission notice shall be
30
+ included in all copies or substantial portions of the Software.
31
+
32
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
33
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
35
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
36
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
37
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
38
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :minor: 1
3
+ :patch: 2
4
+ :major: 0
@@ -0,0 +1,17 @@
1
+ module BirdFeed
2
+ class Feed
3
+ attr_accessor :title, :link, :description, :updated_at, :publisher, :xml, :items, :raw_content
4
+
5
+ def initialize(format, &block)
6
+ @items = []
7
+ @format = format
8
+ yield self if block_given?
9
+ end
10
+
11
+ class << self
12
+ def parse(content)
13
+ Format.detect(content).parse(content)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,45 @@
1
+ require 'nokogiri'
2
+
3
+ module BirdFeed
4
+ class Atom10 < Format
5
+ attr_reader :xml, :doc
6
+
7
+ def initialize(xml)
8
+ @xml = xml
9
+ @doc = Nokogiri::XML(xml)
10
+ end
11
+
12
+ class << self
13
+ def format
14
+ "Atom 1.0"
15
+ end
16
+
17
+ def parse(content)
18
+ Nokogiri::parse(content) do |xml|
19
+ return Feed.new(self) do |feed|
20
+ feed.raw_content = content
21
+ feed.title = xml.css('feed > title').text
22
+ feed.description = xml.css('feed > subtitle').text
23
+ feed.link = xml.css('feed > link').first.get_attribute('href')
24
+ feed.updated_at = xml.css('feed > updated').text
25
+ xml.css('feed > entry').each do |item_node|
26
+ feed.items << Item.new do |item|
27
+ item.xml = item_node.to_xml
28
+ item.node = item_node
29
+ item.title = item_node.css('title').text
30
+ item.description = item_node.css('content').text
31
+ item.link = item_node.css('link').attr('href')
32
+ item.id = item_node.css('id').text
33
+ item.author = item_node.css('author > name').text
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ def valid?(xml)
41
+ not Nokogiri::parse(xml).search('feed[xmlns="http://www.w3.org/2005/Atom"]').empty?
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,37 @@
1
+ require 'nokogiri'
2
+
3
+ module BirdFeed
4
+ class Rss20 < Format
5
+ class << self
6
+ def format
7
+ "RSS 2.0"
8
+ end
9
+
10
+ def parse(content)
11
+ Nokogiri::parse(content) do |xml|
12
+ return Feed.new(self) do |feed|
13
+ feed.raw_content = content
14
+ feed.title = xml.css('rss > channel > title').text
15
+ feed.description = xml.css('rss > channel > description').text
16
+ feed.link = xml.css('rss > channel > link').text
17
+ feed.updated_at = xml.css('rss > channel > pubDate').text
18
+ xml.css('rss > channel item').each do |item_node|
19
+ feed.items << Item.new do |item|
20
+ item.xml = item_node.to_xml
21
+ item.node = item_node
22
+ item.title = item_node.css('title').text
23
+ item.description = item_node.css('description').text
24
+ item.link = item_node.css('link').text
25
+ item.id = item_node.css('guid').text
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def valid?(content)
33
+ not Nokogiri::parse(content).css('rss[version="2.0"]').empty?
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,27 @@
1
+ module BirdFeed
2
+ class Format
3
+ class << self
4
+ @@registered_formats = []
5
+
6
+ # Grab all of the sub classes and work our way up...
7
+ def detect(content)
8
+ @@registered_formats.detect do |format|
9
+ format.valid?(content)
10
+ end
11
+ end
12
+
13
+ # Add a format to the registered formats list.
14
+ def register(format)
15
+ @@registered_formats << format
16
+ end
17
+
18
+ # Return a list of formats available in BirdFeed
19
+ def registered_formats
20
+ @@registered_formats
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ Dir.glob(File.join(File.dirname(__FILE__), %w[format *.rb])).each {|file| require file }
27
+ Dir.glob(File.join(File.dirname(__FILE__), %w[formats])).each {|file| require file }
@@ -0,0 +1,4 @@
1
+ module BirdFeed
2
+ Format.register(Rss20)
3
+ Format.register(Atom10)
4
+ end
@@ -0,0 +1,9 @@
1
+ module BirdFeed
2
+ class Item
3
+ attr_accessor :node, :xml, :title, :link, :description, :published_at, :id, :author
4
+
5
+ def initialize(&block)
6
+ yield self if block_given?
7
+ end
8
+ end
9
+ end
data/lib/birdfeed.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ Dir.glob(File.join(File.dirname(__FILE__), %w[birdfeed *.rb])).each {|file| require file }
3
+
4
+ module BirdFeed
5
+ end
@@ -0,0 +1,99 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+ <?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://rss.cnn.com/~d/styles/itemcontent.css"?><rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel>
3
+ <title>CNN.com</title>
4
+ <link>http://www.cnn.com/?eref=rss_topstories</link>
5
+ <description>CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.</description>
6
+ <language>en-us</language>
7
+ <copyright>� 2009 Cable News Network LP, LLLP.</copyright>
8
+ <pubDate>Thu, 29 Jan 2009 14:19:49 EST</pubDate>
9
+ <ttl>5</ttl>
10
+ <image>
11
+ <title>CNN.com</title>
12
+ <link>http://www.cnn.com/?eref=rss_topstories</link>
13
+ <url>http://i2.cdn.turner.com/cnn/.element/img/1.0/logo/cnn.logo.rss.gif</url>
14
+ <width>144</width>
15
+ <height>33</height>
16
+ <description>CNN.com delivers up-to-the-minute news and information on the latest top stories, weather, entertainment, politics and more.</description>
17
+ </image>
18
+ <thespringbox:skin xmlns:thespringbox="http://www.thespringbox.com/dtds/thespringbox-1.0.dtd">http://rss.cnn.com/rss/cnn_topstories?format=skin</thespringbox:skin><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://rss.cnn.com/rss/cnn_topstories" type="application/rss+xml" /><item>
19
+ <title>Recession lands men in 'Devil's Cave'</title>
20
+ <guid isPermaLink="false">http://www.cnn.com/2009/US/01/29/porch.cave/index.html?eref=rss_topstories</guid>
21
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/wpPskrTYfzg/index.html</link>
22
+ <description>Enter the "Devil's Cave" by pulling aside the wooden grate beneath the porch of the abandoned suburban New Jersey home. Crawl inside to see the filthy, mismatched blankets and the garbage and empty soda and alcohol bottles strewn about. Catch your breath against the smell. For a group of Latin American men, the "Devil's Cave" was home for as they hunted work in tough economic times.&lt;div class="feedflare"&gt;
23
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=SIaGsT6i"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=JBWjNt7z"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=rVmfJCHX"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=rVmfJCHX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=rkhzE0Kt"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=yJU3Qhxm"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=yJU3Qhxm" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
24
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/wpPskrTYfzg" height="1" width="1"/&gt;</description>
25
+ <pubDate>Thu, 29 Jan 2009 14:10:13 EST</pubDate>
26
+ <feedburner:origLink>http://www.cnn.com/2009/US/01/29/porch.cave/index.html?eref=rss_topstories</feedburner:origLink></item>
27
+ <item>
28
+ <title>Ohio family of 4 found dead</title>
29
+ <guid isPermaLink="false">http://www.cnn.com/2009/CRIME/01/29/ohio.family.dead/index.html?eref=rss_topstories</guid>
30
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/9dKD1x6bcCc/index.html</link>
31
+ <description>A family of four has been found dead in a Whitehall, Ohio, home, in what's believed to be a murder-suicide, authorities said Thursday.&lt;div class="feedflare"&gt;
32
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=nNokrAdc"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=TxrIH0gx"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=QUGXvOFG"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=QUGXvOFG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=hcMb9pNI"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=BxAZ7lAW"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=BxAZ7lAW" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
33
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/9dKD1x6bcCc" height="1" width="1"/&gt;</description>
34
+ <pubDate>Thu, 29 Jan 2009 14:09:19 EST</pubDate>
35
+ <feedburner:origLink>http://www.cnn.com/2009/CRIME/01/29/ohio.family.dead/index.html?eref=rss_topstories</feedburner:origLink></item>
36
+ <item>
37
+ <title>Blagojevich: How can you throw me out?</title>
38
+ <guid isPermaLink="false">http://www.cnn.com/2009/POLITICS/01/29/illinois.governor/index.html?eref=rss_topstories</guid>
39
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/SDXUfcaZvMQ/index.html</link>
40
+ <description>Illinois Gov. Rod Blagojevich appeared before state senators today for the first time during his impeachment trial, saying he has done nothing wrong. "How can you throw a governor out of office who is clamoring and begging and pleading with you to give him a chance to bring witnesses in, to prove his innocence?" Blagojevich asked lawmakers.&lt;div class="feedflare"&gt;
41
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=hftdIvZV"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=9uDvbNac"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=0DqMA50Y"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=0DqMA50Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=l3s1ioBR"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=ZdHKjPWX"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=ZdHKjPWX" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
42
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/SDXUfcaZvMQ" height="1" width="1"/&gt;</description>
43
+ <pubDate>Thu, 29 Jan 2009 13:27:02 EST</pubDate>
44
+ <feedburner:origLink>http://www.cnn.com/2009/POLITICS/01/29/illinois.governor/index.html?eref=rss_topstories</feedburner:origLink></item>
45
+ <item>
46
+ <title>Brush with death helps couple get money-smart</title>
47
+ <guid isPermaLink="false">http://www.cnn.com/2009/LIVING/01/29/survival.wk2.devores/index.html?eref=rss_topstories</guid>
48
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/gOMqam9dgr4/index.html</link>
49
+ <description>At age 23 and just out of college, Eliot Kohan was diagnosed with leukemia. He was told he had four months to live. He survived. But he and his wife were left with thousands of dollars in medical bills. Their struggles taught them an important lesson in saving money. Now, learning to live frugally is paying off in today's economy.&lt;div class="feedflare"&gt;
50
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=ySakpqiV"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=PoPIhdZF"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=ra8VuCPO"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=ra8VuCPO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=4ER0LSUA"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=RcSr6xNu"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=RcSr6xNu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
51
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/gOMqam9dgr4" height="1" width="1"/&gt;</description>
52
+ <pubDate>Thu, 29 Jan 2009 11:16:01 EST</pubDate>
53
+ <feedburner:origLink>http://www.cnn.com/2009/LIVING/01/29/survival.wk2.devores/index.html?eref=rss_topstories</feedburner:origLink></item>
54
+ <item>
55
+ <title>'Perfect storm' led to current economic crisis</title>
56
+ <guid isPermaLink="false">http://www.cnn.com/2009/US/01/29/economic.crisis.explainer/index.html?eref=rss_topstories</guid>
57
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/VAy5-qzVmBI/index.html</link>
58
+ <description>The U.S. economy is clearly in terrible shape. What is less clear is how we got here.&lt;div class="feedflare"&gt;
59
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=nTJmSCkF"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=ydcZsi7z"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=21uhvAgS"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=21uhvAgS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=ZW7Zh3Ml"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=CRQWKIse"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=CRQWKIse" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
60
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/VAy5-qzVmBI" height="1" width="1"/&gt;</description>
61
+ <pubDate>Thu, 29 Jan 2009 07:59:02 EST</pubDate>
62
+ <feedburner:origLink>http://www.cnn.com/2009/US/01/29/economic.crisis.explainer/index.html?eref=rss_topstories</feedburner:origLink></item>
63
+ <item>
64
+ <title>Clark Howard: How to get a great car deal</title>
65
+ <guid isPermaLink="false">http://www.cnn.com/2009/LIVING/personal/01/29/clark.howard.cars/index.html?eref=rss_topstories</guid>
66
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/dETdNDXibYc/index.html</link>
67
+ <description>Cars are such a deal right now that you might feel you are stealing when you buy one. Dealers have no customers, regardless of the price point, brand, style or size. Americans are afraid to buy because of the scary headlines and the times we are in right now.&lt;div class="feedflare"&gt;
68
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=OE6End15"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=Axr3yAS3"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=vD2ZaVpa"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=vD2ZaVpa" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=aWcexziI"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=dFSxVlyl"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=dFSxVlyl" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
69
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/dETdNDXibYc" height="1" width="1"/&gt;</description>
70
+ <pubDate>Thu, 29 Jan 2009 13:02:45 EST</pubDate>
71
+ <feedburner:origLink>http://www.cnn.com/2009/LIVING/personal/01/29/clark.howard.cars/index.html?eref=rss_topstories</feedburner:origLink></item>
72
+ <item>
73
+ <title>Alaska volcano may erupt soon</title>
74
+ <guid isPermaLink="false">http://www.cnn.com/2009/TECH/science/01/29/alaska.volcano/index.html?eref=rss_topstories</guid>
75
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/AHLfxCAcof0/index.html</link>
76
+ <description>A volcano in south-central Alaska could erupt within days or weeks. The level of seismic activity has increased markedly in recent days on Mount Redoubt, according to the Alaska Volcano Observatory. "We expect based on the past behavior of this volcano that this activity is going to culminate in an eruption," said Peter Cervelli, a research geophysicist with the observatory.&lt;div class="feedflare"&gt;
77
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=yObM1AoY"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=dJSMQLQ3"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=oSkkifdy"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=oSkkifdy" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=SqGM8rxY"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=Dx5fMc4s"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=Dx5fMc4s" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
78
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/AHLfxCAcof0" height="1" width="1"/&gt;</description>
79
+ <pubDate>Thu, 29 Jan 2009 13:18:14 EST</pubDate>
80
+ <feedburner:origLink>http://www.cnn.com/2009/TECH/science/01/29/alaska.volcano/index.html?eref=rss_topstories</feedburner:origLink></item>
81
+ <item>
82
+ <title>Discovery may keep millions from going hungry</title>
83
+ <guid isPermaLink="false">http://www.cnn.com/2009/TECH/science/01/29/waterproof.rice/index.html?eref=rss_topstories</guid>
84
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/pLzHFVooVDk/index.html</link>
85
+ <description>If every scientist hopes to make at least one important discovery in her career, then University of California-Davis professor Pamela Ronald and her colleagues may have hit the jackpot.&lt;div class="feedflare"&gt;
86
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=qTxMnKR3"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=rDosjSEb"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=dVy0ThGz"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=dVy0ThGz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=c0weMc7v"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=sACa6wDY"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=sACa6wDY" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
87
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/pLzHFVooVDk" height="1" width="1"/&gt;</description>
88
+ <pubDate>Thu, 29 Jan 2009 10:32:57 EST</pubDate>
89
+ <feedburner:origLink>http://www.cnn.com/2009/TECH/science/01/29/waterproof.rice/index.html?eref=rss_topstories</feedburner:origLink></item>
90
+ <item>
91
+ <title>Sepsis can strike, kill shockingly fast</title>
92
+ <guid isPermaLink="false">http://www.cnn.com/2009/HEALTH/01/29/ep.sepsis.infection/index.html?eref=rss_topstories</guid>
93
+ <link>http://rss.cnn.com/~r/rss/cnn_topstories/~3/ntr-g_QwF6A/index.html</link>
94
+ <description>One look at her photo, and you can't help but ask: How could someone so young and vibrant die so quickly from an infection?&lt;div class="feedflare"&gt;
95
+ &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=wvDOTr6L"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=VIb57tdZ"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=50" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=UnYd6Bl5"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=UnYd6Bl5" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=bD3rqNFY"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://rss.cnn.com/~f/rss/cnn_topstories?a=8Vupfife"&gt;&lt;img src="http://feeds2.feedburner.com/~f/rss/cnn_topstories?i=8Vupfife" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
96
+ &lt;/div&gt;&lt;img src="http://feeds2.feedburner.com/~r/rss/cnn_topstories/~4/ntr-g_QwF6A" height="1" width="1"/&gt;</description>
97
+ <pubDate>Thu, 29 Jan 2009 13:15:30 EST</pubDate>
98
+ <feedburner:origLink>http://www.cnn.com/2009/HEALTH/01/29/ep.sepsis.infection/index.html?eref=rss_topstories</feedburner:origLink></item>
99
+ </channel></rss>