Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Proyectos / Lector Feed con Java/Rome

Lector Feed con Java/Rome

Autor jc mouse domingo, mayo 27, 2012

En este tutorial crearemos un lector de Feeds en Java/netbeans, pero antes debemosa saber que es un Feed, según Santa Wikipedia se define Feed como:
«Una fuente web o canal web (en inglés web feed) es un medio de redifusión de contenido web. Se utiliza para suministrar información actualizada frecuentemente a sus suscriptores. En su jerga, cuando una página web «redifunde» su contenido mediante una fuente web, los internautas pueden «suscribirse» a ella para estar informados de sus novedades. Los interesados pueden usar un programa «agregador» para acceder a sus fuentes suscritas desde un mismo lugar.

Son muy utilizados en los blogs o bitácoras de Internet, así como en prensa electrónica. Cada día hay más medios que utilizan este sistema de redifusión web. La gran difusión de este tipo de servicio web ha estimulado el interés en otros sectores que comienzan a ver en las fuentes web una forma efectiva de difundir y compartir información empresarial.»

Ahora que sabemos que es, necesitamos saber que herramientas utilizaremos en este tutorial:

  • Conocer Java y XML
  • IDE Netbeans 6.9 o superior
  • Libreria Rome-1.0.jar, para manipular los archivos XML
  • Libreria JDOM

Nivel: Intermedio

Tiempo: 20 minutos

Comencemos.

1. Descarga e instala las librerías Rome y JDom en Netbeans.

2. Crea un nuevo proyecto y añade las librerias del paso 1.

3. Añade un JFrame al proyecto, llamalo «interfaz.java», utilizando las herramientas graficas de Netbeans, crea ls siguiente interfaz

pROJECT gUi

Hacemos uso de un JList para llenar los títulos de las entradas leídas, ademas del control JEditorPane, esto porque el controla acepta etiquetas HTML.

OJO: Los nombres de los controles son importantes

4. Los Feed son archivos XML, estos archivos pueden variar con más o menos etiquetas, pero por lo general las más usuales son las siguientes:

<item>
<title>Titulo</title>
<pubDate>Sun, 29 May 2013 26:07:13 GMT</pubDate>
<description>
CONTENIDO
</description>
<link>
http://www.tu_pagina.net/direccion_post.html
</link>
<author>noreply@blogger.com (yo)</author>
<enclosure url="http://www.tu_pagina.net/jc-content/uploads/2013/05/imagen.jpg" length="7612" type="image/jpg"/>
</item>

Podemos manipular directamente estas etiquetas XML con jDom, sin embargo ya existe la libreria Rome-1.0.jar que nos facilita mucho el trabajo.

Crearemos una clase «item.java» para almacenar cada item que se lea del Feed, el código es:

public class item {

    private String titulo;
    private String descripcion;
    private String tipo_descripcion;
    private String autor;
    private String enlace;
    private String fecha_publicacion;

    public item(){}

    public void setTitulo( String value )
    {
        this.titulo =  Valor( value , "Sin titulo");
    }

    public String getTitulo()
    {
        return this.titulo;
    }

    public void setDescripcion( String value )
    {
        this.descripcion = Valor( value , "No tiene");
    }

    public String getDescripcion()
    {
        return this.descripcion;
    }

    public void settDescripcion( String value )
    {
        this.tipo_descripcion = Valor( value , "desconocido");
    }

    public String gettDescripcion()
    {
        return this.tipo_descripcion;
    }

    public void setAutor( String value )
    {
        this.autor =  Valor( value , "Anonimo");
    }

    public String getAutor()
    {
        return this.autor;
    }

    public void setEnlace( String value )
    {
        this.enlace = Valor( value , "Sin enlace");
    }

    public String getEnlace()
    {
        return this.enlace;
    }

    public void setFecha_Publicacion( Object value )
    {
        this.fecha_publicacion =   Valor( value , "Sin Fecha de publicación");
    }

    public String getFecha_Publicacion()
    {
        return this.fecha_publicacion;
    }

    private String Valor(Object value , String Default)
    {
        return (value!=null) ? (value.toString().length()>0 ? value.toString() : Default ) : Default ;        
    }
}

5. Creamos una nueva clase «jcFeed.java» y colocamos el siguiente código:

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;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.DefaultListModel;
import javax.swing.JEditorPane;
import javax.swing.JList;
/**
 * @web https://www.jc-mouse.net
 * @author Mouse
 */
public class jcFeed {

    private SyndFeed feed;
    private Map mapa = new HashMap();
    //objetos de interfaz
    DefaultListModel modelo = new DefaultListModel();
    JList Lista_Articulos;
    JEditorPane descripcion;
    JEditorPane propiedades;

    public jcFeed( JList jlist, JEditorPane jeditorpane, JEditorPane jeditorpane2 )
    {
      System.out.println("Creado por jc-Mouse");
      this.Lista_Articulos = jlist;
      this.Lista_Articulos.removeAll();
      this.Lista_Articulos.setModel(modelo);
      this.descripcion = jeditorpane;
      this.descripcion.setContentType("text/html");
      this.propiedades = jeditorpane2;
      this.propiedades.setContentType("text/html");
      //evento JLIST de titulos
      MouseListener mouseListener = new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent mouseEvent) {
        JList theList = (JList) mouseEvent.getSource();        
        int index = theList.locationToIndex(mouseEvent.getPoint());
        if (index >= 0)            
           Cargar_Item( index );        
      }
    };
    Lista_Articulos.addMouseListener(mouseListener);
    }

    public boolean Iniciar_Feed( String url )
    {
        try {
            URL feedUrl = new URL(url);
            SyndFeedInput input = new SyndFeedInput();
            feed = input.build(new XmlReader(feedUrl));
            return true;
        } catch (Exception ex) {
            System.out.println( ex );
        }
        return false;
    }

    public void Cargar_Feed()
    {
        System.out.println("Cargando Feed...");
        this.mapa.clear();
        this.modelo.removeAllElements();
        this.descripcion.setText("");
        this.propiedades.setText("");
        int index=0;
        //Obtiene las entradas del archivo XML
        List<SyndEntry> entradas = new ArrayList<SyndEntry>();
        entradas = feed.getEntries();
        //Recorre todos los items y los añade a un HashMap
        Iterator<SyndEntry> it = entradas.iterator();
        while (it.hasNext()) {
            SyndEntry entrada = it.next();
            item tmp_item = new item();
            tmp_item.setTitulo( entrada.getTitle() );
            tmp_item.setDescripcion( entrada.getDescription().getValue() );
            tmp_item.settDescripcion( entrada.getDescription().getType() );
            tmp_item.setFecha_Publicacion( entrada.getPublishedDate() );
            tmp_item.setAutor( entrada.getAuthor() );
            tmp_item.setEnlace( entrada.getLink() );
            this.mapa.put( index , tmp_item );
            index++;
        }
        //Llena el JLIST con los titulos de cada item
        Iterator it2 = mapa.entrySet().iterator();
        while (it2.hasNext()) {
            Map.Entry e = (Map.Entry)it2.next();            
            item itm = (item) e.getValue();                        
            modelo.addElement( itm.getTitulo() );
        }        
    }
    /* Se le pasa como parametro la posición en el Map y llena estos en los controles */
    private void Cargar_Item( int item )
    {
        Iterator it2 = mapa.entrySet().iterator();
        while (it2.hasNext()) {
            Map.Entry e = (Map.Entry)it2.next();
            if( Integer.valueOf(e.getKey().toString())== item)
            {
                item itm = (item) e.getValue();
                this.descripcion.setText( itm.getDescripcion() );
                this.propiedades.setText( "<div style='font-size:10px;'>"
                        + "<strong>Autor:</strong> " + itm.getAutor() + "<br/>" +
                        "<strong>Publicado:</strong> " + itm.getFecha_Publicacion() + "<br/>" +
                        "<strong>Tipo:</strong> " + itm.gettDescripcion() + "<br/>" +
                        "<strong>URL:</strong> " + itm.getEnlace() + "</div>");
            }
        }
    }   

}

A esta clase se le pasa en el constructor 1 JList y 2 JEditorPane, estos los creamos en la interfaz.

Se implementa un MouseListener para escuchar los eventos que el usuario realice sobre el JList

Con el método Iniciar_Feed, se le pasa como parametros la URL del feed que queremos leer, este devuelve TRUE si tiene exito y FALSE en caso contrario.

El método Cargar_Feed, es llamado después de que utilizar Iniciar_Feed, este método recorre todas las entradas del FEED y los va almacenando en un HashMap según el orden de lectura, al momento de leer crea nuevas instancias de la clase item.java almacenando cada propiedad del item leido.

Por último tenemos el método Cargar_Item el cual es usado cuando el usuario realiza un clic sobre el JLIST, recibe como parámetros la posición del item del cual se desea extraer la información y este lo muestra en los controles JEditorPane.

6. Para terminar, debemos implementar la anterior clase en la interfaz, para ello, creamos una instancia a la clase jcFeed y en el constructor iniciamos esta nueva instancia pasando en el constructor el JList y los dos JEditorPane. Para terminar en el ActionPerformed del JButton iniciamos y cargamos el Feed.

   private jcFeed feed;

   /** Creates new form interfaz */
   public interfaz() {
      initComponents();
      this.setTitle("FEED - https://www.jc-mouse.net/");
      feed = new jcFeed( this.Lista_titulos, this.jeDescripcion, this.jePropiedades );
   }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        if(feed.Iniciar_Feed( txtURL.getText() ) );
            feed.Cargar_Feed();
    }

El proyecto está terminado, debes tener la siguiente estructura:

01 Proyecto
02 -- Main.java
03 -- interfaz.java
04 -- item.java
05 -- jcFeed.java
06 Bibliotecas
07 -- Rome-1.0.jar
08 -- JDOM.jar

Ejecuta y disfruta 🙂

Feed Reader mouse

Proyecto completico AQUI

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Dibujando con Canvas

Dibujando con Canvas

La clase Canvas (Lienzo)  de Android es una superficie que nos permite pintar figuras, texto e imágenes utilizando para...

Ghost Recon: Wildlands es Tierra Salvaje Bolivia

Ghost Recon: Wildlands es Tierra Salvaje Bolivia

Sinopsis del juego Bolivia, en unos años. Este hermoso país sudamericano se ha convertido en el mayor productor de cocaí...

GraphADT: Clases para trabajar con grafos en java

GraphADT: Clases para trabajar con grafos en java

GraphADT es una proyecto alojado en github escrito en java que te permite trabajar con grafos, a la fecha de escribir es...

Configura tu smartphone y PC para testear aplicaciones

Configura tu smartphone y PC para testear aplicaciones

Cuando desarrollamos aplicaciones para android como programadores nos interesa la velocidad al tiempo de depurar el códi...

Texto e Imagen en Java2d (Proyecto)

Texto e Imagen en Java2d (Proyecto)

Nivel: Intermedio-Avanzado IDE: Netbeans 6.9 o Sup. Tiempo: 30 minutos En este tutorial crearemos una aplicación que nos...

Crea una libreria TimeChooser – Selector de Tiempo

Crea una libreria TimeChooser – Selector de Tiempo

En este post crearemos un componente gráfico para java que nos permitirá seleccionar la hora del día de una manera senci...

1 comentario en “Lector Feed con Java/Rome”

  1. Francisco dice:

    Hola el tutorial esta muy bien explicado.. pero tengo un problema y lo he hecho todo al pie de la letra (o eso creo yo jeje) y me tira esta excepcion NoClassDefFoundError de que puede ser?? gracias de antemano

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En muchas ocasiones es necesaria la personalización de componentes java para que estos se adecuen a nuestros requerimien...

En este post mostramos como personalizar el Header (encabezado) de un componente JTable en Java colocando iconos, centra...

El JTable de Java es un gran componente para mostrar datos en una tabla de una forma rápida y sencilla, sin embargo en v...

En este post veremos un ejemplo sencillo de como descargar desde Internet archivos de cualquier tipo (*.jpg, *.png, *.gi...

Herramientas

Generador de Enlaces a Whatsapp