IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

flux RSS valide?


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut flux RSS valide?
    Bonjour,

    j'ai besoin de parser un flux RSS pour en vérifier la validité et d'en extraire les données.
    Egalement vérifier que ce fichier XML contient moins de 5 balises <item>.
    J'aimerai savoir comment m'y prendre pour faire toutes ces vérifications et extractions.
    Merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <rss version="2.0">
    <channel>
    <title><![CDATA[NOM1]]></title>
    <link><![CDATA[http://nom1.fr/infos/]]></link>
    <description><![CDATA[NOM 1 RSS 2.0]]></description>
    <copyright>Copyright nom1</copyright>
    <lastBuildDate>Wed, 24 Feb 2008 16:56:00 GMT</lastBuildDate>
     
    <image>
    <title><![CDATA[Logo]]></title>
    <url>[!CDATA[http://nom1.fr/rss/img/logonom1.gif]]</url>
    <link>[!CDATA[http://nom1.fr/infos/]]</link>
    </image>
     
    <image>
    <title><![CDATA[Pub]]></title>
    <url>[!CDATA[http://nom1.fr/rss/img/pub_nom1.gif]]</url>
    <link>[!CDATA[http://nom1.fr/pub_nom1.html/]]</link>
    </image>
     
    <item>
    	<title><![CDATA[Enseignement supérieur]]></title>
    	<link><![CDATA[http://nom1/infos/news1.html]]></link>
    	<description><![CDATA[Un départ sur six ne sera pas remplacé]]></description>
    	<enclosure url="http://nom1.fr/rss/img/img1.jpg" type="image/jpg" length="" />
    	<pubDate>Wed, 24 Feb 2008 16:56:00 +0000</pubDate>
    <item>
    <item>
    	<title><![CDATA[JO 2008]]></title>
    	<link><![CDATA[http://nom1/infos/news2.html]]></link>
    	<description><![CDATA[La fin des JO 2008]]></description>
    	<enclosure url="http://nom1.fr/rss/img/img2.jpg" type="image/jpg" length="" />
    	<pubDate>Wed, 15 Feb 2008 16:52:00 +0000</pubDate>
    <item>
    </channel>
    </rss>

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Un petit coup de ROME devrait faire l'affaire. Cette librairie s'occupe du parsing et de la validation et te permet de récupérer une liste d'entrée en sortie avec laquelle il te suffira de faire un size() pour vérifier la taille.

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par sinok Voir le message
    Un petit coup de ROME devrait faire l'affaire. Cette librairie s'occupe du parsing et de la validation et te permet de récupérer une liste d'entrée en sortie avec laquelle il te suffira de faire un size() pour vérifier la taille.
    J'ai commencé à faire cela, et j'obtiens toutes les informations contenues dans le fichier mais j'arrive pas vraiment à savoir comment faire pour ensuite récuper les données qui correspondent aux balises image, item ou channel ni comment vérifier qu'il n'y a pas plus de 5 balises item
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    import java.net.URL;
     
    import com.sun.syndication.feed.synd.SyndFeed;
    import com.sun.syndication.io.SyndFeedInput;
    import com.sun.syndication.io.XmlReader;
     
    public class Lecteur {
     
       public static void main (String[] args) 
       {
               try {
                   //URL feedUrl = new URL (args[0]);
    			   URL feedUrl = new URL ("http://cjoint.com/data/cAqd3DPJp7_flux_rss.xml");
     
                   SyndFeedInput input = new SyndFeedInput ();
                   SyndFeed feed = input.build (new XmlReader (feedUrl));
     
                   System.out.println (feed);
               } catch  (Exception ex) {
                   ex.printStackTrace ();
               }
       } // main ()
    } // Lecteur

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en prenant la javadoc de la classe SyndFeed tu devrais pouvoir t'en sortir.

    (genre méthode getEntries qui te renvoie bizarrement une liste de SyndEntry )
    Pour vérifier le nombre d'item il te suffit de faire un size sur ta liste.
    Et pour en récupérer les infos la classe SyndEntry devrait suffire non?

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah si c'est plus haut que dans les entries c'est dans la feed. Et les informations relatives à la balise channel.

    Ah petite information je n'ai jamais utilisé cette librarie, ni travaillé avec de la syndication. Donc si je trouve ces infos tu devrais normalement les trouver sans problème avec un tant soit peu de logique....

  6. #6
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par sinok Voir le message
    Bah si c'est plus haut que dans les entries c'est dans la feed. Et les informations relatives à la balise channel.

    Ah petite information je n'ai jamais utilisé cette librarie, ni travaillé avec de la syndication. Donc si je trouve ces infos tu devrais normalement les trouver sans problème avec un tant soit peu de logique....
    J'ai effacé le post précédent car j'allais en poster un nouveau vu que j'ai réglé ces soucis mais il me reste le fait de savoir comment passer à l'image suivante car on a pas de listes d'images comme pour les items.
    En partant de ce flux RSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?xml version="1.0" encoding="iso-8859-1" ?>
    <rss version="2.0">
    	<channel>
    		<title><![CDATA[NOM1]]></title>
    		<link><![CDATA[http://nom1.fr/infos/]]></link>
    		<description><![CDATA[NOM 1 RSS 2.0]]></description>
    		<copyright>Copyright nom1</copyright>
    		<lastBuildDate>Wed, 24 Feb 2008 16:56:00 GMT</lastBuildDate>
     
    		<image>
    			<title><![CDATA[Logo]]></title>
    			<url><![CDATA[http://nom1.fr/rss/img/logonom1.gif]]></url>
    			<link><![CDATA[http://nom1.fr/infos/]]></link>
    		</image>
     
    		<image>
    			<title><![CDATA[Pub]]></title>
    			<url><![CDATA[http://nom1.fr/rss/img/pub_nom1.gif]]></url>
    			<link><![CDATA[http://nom1.fr/pub_nom1.html/]]></link>
    		</image>
     
    		<item>
    			<title><![CDATA[Enseignement supérieur]]></title>
    			<link><![CDATA[http://nom1/infos/news1.html]]></link>
    			<description><![CDATA[Un départ sur six ne sera pas remplacé]]></description>
    			<enclosure url="http://nom1.fr/rss/img/img1.jpg" type="image/jpg" length="" />
    			<pubDate>Wed, 24 Feb 2008 16:56:00 +0000</pubDate>
    		</item>
     
    		<item>
    			<title><![CDATA[JO 2008]]></title>
    			<link><![CDATA[http://nom1/infos/news2.html]]></link>
    			<description><![CDATA[La fin des JO 2008]]></description>
    			<enclosure url="http://nom1.fr/rss/img/img2.jpg" type="image/jpg" length="" />
    			<pubDate>Wed, 15 Feb 2008 16:52:00 +0000</pubDate>
    		</item>
    	</channel>
    </rss>
    J'obtiens ceci en sortie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Title = NOM1
    Link = http://nom1.fr/infos/
    Description = NOM 1 RSS 2.0
    Copyright = Copyright nom1
    LastBuildDate = Sun Feb 24 17:56:00 CET 2008
     
    Title = Logo
    Url = http://nom1.fr/rss/img/logonom1.gif
    Link = http://nom1.fr/infos/
     
    Title = Logo
    Url = http://nom1.fr/rss/img/logonom1.gif
    Link = http://nom1.fr/infos/
     
    2 : le compte est bon
    title : Enseignement supérieur
    link : http://nom1/infos/news1.html
    description : Un départ sur six ne sera pas remplacé
    enclosure : 
    [SyndEnclosureImpl.type=image/jpg
    SyndEnclosureImpl.interface=interface com.sun.syndication.feed.synd.SyndEnclosure
    SyndEnclosureImpl.length=0
    SyndEnclosureImpl.url=http://nom1.fr/rss/img/img1.jpg
    ]
    pubDate : Sun Feb 24 17:56:00 CET 2008
    title : JO 2008
    link : http://nom1/infos/news2.html
    description : La fin des JO 2008
    enclosure : 
    [SyndEnclosureImpl.type=image/jpg
    SyndEnclosureImpl.interface=interface com.sun.syndication.feed.synd.SyndEnclosure
    SyndEnclosureImpl.length=0
    SyndEnclosureImpl.url=http://nom1.fr/rss/img/img2.jpg
    ]
    pubDate : Fri Feb 15 17:52:00 CET 2008
    et mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    import java.net.URL;
    import java.util.List;
    import com.sun.syndication.feed.synd.SyndFeed;
    import com.sun.syndication.feed.synd.SyndImage;
    import com.sun.syndication.io.SyndFeedInput;
    import com.sun.syndication.io.XmlReader;
    import com.sun.syndication.feed.synd.SyndEntry;
     
     
    public class Lecteur {
     
       public static void main (String[] args) 
       {
               try {
                   //URL feedUrl = new URL (args[0]);
    			   URL feedUrl = new URL ("http://cjoint.com/data/cBrs7LYSVG_flux_rss.xml");
     
                   SyndFeedInput input = new SyndFeedInput ();
                   SyndFeed feed = input.build (new XmlReader (feedUrl));
     
                   System.out.println("Title = " + feed.getTitle());
                   System.out.println("Link = " + feed.getLink());
                   System.out.println("Description = " + feed.getDescription());
                   System.out.println("Copyright = " + feed.getCopyright());
                   System.out.println("LastBuildDate = " + feed.getPublishedDate());
                   System.out.println("");
     
                   SyndImage si1 = feed.getImage();
                   System.out.println("Title = " + si1.getTitle());
                   System.out.println("Url = " + si1.getUrl());
                   System.out.println("Link = " + si1.getLink());
                   System.out.println("");
     
                   SyndImage si2 = feed.getImage();
                   System.out.println("Title = " + si2.getTitle());
                   System.out.println("Url = " + si2.getUrl());
                   System.out.println("Link = " + si2.getLink());
                   System.out.println("");
     
                   List<SyndEntry> listEntry = feed.getEntries();               
                   int size = listEntry.size();
                   if(size >= 5)
                   {
                	   System.out.println("pas plus de 5 items");
                   }
                   else
                   {
                	   System.out.println(size + " : le compte est bon");
                   }
                   for(SyndEntry se : listEntry)
                   {
                	   System.out.println("title : " + se.getTitle());
                	   System.out.println("link : " + se.getLink());
                	   System.out.println("description : " + se.getDescription().getValue());
                	   System.out.println("enclosure : ");
                	   System.out.println(se.getEnclosures());
                	   System.out.println("pubDate : " + se.getPublishedDate());
     
                   }
     
                   //System.out.println (feed);
               } catch  (Exception ex) {
                   ex.printStackTrace ();
               }
       } // main ()
    } // Lecteur

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en fait tout dépend de quelle image tu cherches, si c'est celle du feed ou celle de l'entry. Celle du feed s'obtient avec le getImage de SyncFeed, celle des entries se retrouve dans leur enclosure. (getEnclosure().getXXX() )

    https://rome.dev.java.net/apidocs/0_...Enclosure.html

  8. #8
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par sinok Voir le message
    Bah en fait tout dépend de quelle image tu cherches, si c'est celle du feed ou celle de l'entry. Celle du feed s'obtient avec le getImage de SyncFeed, celle des entries se retrouve dans leur enclosure. (getEnclosure().getXXX() )

    https://rome.dev.java.net/apidocs/0_...Enclosure.html
    Je souhaitais pour les deux. Dans le cas de l'entry, j'ai réussi à le faire via les méthodes que tu as donnés mais pour les images provenant du feed, je n'arrive à récupérer que la première car il n'existe pas de listes d'images ...
    J'ai écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //URL feedUrl = new URL (args[0]);
    			   URL feedUrl = new URL ("http://cjoint.com/data/cBrs7LYSVG_flux_rss.xml");
     
                   SyndFeedInput input = new SyndFeedInput ();
                   SyndFeed feed = input.build (new XmlReader (feedUrl));
     
                   System.out.println("Title = " + feed.getTitle());
                   System.out.println("Link = " + feed.getLink());
                   System.out.println("Description = " + feed.getDescription());
                   System.out.println("Copyright = " + feed.getCopyright());
                   System.out.println("LastBuildDate = " + feed.getPublishedDate());
                   System.out.println("");
     
                   SyndImage si1 = feed.getImage();
                   System.out.println("Title = " + si1.getTitle());
                   System.out.println("Url = " + si1.getUrl());
                   System.out.println("Link = " + si1.getLink());
                   System.out.println("");
     
                   SyndImage si2 = feed.getImage();
                   System.out.println("Title = " + si2.getTitle());
                   System.out.println("Url = " + si2.getUrl());
                   System.out.println("Link = " + si2.getLink());
                   System.out.println("");
    En sortie, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Title = NOM1
    Link = http://nom1.fr/infos/
    Description = NOM 1 RSS 2.0
    Copyright = Copyright nom1
    LastBuildDate = Sun Feb 24 17:56:00 CET 2008
     
    Title = Logo
    Url = http://nom1.fr/rss/img/logonom1.gif
    Link = http://nom1.fr/infos/
     
    Title = Logo
    Url = http://nom1.fr/rss/img/logonom1.gif
    Link = http://nom1.fr/infos/
    Donc je récupere deux fois la même image

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    On va faire simple, un channel contenant de multiples éléments image est tout simplement non valide.

    cf: http://www.validome.org/check/RSS_va...tion/main#a156

  10. #10
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Citation Envoyé par sinok Voir le message
    On va faire simple, un channel contenant de multiples éléments image est tout simplement non valide.

    cf: http://www.validome.org/check/RSS_va...tion/main#a156
    Mais si on doit quand même pouvoir récupérer les images en question. Il existe une facon de contourner le probleme?

  11. #11
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah dans ce cas là tu t'armes d'une API XML normale genre l'API DOM de java ou JDOM pour faire un peu plus propre et tu te fades tout ça à la main.

    Mias bon vu que le titre de ton topic est Flux RSS valide, du coup on est plus du tout dans l'idée

  12. #12
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Par défaut
    Maintenant, j'ai toutes les infos qu'il me faut. Comment faut-il que je fasse pour télécharger les images dont j'ai récupérer les urls ainsi que pour vérifier les dimensions et le poids de ces images?

    Merci

  13. #13
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    En utilisant les classes URL et URLConnection.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    URL url = new URL("http://www.toto.com/monImage.png");
    URLConnection conn = url.getConnection();
    int size=conn.getContentLength(); //Pour récupérer le poids
    BufferedImage im = ImageIO.read(conn.getImputStream());
    int width = im.getWidth();
    int height = im.getHeight();
    Bref c'est relativement simple. Par contre je n'ai pas codé toute la partie gestion d'erreurs & cie

Discussions similaires

  1. [DOM XML] Problème avec la validation d'un flux RSS
    Par JackBeauregard dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 04/05/2008, 00h54
  2. Flux RSS non valide
    Par Nixar dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/02/2008, 10h04
  3. [Librairies] Flux RSS en PHP4 à partir d'un code en PHP5 valide
    Par ffrag dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 09/05/2006, 14h16
  4. Flux RSS valide mais contient des erreurs
    Par maximenet dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 24/04/2006, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo