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'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'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...
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...