<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: reader code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 03:14:24 GMT</pubDate>
    <description>DZone Snippets: reader code</description>
    <item>
      <title>A simple RSS Reader and Podcatcher</title>
      <link>http://snippets.dzone.com/posts/show/4713</link>
      <description>Written in Ruby this class reads an RSS feed and downloads the latest enclosure if it exists.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;require 'rss/1.0'&lt;br /&gt;require 'rss/2.0'&lt;br /&gt;require 'open-uri'&lt;br /&gt;require 'open-uri'&lt;br /&gt;&lt;br /&gt;class Rssreader&lt;br /&gt;  def initialize(url)&lt;br /&gt;    source = url # url or local file&lt;br /&gt;    content = "" # raw content of rss feed will be loaded here&lt;br /&gt;    open(source) do |s| content = s.read end&lt;br /&gt;    @rss = RSS::Parser.parse(content, false)&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  # returns the first 3 titles from the rss feed&lt;br /&gt;  def get_summary()&lt;br /&gt;    buffer = '['&lt;br /&gt;    for i in 0..2&lt;br /&gt;      buffer += @rss.items[i.to_i].title + ' | '&lt;br /&gt;    end      &lt;br /&gt;    buffer.slice(0,buffer.length-3) + ']'&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def enclosure?&lt;br /&gt;    @rss.items.to_s.scan('&lt;enclosure').length &gt; 0&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def get_enclosure_url&lt;br /&gt;    enclosure = @rss.items[0].enclosure&lt;br /&gt;    enclosure.url&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def rwget(url, filename)&lt;br /&gt;    file = File.new(filename, 'w')&lt;br /&gt;    file.puts open(url, 'User-Agent' =&gt; 'Ruby-wget').read&lt;br /&gt;  end&lt;br /&gt;&lt;br /&gt;  def download_enclosure()&lt;br /&gt;    if self.enclosure? then&lt;br /&gt;      enclosure_url = self.get_enclosure_url()&lt;br /&gt;      local_filename = File.basename(enclosure_url)&lt;br /&gt;      #puts local_filename&lt;br /&gt;      if not File.exist?(local_filename) then&lt;br /&gt;        puts 'downloading enclosure ...'&lt;br /&gt;        self.rwget(enclosure_url, local_filename)&lt;br /&gt;        puts 'download completed'&lt;br /&gt;      else&lt;br /&gt;        puts 'enclosure downloaded already'&lt;br /&gt;      end&lt;br /&gt;    end&lt;br /&gt;  end    &lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;if __FILE__ == $0&lt;br /&gt;  url = "http://mysite.com/gwd/feed/lugradio.rss"&lt;br /&gt;  rss = Rssreader.new(url)&lt;br /&gt;  puts rss.get_summary()&lt;br /&gt;  rss.download_enclosure()&lt;br /&gt;end&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 29 Oct 2007 23:28:18 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4713</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>RSS Reader - Reads Name and URL into HashMap</title>
      <link>http://snippets.dzone.com/posts/show/2928</link>
      <description>// description of your code here&lt;br /&gt;// RSS reader for web reads them into HashMap&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Created by IntelliJ IDEA.&lt;br /&gt; * User: Rapid&lt;br /&gt; * Date: Oct 9, 2006&lt;br /&gt; * Time: 3:18:23 PM&lt;br /&gt; * To change this template use File | Settings | File Templates.&lt;br /&gt; */&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;import java.util.HashMap;&lt;br /&gt;&lt;br /&gt;import com.sun.syndication.feed.module.Module;&lt;br /&gt;import com.sun.syndication.feed.synd.SyndEntry;&lt;br /&gt;import com.sun.syndication.feed.synd.SyndFeed;&lt;br /&gt;import com.sun.syndication.io.SyndFeedInput;&lt;br /&gt;import com.sun.syndication.io.XmlReader;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Reads and prints any RSS/Atom feed type. Adopted from the example by the&lt;br /&gt; * same name at http://wiki.java.net/bin/view/Javawsxml/Rome05TutorialFeedReader&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class FeedReader {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    HashMap hm = null;&lt;br /&gt;    String[][] rss = null ;&lt;br /&gt;    SyndFeedInput input ;&lt;br /&gt;    URL feedUrl;&lt;br /&gt;    SyndFeed feed ;&lt;br /&gt;    int count =-1;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public HashMap readRSS(String url) {&lt;br /&gt;        boolean readOk = false;&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                hm = new HashMap();&lt;br /&gt;&lt;br /&gt;               feedUrl  = new URL(url);&lt;br /&gt;&lt;br /&gt;                input  = new SyndFeedInput();&lt;br /&gt;                 feed = input.build(new XmlReader(feedUrl));&lt;br /&gt;&lt;br /&gt;                System.out.println("Title: " + feed.getTitle());&lt;br /&gt;                System.out.println("Author: " + feed.getAuthor());&lt;br /&gt;                System.out.println("Description: " + feed.getDescription());&lt;br /&gt;                System.out.println("Pub date: " + feed.getPublishedDate());&lt;br /&gt;                System.out.println("Copyright: " + feed.getCopyright());&lt;br /&gt;                System.out.println("Modules used:");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                String metaRSS = "Title: " + feed.getTitle() + "\n" +&lt;br /&gt;                "Author: " + feed.getAuthor()  + "\n" +&lt;br /&gt;                 "Description: " + feed.getDescription()  + "\n" +&lt;br /&gt;                 "Pub date: " + feed.getPublishedDate()  + "\n" +&lt;br /&gt;                 "Copyright: " + feed.getCopyright() ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                rss = new String[ feed.getEntries().size()][2];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                System.out.println("Titles of the " + feed.getEntries().size() +&lt;br /&gt;                                   " entries:");&lt;br /&gt;                for (final Iterator iter = feed.getEntries().iterator();&lt;br /&gt;                     iter.hasNext();)&lt;br /&gt;                {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    rss[++count][0] =      ((SyndEntry)iter.next()).getTitle().toString();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                }&lt;br /&gt;                count = -1 ;&lt;br /&gt;                for (final Iterator iter = feed.getEntries().iterator();&lt;br /&gt;                     iter.hasNext();)&lt;br /&gt;                {&lt;br /&gt;&lt;br /&gt;                   rss[++count][1] =      ((SyndEntry)iter.next()).getUri().toString();&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                if (feed.getImage() != null)&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("Feed image URL: " +&lt;br /&gt;                                       feed.getImage().getUrl());&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                readOk = true;&lt;br /&gt;                hm.put( feed.getTitle(), rss);&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex) {&lt;br /&gt;                ex.printStackTrace();&lt;br /&gt;                System.out.println("ERROR: " + ex.getMessage());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        String[][] rs = (String[][])hm.get("LinuxInsider");&lt;br /&gt;&lt;br /&gt;          System.out.println("************************");&lt;br /&gt;        for( int i=0; i&lt;rs.length; i++){&lt;br /&gt;&lt;br /&gt;            System.out.println( rs[i][0]);&lt;br /&gt;             System.out.println( rs[i][1]);&lt;br /&gt;//             System.out.println( rs[i][2]);&lt;br /&gt;        }&lt;br /&gt;        if (! readOk) {&lt;br /&gt;            System.out.println();&lt;br /&gt;            System.out.println("FeedReader reads and prints info on any RSS/Atom feed.");&lt;br /&gt;            System.out.println("The first parameter must be the URL of the feed to read.");&lt;br /&gt;            System.out.println();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return hm;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 30 Oct 2006 14:24:31 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2928</guid>
      <author>ranjan_company (ranjan)</author>
    </item>
    <item>
      <title>RSS Reader - simple with Main</title>
      <link>http://snippets.dzone.com/posts/show/2927</link>
      <description>// description of your code here&lt;br /&gt;//Reads rss from given url&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Created by IntelliJ IDEA.&lt;br /&gt; * User: Rapid&lt;br /&gt; * Date: Oct 9, 2006&lt;br /&gt; * Time: 3:18:23 PM&lt;br /&gt; * To change this template use File | Settings | File Templates.&lt;br /&gt; */&lt;br /&gt;import java.net.URL;&lt;br /&gt;import java.util.Iterator;&lt;br /&gt;&lt;br /&gt;import com.sun.syndication.feed.module.Module;&lt;br /&gt;import com.sun.syndication.feed.synd.SyndEntry;&lt;br /&gt;import com.sun.syndication.feed.synd.SyndFeed;&lt;br /&gt;import com.sun.syndication.io.SyndFeedInput;&lt;br /&gt;import com.sun.syndication.io.XmlReader;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Reads and prints any RSS/Atom feed type. Adopted from the example by the&lt;br /&gt; * same name at http://wiki.java.net/bin/view/Javawsxml/Rome05TutorialFeedReader&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;public class FeedReader1 {&lt;br /&gt;&lt;br /&gt;    public static void main(final String[] args) {&lt;br /&gt;        boolean readOk = false;&lt;br /&gt;        if (args.length == 1) {&lt;br /&gt;            try {&lt;br /&gt;                final URL feedUrl = new URL(args[0]);&lt;br /&gt;&lt;br /&gt;                final SyndFeedInput input = new SyndFeedInput();&lt;br /&gt;                final SyndFeed feed = input.build(new XmlReader(feedUrl));&lt;br /&gt;&lt;br /&gt;                System.out.println("Title: " + feed.getTitle());&lt;br /&gt;                System.out.println("Author: " + feed.getAuthor());&lt;br /&gt;                System.out.println("Description: " + feed.getDescription());&lt;br /&gt;                System.out.println("Pub date: " + feed.getPublishedDate());&lt;br /&gt;                System.out.println("Copyright: " + feed.getCopyright());&lt;br /&gt;                System.out.println("Modules used:");&lt;br /&gt;                for (final Iterator iter = feed.getModules().iterator();&lt;br /&gt;                     iter.hasNext();)&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("\t" + ((Module)iter.next()).getUri());&lt;br /&gt;                }&lt;br /&gt;                System.out.println("Titles of the " + feed.getEntries().size() +&lt;br /&gt;                                   " entries:");&lt;br /&gt;                for (final Iterator iter = feed.getEntries().iterator();&lt;br /&gt;                     iter.hasNext();)&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("\t" +&lt;br /&gt;                                       ((SyndEntry)iter.next()).getTitle());&lt;br /&gt;                    &lt;br /&gt;                }&lt;br /&gt;                if (feed.getImage() != null)&lt;br /&gt;                {&lt;br /&gt;                    System.out.println("Feed image URL: " +&lt;br /&gt;                                       feed.getImage().getUrl());&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                readOk = true;&lt;br /&gt;            }&lt;br /&gt;            catch (Exception ex) {&lt;br /&gt;                ex.printStackTrace();&lt;br /&gt;                System.out.println("ERROR: " + ex.getMessage());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (! readOk) {&lt;br /&gt;            System.out.println();&lt;br /&gt;            System.out.println("FeedReader reads and prints info on any RSS/Atom feed.");&lt;br /&gt;            System.out.println("The first parameter must be the URL of the feed to read.");&lt;br /&gt;            System.out.println();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 30 Oct 2006 14:23:10 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2927</guid>
      <author>ranjan_company (ranjan)</author>
    </item>
    <item>
      <title>Math Parser //JavaScript Class</title>
      <link>http://snippets.dzone.com/posts/show/2207</link>
      <description>&lt;a href="http://www.jsfromhell.com/classes/math-processor"&gt;&lt;br /&gt;This class is able to parse math expressions and also run user defined functions.&lt;br /&gt;&lt;br /&gt;On JavaScript there's the "eval" function, that can do such things well, but this code objective was just to give me fun or a new challenge =)~&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;x = new MathProcessor;&lt;br /&gt;try{alert(x.parse("1+2-(3*4) + medium(2,3) - frac( 2.2231)"));}&lt;br /&gt;catch(e){alert(e);}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It's possible to add more functions to the class, just add them into the "methods" property ;]&lt;br /&gt;&lt;br /&gt;Well, that's it :)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/classes/math-processor [v1.0]&lt;br /&gt;&lt;br /&gt;MathProcessor = function(){ //v1.0&lt;br /&gt;    var o = this;&lt;br /&gt;    o.o = {&lt;br /&gt;        "+": function(a, b){ return +a + b; },&lt;br /&gt;        "-": function(a, b){ return a - b; },&lt;br /&gt;        "%": function(a, b){ return a % b; },&lt;br /&gt;        "/": function(a, b){ return a / b; },&lt;br /&gt;        "*": function(a, b){ return a * b; },&lt;br /&gt;        "^": function(a, b){ return Math.pow(a, b); },&lt;br /&gt;        "~": function(a, b){ return Math.sqrt(a, b); }&lt;br /&gt;    };&lt;br /&gt;    o.s = { "^": 3, "~": 3, "*": 2, "/": 2, "%": 1, "+": 0, "-": 0 };&lt;br /&gt;    o.u = {"+": 1, "-": -1}, o.p = {"(": 1, ")": -1};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.parse = function(e){&lt;br /&gt;    for(var n, x, o = [], s = [x = this.RPN(e.replace(/ /g, "").split(""))]; s.length;)&lt;br /&gt;        for((n = s[s.length-1], --s.length); n[2]; o[o.length] = n, s[s.length] = n[3], n = n[2]);&lt;br /&gt;    for(; (n = o.pop()) != undefined; n[0] = this.o[n[0]](isNaN(n[2][0]) ? this.f(n[2][0]) : n[2][0], isNaN(n[3][0]) ? this.f(n[3][0]) : n[3][0]));&lt;br /&gt;    return +x[0];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.methods = {&lt;br /&gt;    "div": function(a, b){ return parseInt(a / b); },&lt;br /&gt;    "frac": function(a){ return a - parseInt(a); },&lt;br /&gt;    "sum": function(n1, n2, n3, n){ for(var r = 0, a, l = (a = arguments).length; l; r += a[--l]); return r; },&lt;br /&gt;    "medium": function(a, b){ return (a + b) / 2; }&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.error = function(s){&lt;br /&gt;    throw new Error("MathProcessor: " + (s || "Erro na express&#227;o"));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.RPN = function(e){&lt;br /&gt;    var _, r, c = r = [, , , 0];&lt;br /&gt;    if(e[0] in this.u || !e.unshift("+"))&lt;br /&gt;        for(; e[1] in this.u; e[0] = this.u[e.shift()] * this.u[e[0]] + 1 ? "+" : "-");&lt;br /&gt;    (c[3] = [this.u[e.shift()], c, , 0])[1][0] = "*", (r = [, , c, 0])[2][1] = r;&lt;br /&gt;    (c[2] = this.v(e))[1] = c;&lt;br /&gt;    (!e.length &amp;&amp; (r = c)) || (e[0] in this.s &amp;&amp; ((c = r)[0] = e.shift(), !e.length &amp;&amp; this.error()));&lt;br /&gt;     while(e.length){&lt;br /&gt;        if(e[0] in this.u){&lt;br /&gt;            for(; e[1] in this.u; e[0] = this.u[e.shift()] * this.u[e[0]] + 1 ? "+" : "-");&lt;br /&gt;            (c = c[3] = ["*", c, , 0])[2] = [-1, c, , 0];&lt;br /&gt;        }&lt;br /&gt;        (c[3] = this.v(e))[1] = c;&lt;br /&gt;        e[0] in this.s &amp;&amp; (c = this.s[e[0]] &gt; this.s[c[0]] ?&lt;br /&gt;            ((c[3] = (_ = c[3], c[2]))[1][2] = [e.shift(), c, _, 0])[2][1] = c[2]&lt;br /&gt;            : r == c ? (r = [e.shift(), , c, 0])[2][1] = r&lt;br /&gt;            : ((r[2] = (_ = r[2], [e.shift(), r, ,0]))[2] = _)[1] = r[2]);&lt;br /&gt;    }&lt;br /&gt;    return r;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.v = function(e){&lt;br /&gt;    if("0123456789.".indexOf(e[0]) + 1){&lt;br /&gt;        for(var i = -1, l = e.length; ++i &lt; l &amp;&amp; "0123456789.".indexOf(e[i]) + 1;);&lt;br /&gt;        return [+e.splice(0,i).join(""), , , 0];&lt;br /&gt;    }&lt;br /&gt;    else if(e[0] == "("){&lt;br /&gt;        for(var i = 0, l = e.length, j = 1; ++i &lt; l &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j););&lt;br /&gt;        return this.RPN(l = e.splice(0,i), l.shift(), !j &amp;&amp; e.shift());&lt;br /&gt;    }&lt;br /&gt;    else{&lt;br /&gt;        var i = 0, c = e[0].toLowerCase();&lt;br /&gt;        if((c &gt;= "a" &amp;&amp; c &lt;= "z") || c == "_"){&lt;br /&gt;            while(((c = e[++i].toLowerCase()) &gt;= "a" &amp;&amp; c &lt;= "z") || c == "_" || (c &gt;= 0 &amp;&amp; c &lt;= 9));&lt;br /&gt;            if(c == "("){&lt;br /&gt;                for(var l = e.length, j = 1; ++i &lt; l &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j););&lt;br /&gt;                return [e.splice(0,i+1).join(""), , , 0];&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    this.error();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MathProcessor.prototype.f = function(e){&lt;br /&gt;    var i = 0, n;&lt;br /&gt;    if(((e = e.split(""))[i] &gt;= "a" &amp;&amp; e[i] &lt;= "z") || e[i] == "_"){&lt;br /&gt;        while((e[++i] &gt;= "a" &amp;&amp; e[i] &lt;= "z") || e[i] == "_" || (e[i] &gt;= 0 &amp;&amp; e[i] &lt;= 9));&lt;br /&gt;        if(e[i] == "("){&lt;br /&gt;            !this.methods[n = e.splice(0, i).join("")] &amp;&amp; this.error("Fun&#231;&#227;o \"" + n + "\" n&#227;o encontrada"), e.shift();&lt;br /&gt;            for(var a = [], i = -1, j = 1; e[++i] &amp;&amp; (e[i] in this.p &amp;&amp; (j += this.p[e[i]]), j);)&lt;br /&gt;                j == 1 &amp;&amp; e[i] == "," &amp;&amp; (a.push(this.parse(e.splice(0, i).join(""))), e.shift(), i = -1);&lt;br /&gt;            a.push(this.parse(e.splice(0,i).join(""))), !j &amp;&amp; e.shift();&lt;br /&gt;        }&lt;br /&gt;        return this.methods[n].apply(this, a);&lt;br /&gt;    }&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 15 Jun 2006 20:34:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2207</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
    <item>
      <title>Digg/RSS Reader</title>
      <link>http://snippets.dzone.com/posts/show/1900</link>
      <description>Grabs the RSS-feed from digg.com and reads it out&lt;br /&gt;loud using festival.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;# Copyright (c) 2005 Davor Babic &lt;davorb@gmail.com&gt;&lt;br /&gt;# All rights reserved.&lt;br /&gt;# Usage of the works is permitted provided that this&lt;br /&gt;# instrument is retained with the works, so that any&lt;br /&gt;# entity that uses the works is notified of this&lt;br /&gt;# instrument.&lt;br /&gt;# DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.&lt;br /&gt;&lt;br /&gt;url="http://digg.com/rss/index.xml"&lt;br /&gt;&lt;br /&gt;echo "Parsing RSS..."&lt;br /&gt;curl --silent "$url" | grep -E '(title&gt;|description&gt;)' | \&lt;br /&gt;        sed -n '4,$p' | \&lt;br /&gt;	sed -e 's/&lt;title&gt;//' -e 's/&lt;\/title&gt;//' -e 's/&lt;description&gt;/  /' \&lt;br /&gt;	    -e 's/&lt;\/description&gt;//' | head -5 &gt; digg &lt;br /&gt;echo "Reading..."&lt;br /&gt;festival --tts digg&lt;br /&gt;rm -rf ./digg&lt;br /&gt;echo "Done."&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 12 Apr 2006 04:18:53 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1900</guid>
      <author>davor (Davor Babic)</author>
    </item>
  </channel>
</rss>
