Las líneas que escribo en Java son cada vez más esporádicas y eso se nota al momento de empezar, porque cada vez que abro el Eclipse (para trabajar en Java, pues para C lo uso más seguido) es un volver a empezar.
El motivo que me llevó esta vez a escribir algo fue la liberación de Rome 1.0, una librería que se ha convertido hace tiempo en un estándar de facto para consumir y producir feeds.

feeds

El ejemplo será básicamente un lector sencillo de feeds. Para empezar el mismo ¿Que necesitamos?

  • J2SE 1.4 o superior
  • Rome: RSS/Atom syndication and publishing tools, puedes descargar rome-1.0.jar directamente desde aqui
  • JDOM 1.0 o superior, que puedes descargar de aquí.

El ejemplo consiste en una clase Consumer con su constructor y un método print. Además, un método main para instanciar a Consumer con una URL (que recibirá como argumento) del feed que deseamos leer.
El código es bastante legible y fácil de digerir. Consiste en crear un feed (SyndFeed) y llenar el objeto a partir de una "entrada de feed" (SyndFeedInput) que completará las propiedades del objeto a partir de la lectura de un XML (XmlReader) que no es otro que el de la URL enviada por argumento.
Finálmente, para leer las entradas del feed creamos una lista de "entradas de feeds" y un iterador sobre la misma para obtener datos como el título, descripción, autor, etc.

import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

/**
 * Consumer class from RSS/Atom feed type.
 *
 * @author  LuAuF
 */

public class Consumer {

    SyndFeed    feed;
   
    /**
     * Class constructor
     *
     * @param url: url path to consume
     */

    public Consumer(String url) {
        super();
        try {
            URL feedUrl = new URL(url);

            SyndFeedInput input = new SyndFeedInput();
            feed = input.build(new XmlReader(feedUrl));

        } catch (Exception ex) {
            ex.printStackTrace();
            System.out.println("ERROR: "+ex.getMessage());
        }
    }

    /**
     * print method
     * Scroll down the list of entries and displays the feed title, author and description
     */

    void print () {

        //feeds list
        List<SyndEntry> entradas = new ArrayList<SyndEntry>();
        entradas = feed.getEntries();
       
        //list iterator
        Iterator<SyndEntry> it = entradas.iterator();
       
        while (it.hasNext()) {
            SyndEntry entrada = it.next();
            System.out.println("Titulo......: " + entrada.getTitle() );
            System.out.println("Descripción.: " + entrada.getDescription() );
            System.out.println("Autor.......: " + entrada.getAuthor() );
        }
    }

   
    public static void main(String[] args) {
       
        Consumer feed = new Consumer (args[0]);
        feed.print();
    }
}

Recuerda, si corres el código desde Eclipse, pasar un argumento (por ejemplo: http://feeds.feedburner.com/luauf) en la solapa "Arguments" de la ventana de "Creación, administración y cofiguración de ejecución" luego de ejecutar "Run..."

arguments