ROME – Aggrégation de plusieurs flux (5/8)

L’aggrégation de plusieurs flux est extrèmement simple à mettre en place. La classe SyndFeed représentant un flux possède des accesseurs/modifieurs qui permettent de créer le flux directement dans le code. L’exemple ci-dessous crée un flux de type RSS 1.0, lui assigne un titre, une description, un auteur et un lien. SyndFeed aggrFeed = new SyndFeedImpl (); aggrFeed.setFeedType ("rss_1.0"); aggrFeed.setTitle("Flux aggrégé"); aggrFeed.setDescription ("Flux aggrégé"); aggrFeed.setAuthor ("Marwan KHELIF"); aggrFeed.setLink ("http://wiki.mkhelif.fr/"); Les propriétés d’un objet SyndFeed peuvent être modifiées, assignées à un autre flux, supprimer, etc… Les accesseurs modifient directement la référence de l’objet et non la valeur, ainsi modifier les entrées d’un flux auquel on a assigné les entrées d’un autre flux aura pour effet d’altérer les deux flux. L’exemple suivant présente comment insérer les entrées d’un flux en train d’être lu, dans un flux d’un autre format : package com.mkhelif.rome.exemples; import java.io.PrintWriter; import java.net.URL; import java.util.List; import java.util.ArrayList; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.feed.synd.SyndFeedImpl; import com.sun.syndication.io.SyndFeedOutput; import com.sun.syndication.io.SyndFeedInput; import com.sun.syndication.io.XmlReader; /** * Aggrégateur de flux (de différents types) dans un unique flux au format spécifié. * * @author Marwan KHELIF */ public class Aggregator { public static void main (String[] args) { if (args.length < 2) { printUsage (); } else { try...

Read article

ROME – Conversion d’un format à un autre (4/8)

Pour lire un flux il suffit d’utiliser la classe SyndFeedInput qui sélectionnera le parser à utiliser et qui permettra de récupérer le flux en tant que SyndFeed, format qui fait abstraction du format du flux. SyndFeedInput input = new SyndFeedInput (); SyndFeed feed = input.build (new XmlReader (new URL ("http://wiki.mkhelif.fr/feed.php"))); Rome permet de générer des flux de nouvelles à partir d’instances de SyndFeed grâce à la classe SyndFeedOutput. La génération d’un flux se fait en seulement deux lignes : SyndFeedOutput output = new SyndFeedOutput (); output.output (feed, new PrintWriter (System.out)); La première ligne créer une instance de SyndFeedOutput qui va permettre de générer le flux. Cette classe permet de générer des flux de différents types : rss_0.9 rss_0.91 rss_0.92 rss_0.93 rss_0.94 rss_1.0 rss_2.0 atom_0.3 L’objet SyndFeed contient un paramètre feedType permettant de spécifier le type de flux. La seconde ligne génére le flux de nouvelles et l’envoi sur la sortie passée en paramètre (ici la sortie standard). Voici un exemple d’application permettant de convertir un flux dans un autre format : package com.mkhelif.rome.exemples; import java.io.PrintWriter; import java.net.URL; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.io.SyndFeedInput; import com.sun.syndication.io.SyndFeedOutput; import com.sun.syndication.io.XmlReader; /** * Convertis un flux de type RSS/Atom vers un autre type de flux RSS/Atom....

Read article

ROME – Lecture d’un flux (3/8)

Lors de la lecture d’un flux de nouvelles vous n’avez pas à vous souciez de quel parser utiliser selon le format (RSS ou Atom), la classe SyndFeedInput choisira directement le parser correspondant à la structure du flux. Pour lire un flux il ne faut pas plus de deux lignes : URL feedUrl = new URL ("http://wiki.mkhelif.fr/feed.php"); SyndFeedInput input = new SyndFeedInput (); SyndFeed feed = input.build (new XmlReader (feedUrl)); La seconde ligne permet d’instancier un lecteur de flux qui créera un objet de type SyndFeed **(faisant abstraction du format du flux) à la troisième ligne. Un flux de type **XMLReader est un flux de caractères qui permet de faire abstraction de l’encodage HTTP. Par défaut la classe SyndFeed surcharge la méthode toString ()ce qui permet d’afficher le contenu du flux dans un format standard. System.out.println (feed); Voici un exemple de lecteur de flux de nouvelles : package com.mkhelif.rome.exemples; import java.net.URL; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.io.SyndFeedInput; import com.sun.syndication.io.XmlReader; /** * Lecteur de nouvelles de type RSS/Atom. * * @author Marwan KHELIF */ public class Lecteur { public static void main (String[] args) { if (args.length != 1) { printUsage (); } else { try { URL feedUrl = new URL (args[0]); SyndFeedInput...

Read article

ROME – Fonctionnement (2/8)

Voici ce qu’il se passe durant la lecture d’un flux de nouvelles : La classe permettant de parser un flux est SyndFeedInput, on crée alors une instance de cette classe : URL feedUrl = new URL ("http://wiki.mkhelif.fr/fr/feed.php"); SyndFeedInput input = new SyndFeedInput (); SyndFeed feed = input.build (new InputStreamReader (feedUrl.openStream ())); L’objet SyndFeedInput délègue alors le parsing du flux à la classe WireFeedInput. WireFeedInput utilise un PluginManager de FeedParsers pour sélectionner le parser à utiliser selon le type de flux. Le parser effectue alors le parsing du flux de nouvelles en utilisant l’API JDom et stoque le résultat dans un objet WireFeed héritant de WireFeedInput. Si le flux est de type RSS, l’objet WireFeed est de type Channel qui contient des Items, Clouds, ainsi que les autres types de données RSS contenues dans le package : com.sun.syndication.feed.rss. Si le flux est au format Atom, alors l’objet WireFeed est de type Feed du packaquage : com.sun.syndication.atom. L’objet que nous avions instancié SyndFeedInput utilise alors cet objet WireFeedInput pour créer un objet SyndFeedImpl qui fait abstraction du format du flux parsé. Cet classe implémente l’interface SyndFeed qui représente la racine de tous les formats de nouvelles. SyndFeedInput renvoie alors un objet SyndFeed...

Read article

ROME – Présentation (1/8)

Rome est une librairie écrite en Java qui permet de parser des flux RSS/Atom. Les flux ainsi parsés sont enregistrés dans des objets Java qui font abstraction du type de flux : Syndication Feed ou bien convertis dans l’un des différents types de flux supportés : RSS 0.90 RSS 0.91 Netscape RSS 0.91 Userland RSS 0.92 RSS 0.93 RSS 0.94 RSS 1.0 RSS 2.0 Atom 0.3 Atom 1.0 Pour pouvoir parser un flux XML cette API nécessite d’inclure la librairie JDom qui assure le traitement des flux/fichiers XML. Traduction de la documentation de ROME : http://wiki.java.net/bin/view/Javawsxml/Rome

Read article