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 7085 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Diviciakos dans CMS

Merci ! Bonne continuation

Publié par hozin2003 dans CMS

merci, c'est mon problème et voila j'ai trouvé la solution merci et voila un bon pas pour un débutant

Publié par fobec dans logiciel

MAJ: mise en cache du FAI et optimisation du script de Geolocalisation.

Publié par Outsourcing dans news

Le PageRank n'a plus une reelle importance a mon humble avis mais bcp de mes clients continue a juger de la qualite de ma prestation en referencement avec la barre verte!

Publié par iliass dans CMS

aebgksdktu hsmu yailsh iliass jqd ou azmwt wa ikraame