Publié le 04/10/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Lire un flux RSS en parsant le fichier XML

Un flux RSS est un fichier XML au format standardisé reprenant en général les actualités d'un site internet. Pour extraire les données, la class RSSReader utilise les fonctions de lecture d'un fichier XML (DOM).

Flux RSS dans un fichier XML classique

Les niveaux et les balises de l'arborescence sont définis par des spécifications publiées par W3C. Cette structure du fichier XML favorise la syndication de contenus et l'automatisation de la diffusion des informations.

Exemple de flux, les news de Fobec.com
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
  <channel>
    <title>www.fobec.com site communautaire du developpement informatique</title>
    <link>http://www.fobec.com</link>
    <description>Les nouveaux articles, tutoriels et logiciels autour du developpement informatique.</description>
    <language>fr</language>
    <lastBuildDate>Mon, 04 Oct 2010 09:45:55 GMT</lastBuildDate>
    <image>
      <title>www.fobec.com site communautaire du developpement informatique</title>
      <url>http://www.fobec.com/CMS/logo.gif</url>
      <link>http://www.fobec.com</link>
      <width>144</width>
      <height>42</height>
    </image>
    <item>
      <title>Réduire le chargement d'une page à moins d'une seconde</title>
      <link>http://www.fobec.com/CMS/web/webmaster/reduire-chargement-une-page-moins-une-seconde_1013.html</link>
      <description><![CDATA[Webmaster, optimiser le temps de chargement de vos pages !  Ce conseil revient assez souvent dans la bouche des SEO. Il en est de męme pour Google qui a intégré l&#039;outil Performance du site dans son outil WebmasterTools.Pour analyser le...]]></description>
      <pubDate>Fri, 01 Oct 2010 14:21:56 GMT</pubDate>
      <guid>http://www.fobec.com/CMS/web/webmaster/reduire-chargement-une-page-moins-une-seconde_1013.html</guid>
    </item>
    <item>
      <title>Programmer soi-męme le jeu du démineur</title>
      <link>http://www.fobec.com/CMS/java/class/programmer-soi-meme-jeu-demineur_1012.html</link>
      <description><![CDATA[On connait tous le jeu du démineur grâce à Bill qui le fourni avec son OS. Le but est de retrouver les bombes qui se cachent derrière les p&#039;tites cases grises.Voici un exemple de code source du jeu du démineur fait en JAVA. Peu de ligne de...]]></description>
      <pubDate>Fri, 01 Oct 2010 09:26:30 GMT</pubDate>
      <guid>http://www.fobec.com/CMS/java/class/programmer-soi-meme-jeu-demineur_1012.html</guid>
    </item>
....
</channel>
</rss>

Charger et lire le contenu d'un flux RSS

Pour parser le flux RSS, la class RSSReader effectue les opérations suivantes:
- charger le fichier XML sur le site internet,
- initialiser le parseur XML avec DocumentBuilderFactory
- lire la valeur des éléments avec la technique appelée DOM.
import java.io.IOException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
 
/**
 * Parser un flux RSS
 * @author Fobec 2010
 */
 
public class RSSReader {
 
    /**
     * Parser le fichier XML
     * @param feedurl URL du flux RSS
     */
    public void parse(String feedurl) {
        try {
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            URL url = new URL(feedurl);
            Document doc = builder.parse(url.openStream());
            NodeList nodes = null;
            Element element = null;
            /**
             * Titre et date du flux
             */
            nodes = doc.getElementsByTagName("title");
            Node node = doc.getDocumentElement();
            System.out.println("Flux RSS: " + this.readNode(node, "channel|title"));
            System.out.println("Date de publication: " + GMTDateToFrench(this.readNode(node, "channel|lastBuildDate")));
            System.out.println();
            /**
             * Elements du flux RSS
             **/
            nodes = doc.getElementsByTagName("item");
            for (int i = 0; i < nodes.getLength(); i++) {
                element = (Element) nodes.item(i);
                System.out.println("Titre: " + readNode(element, "title"));
                System.out.println("Lien: " + readNode(element, "link"));
                System.out.println("Date: " + GMTDateToFrench(readNode(element, "pubDate")));
                System.out.println("Description: " + readNode(element, "description"));
                System.out.println();
            } //for
            //for
        } catch (SAXException ex) {
            Logger.getLogger(RSSReader.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(RSSReader.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(RSSReader.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
 
    /**
     * Méthode permettant de retourner ce que contient d'un noeud
     * @param _node le noeud principal
     * @param _path suite des noms des noeud sans espace séparer par des "|"
     * @return un string contenant le valeur du noeud voulut
     */
    public String readNode(Node _node, String _path) {
 
        String[] paths = _path.split("|");
        Node node = null;
 
        if (paths != null && paths.length > 0) {
            node = _node;
 
            for (int i = 0; i < paths.length; i++) {
                node = getChildByName(node, paths[i].trim());
            }
        }
 
        if (node != null) {
            return node.getTextContent();
        } else {
            return "";
        }
    }
 
    /**
     * renvoye le nom d'un noeud fils a partir de son nom
     * @param _node noeud pricipal
     * @param _name nom du noeud fils
     * @return le noeud fils
     */
    public Node getChildByName(Node _node, String _name) {
        if (_node == null) {
            return null;
        }
        NodeList listChild = _node.getChildNodes();
 
        if (listChild != null) {
            for (int i = 0; i < listChild.getLength(); i++) {
                Node child = listChild.item(i);
                if (child != null) {
                    if ((child.getNodeName() != null && (_name.equals(child.getNodeName()))) || (child.getLocalName() != null && (_name.equals(child.getLocalName())))) {
                        return child;
                    }
                }
            }
        }
        return null;
    }
 
    /**
     * Afficher une Date GML au format francais
     * @param gmtDate
     * @return
     */
    public String GMTDateToFrench(String gmtDate) {
        try {
            SimpleDateFormat dfGMT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH);
            dfGMT.parse(gmtDate);
            SimpleDateFormat dfFrench = new SimpleDateFormat("EEEE, d MMMM yyyy HH:mm:ss", Locale.FRANCE);
            return dfFrench.format(dfGMT.getCalendar().getTime());
        } catch (ParseException ex) {
            Logger.getLogger(RSSReader.class.getName()).log(Level.SEVERE, null, ex);
        }
        return "";
    }
 
    /**
     * Exemple
     * @param args
     */
    public static void main(String[] args) {
        RSSReader reader = new RSSReader();
        reader.parse("http://fobec.com/CMS/fobec.xml");
    }
}

Résultat de l'extraction des informations:
Les données sont affichées dans la console JAVA, les informations extraites prennent la forme suivante:
Flux RSS: www.fobec.com site communautaire du developpement informatique
Date de publication: lundi, 4 octobre 2010 11:45:55

Titre: Réduire le chargement d'une page à moins d'une seconde
Lien: http://www.fobec.com/CMS/web/webmaster/reduire-chargement-une-page-moins-une-seconde_1013.html
Date: vendredi, 1 octobre 2010 16:21:56
Description: Webmaster, optimiser le temps de chargement de vos pages ! Ce conseil revient assez souvent dans la bouche des SEO. Il en est de męme pour Google qui a intégré l'outil Performance du site dans son outil WebmasterTools.Pour analyser le...

Titre: Programmer soi-męme le jeu du démineur
Lien: http://www.fobec.com/CMS/java/class/programmer-soi-meme-jeu-demineur_1012.html
Date: vendredi, 1 octobre 2010 11:26:30
Description: On connait tous le jeu du démineur grace à Bill qui le fourni avec son OS. Le but est de retrouver les bombes qui se cachent derrière les p'tites cases grises.Voici un exemple de code source du jeu du démineur fait en JAVA. Peu de ligne de...

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
04/10/2010
Visualisation
vu 4769 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par sakhr dans tuto

merci b c pour les plusieurs tailles d'images

Publié par FOBEC dans CMS

test
commentaire

Publié par liomka dans java

Merci! C'étais l'exemple parfait donc j'avais besoin pour apprendre la programmation Client/Serveur en Java ;)

Publié par Axel dans java

le resultat de la fonction getMacAddress() est de type String,
ainsi pour afficher l'adresse MAC dans une JLabel

String macAddress=NetworkHardware.getMacAddress();
label.setText(macAd...

Publié par Patrice dans CMS

Concernant la commande ShellExecute :

Si vous voulez lancer un programme dont le nom est contenu dans une propriété text,
caption, items bref d\'un string ... n'oubliez pas de transfor...