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

Publié par Diviciakos dans CMS

Merci ! Bonne continuation

Publié par ali dans logiciel

it is very good i am very happy becose for hand cap helpn tha is a good work

Publié par hungerGames dans php5

Salut!
je suis un debutant en php,et lorsque j'ai execute le code
sur la creation de la base 'member',on m'a affiche cet message:
"Undefined class constant 'ATT_ERRMOD...

Publié par Fobec dans news

Bonjour,
la localisation des adresses ip utilise plusieurs algo de recherche de position geographique. La precision du rapport d'analyse correspond la qualite de la localisation:
9/10 la locali...

Publié par fffffff dans php5

comment est-ce que les joueurs s'inscrivent, utilisez-vous PHP ?