Rechercher : dans
Par :

Extraire info d'un flux rss en bash

Dernière réponse le 26 mai 2009 à 11:52:47 dansei10000, le 25 mai 2009 à 11:09:00 
 Signaler ce message aux modérateurs

Bonjour,

j'utilise Linux/ubuntu et j'aimerais élaborer un petit programme bash qui me permettrait d'afficher des informations extraite d'un flux RSS (en fait les titres de certaines manifestations) en ligne.

Est-ce possible ? Je pense que oui mais cela dépasse de très loin mes capacités.

merci à tous par avance !
Dansei

PS : cela me servira dans kmail et me permettra d'insérer ces informations automatiquement dans ma signature

Configuration: Linux
Firefox 3.0.10

Meilleures réponses pour « Extraire info d'un flux rss en bash » dans :
Agrégateurs RSS (lecteurs de fils RSS) VoirAgrégateurs RSS (lecteurs de fils RSS) Présentation générale des flux RSS Principaux agrégateurs RSS Agrégateurs RSS online Présentation générale des flux RSS Le standard RSS représente un moyen d'être tenu informé des nouveaux contenus...
Les flux RSS pour l'entreprise VoirUsages des flux rss pour l'entreprise Le développement du Web 2.0 (un Internet plus participatif et réactif), offre aux entreprises avec les flux RSS un outil majeur dans leurs stratégies marketing. Les flux RSS sont également des éléments...
Télécharger ARA Editeur RSS VoirLe flux RSS est une liste de mise à jour publiée ou diffusé sur une blog ou un site internet. Il affiche un résumé d’information pour un article sans avoir consulter le site en question. ARA est un programme permettant de composer et...
Les standards RSS VoirLe standard RSS Un flux RSS est un simple fichier texte contenant des informations structurées au format XML, permettant de décrire de façon fine le contenu du canal et de chacun des items qui le constituent. Il existe plusieurs versions du...

1

ahmet0851, le 25 mai 2009 à 11:45:09

Salut !

Je pense que oui. Etant donnée qu'un flux RSS est un fichier XML, ca ne doit pas être compliqué.
Tu dois avoir une sorte de balisage comme en HTML dans ce flux du genre <information>l'info de ouf !</information>

Il suffit de lire le fichier ligne par ligne et de chercher la chaine <information> et de faire ton découpage entre 3 blocs et récupérer l'info.

Je ne suis pas un AS en batch mais c'est largement faisable.

Quelques liens pour t'aider

Lire fichier texte => http://www.commentcamarche.net/faq/sujet 5027 comment lire un fichier ligne par ligne

Découper une chaîne de caractères =>http://www.commentcamarche.net/forum/affich 6742165 decouper chaine de caractere

Bon courage! Si quelqu'un vous aide un merci et un résolu (petite case à droite de votre 1er message) !! 

Répondre à ahmet0851

2

dansei10000, le 25 mai 2009 à 22:21:24

Bonsoir Ahmet,
je te remercie de ta réponse.
Je suis allé voir les liens que tu proposes mais, malheureusement, ça ne me suffit pas ... désolé

En fait, je voudrais extraire des informations d'un fichier ayant la forme suivante :

<div id="feedContent">
   <div class="entry"><h3><a href="http://www.jinnove.com/...">Rencontre Nationale des Directeurs de l'Innovation 2009 - lundi 25 mai 2009</a></h3><div xml:base="http://www.jinnove.com/flux_rss?export=agenda.xml" class="feedEntryContent">Le thème de cette deuxième rencontre est « Innover pour sortir de la crise et repartir en croissance »...<BR xmlns=""/><A xmlns="" href="http://www.jinnove.com/...">Lire la suite...</A></div></div>
 <div style="clear: both;"/><div class="entry"><h3><a href="http://www.jinnove.com/fr/Agenda/Conference-sur-l-Intelligence-Economique5">Conférence sur l'Intelligence Economique - mardi 26 mai 2009</a></h3><div xml:base="http://www.jinnove.com/flux_rss?export=agenda.xml" class="feedEntryContent">L'Intelligence Economique en soutien à l'Innovation. Au programme : "pratiquer l'innovation au quotidien dans l'entreprise"...<BR xmlns=""/><A xmlns="" href="http://www.jinnove.com/fr/Agenda/Conference-sur-l-Intelligence-Economique5">Lire la suite...</A></div></div><div style="clear: both;"/>
<div class="entry">.... etc ...
</div> 


Les seules informations qui m'intéressent sont en fait celles situées entre les balises h3

J'espère avoir été plus clair, merci

Répondre à dansei10000

3

jipicy, le 25 mai 2009 à 22:54:54

Salut,

sed -n 's#.*<h3>\(.*\)</h3>.*#\1#p' fichier
;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

4

dansei10000, le 25 mai 2009 à 23:21:53

Oh la la
merci beaucoup beaucoup !
ça me fait beaucoup avancer vers mon objectif final

deux choses cependant :
- pourrais-tu m'expliquer un petit peu le sens de l'expression régulière utilisée (parce que c'est cryptique et que, même en essayant de lire les doc que je peux trouver, ça reste ... magique et mystérieux) (comme ça, je pourrais essayer de comprendre suffisamment pour l'adapter tout seul et ne garder que les titres, sans les balises <A ...></A>
- je voudrais que ce script s'applique à un fichier qui est en ligne. Penses-tu que je peux m'en sortir en utilisant la commande wget par exemple ?

Même si tu ne réponds pas à ce mail, merci encore pour les informations déjà fournies !

Répondre à dansei10000

5

jipicy, le 26 mai 2009 à 07:40:59

Si tu ne veux que les titres :

sed -n 's#.*<h3>\(.*\)</h3>.*#\1#;s#.*">\(.*\)<.*#\1#p' fichier
avec cette modification ça devrait le faire...

Pour ce qui est de récupérer le fichier un truc du genre devrait le faire :
wget  url_du_fichier.rss.xml
pour le parser directement au travers d'un pipe avec "sed" :
wget -q -O - url_du_fichier.rss.xml | sed 'blablabla'
Pour les explications des regex, j'essaierai de trouver 5 minutes dans la journée pour t'expliquer ça.
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy

6

dansei10000, le 26 mai 2009 à 11:21:43

Encore merci !
J'avais également réussi vaguement à obtenir les titres (sauf que je l'ai fait sans trop comprendre et en bidouillant ta commande)
sed -n 's#.*>\(.*\)</a.*#\1#p' mon_fichier

(je ne sais pas pourquoi mais la différence avec la commande que tu proposes c'est que dans ton cas, quelques lignes apparaissent en plus que je ne veux pas -pour info, le fichier sur lequel je bosse est le suivant : http://www.jinnove.com/flux_rss?export=agenda.xml)

Finalement, tout marche presque sauf que ... je n'obtiens pas tous les évènements du fichier. En fait, tout se passe comme si sed ne prenant qu'un seul évènement par ligne alors qu'il peut y en avoir plusieurs ! (dans mon exemple je ne récupère que 3 évènements !)

Je me demande ce qui serait le plus simple entre ajouter des lignes dans le fichier entre chacun des évènements avant d'y appliquer la commande sed ou bien modifier cette commande sed (déjà qu'elle me parait bien difficile) afin qu'elle puisse extraire éventuellement plusieurs évènements par ligne et les afficher sur plusieurs lignes.

J'espère avoir été clair.

En tout cas, merci pour ton aide !

Répondre à dansei10000

7

dansei10000, le 26 mai 2009 à 11:34:07

Ouh la la
je viens de m'apercevoir d'une grosse erreur

en fait c'est beaucoup plus simple que je ne le pensais car je ne travaillant pas sur le bon fichier (en fait j'ais fait "enregistrer sous" à partir de firefox affichant le flux rss et du coup le navifgateur avait ajouté plein de code qui n'était pas dans le fichier d'origine)

En fait la commande suivante marche parfaitement :
sed -n 's#.*<title>\(.*\)</title>.*#\1#p' mon_fichier

Je n'ai plus qu'à trouver comment supprimer la première ligne (et choisir par exemple de ne garder que les 5 suivantes) pour avoir enfin terminé cette petite tâche que je m'étais fixé.

encore merci pour tout !

Répondre à dansei10000

8

 jipicy, le 26 mai 2009 à 11:52:47

Re-

wget -q -O - http://www.jinnove.com/flux_rss?export=agenda.xml | sed -n 's#.*<title>\(.*\)</title>.*#\1#p'
marche parfaitement chez moi ;-))
$ man woman
Il n'y a pas de page de manuel pour woman.

Répondre à jipicy