Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/05/2007, à 01:27

jovial

[résolu] lire données fichier xml avec bash

Bonjour

J'ai un bash script  où  je souhaite récupérer une liste de fichiers dans un fichier xml

cela se présente sous cette forme!

<?xml version="1.0"?>
<rhythmdb-playlists>
  ... 
 </playlist>
  <playlist name="ambiance.m3u" type="static">
    <location>file:///media/JLUC-USB/ambiance/08-Hymn%202.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/15.%20Goran%20Bregovic%20-%20Lullabye.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/06-Y%20Tu%20Que%20has%20Hecho.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/02-Maya.mp3</location>
  </playlist>
</rhythmdb-playlists>

Et je souhaiterai convertir en un fichier texte de forme

Liste=ambiance.m3u
08-Hymn 2.mp3
03-Zuell - Olas De Sal.mp3
15. Goran Bregovic - Lullabye.mp3
06-Y Tu Que has Hecho.mp3
02-Maya.mp3

C'est possible, comment vous voyez la chose?

Bye

Jean-Luc

Dernière modification par jovial (Le 28/05/2007, à 20:59)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#2 Le 23/05/2007, à 05:53

abetsic

Re : [résolu] lire données fichier xml avec bash

Bonjour,

voilà smile

#!/bin/bash
#parse_fichier_xml.sh
grep m3u $1 | sed 's/^.*name=\"\(.*m3u\).*/\1/'
grep location $1 | sed 's#.*/\(.*mp3\).*#\1#' | sed 's/%20/ /g'

tu l'appelles avec le nom du fichier xml à parser.

Petite explication du script :
On récupère la ligne qui contient le nom du fichier m3u par grep, on envoie cette ligne à sed qui utilises une expression régulière, ce qui est entre () correspond au nom du fichier m3u, que l'on peut réutiliser dans la seconde partie de la commande sed grace à \1. Comme la seconde partie de la commande sed ne contient que \1 seul le nom du fichier m3u est affiché.

On procède de la même façon pour les fichiers mp3. Petite remarque, j'ai utilisé le séparateur "#" au lieu de "/" dans une commande sed, c'était juste pour éviter d'avoir à échapper le "/" que j'utilise dans l'expression régulière pour isoler le nom du fichier mp3.


Voilà voilà... Il y a sûrement une autre méthode avec uniquement grep...

Hors ligne

#3 Le 23/05/2007, à 06:51

marc31

Re : [résolu] lire données fichier xml avec bash

si tu veux installer php5-cli, je t'ecris le script :-)


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#4 Le 23/05/2007, à 09:04

jovial

Re : [résolu] lire données fichier xml avec bash

@abetsic
Merci je le sens bien wink j'essaye cela dès que possible

@marc31
C'est gentil mais J'ai déjà bien à faire à apprendre le bash donc pas pour tout de suite.

Réponse à 05:53 et 06:51
Vous vous levez de bonheur, vous faite les 3x8 où vous habitez dans des contrées lointaine?

Bye

smile

Dernière modification par jovial (Le 23/05/2007, à 09:08)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#5 Le 23/05/2007, à 10:16

jovial

Re : [résolu] lire données fichier xml avec bash

J'ai testé rapidement avec une copie de playlist.xml de rhythmbox
avec le code suivant:

#!/bin/bash
#parse_fichier_xml.sh
fichxml="/home/jovial/Desktop/playlists.xml"
grep m3u $fichxml | sed 's/^.*name=\"\(.*m3u\).*/\1/'
grep location $1 | sed 's#.*/\(.*mp3\).*#\1#' | sed 's/%20/ /g'

Cela me retourne dans le terminal:
00 ambiance.m3u
c'est déja un bon début
mais en fait mon exemple était imcomplet.
Ce que j'ai besoin c'est de récupérer les noms de playlist de type "static" et leur contenu <location>

mon fichier xml complet:

<?xml version="1.0"?>
<rhythmdb-playlists>
  <playlist name="Liste d'attente" type="queue"/>
  <playlist name="R&#xE9;cemment lu" type="automatic" sort-key="LastPlayed" sort-direction="1">
    <conjunction>
      <equals prop="type">song</equals>
      <subquery>
        <conjunction>
          <current-time-within prop="last-played">604800</current-time-within>
        </conjunction>
      </subquery>
    </conjunction>
  </playlist>
  <playlist name="Mon top" type="automatic" sort-key="Rating" sort-direction="1">
    <conjunction>
      <equals prop="type">song</equals>
      <subquery>
        <conjunction>
          <greater prop="rating">4,000000</greater>
        </conjunction>
      </subquery>
    </conjunction>
  </playlist>
  <playlist name="ambiance1" type="static">
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20-%20as%20if%20to%20nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD2/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/10.%20Katie%%20Records%20On.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/11.%20Katie%20Melua%20-%20I%20Cried%20For%20You.mp3</location>
    <location>file:///home/jovial/Musique/Corrine%20Bailey/Enchantment.mp3</location>
    <location>file:///home/jovial/Musique/Moby/14-At%20least%20we%20tried.mp3</location>
    <location>file:///home/jovial/Musique/Denez%20Pregent/13.%20Denez%20Prigent%20-%20Gortoz%20a%20ran%20(bonus%20track%20extrait%20de%20la%20.mp3</location>
    <location>file:///home/jovial/Musique/Laurent%20Voulzy%20-%20Avril/03-Quatre%20nuages.mp3</location>
    <location>file:///home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/11-Orgullecida.mp3</location>
    <location>file:///home/jovial/Musique/Marwiok/luc_marwiok_la_cour_de_recre.mp3</location>
    
  </playlist>
  <playlist name="00 ambiance.m3u" type="static">
    <location>file:///media/JLUC-USB/ambiance/08-Hymn%202.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/10.%20Katie%20Melua%20-%20Just%20Like%20Heaven.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/07.%20Katie%20Melua%20-%20Blue%20Shoes.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/11-The%20day%20before%20my%20birthday.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/Wax%20Tailor%20-%2015%20-%20A%20Woman's%20Voice.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/15.%20Goran%20Bregovic%20-%20Lullabye.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/06-Y%20Tu%20Que%20has%20Hecho.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/02-Maya.mp3</location>
  </playlist>
</rhythmdb-playlists>

Hypothétiquement selon ma logique de débutant je verrai la chose suivante
- je lis le fichier ligne par ligne
- dés que je rencontre le mot static je récupére le nom de liste ex: "ambiance1"
- pour les lignes suivantes tant que je ne trouve  pas </playlist> j'ajoute la ligne <location>.... à mon fichier texte
-Après je traite mon fichier texte pour virer les <location >et convertir l'URL dans un format lisible

Pour moi c'est déjà costeau au niveau programmation
Je vais étudier le code de abetsic mais j'avoue que je suis un peu largué.
Si voyez quelque chose qui peut m'aider, je veux bien de l'aide.

Merci

bye bye

smile

Dernière modification par jovial (Le 23/05/2007, à 10:20)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#6 Le 23/05/2007, à 14:02

jovial

Re : [résolu] lire données fichier xml avec bash

hello

j'ai trouvé quelques pistes

Donc Grep me récupère les ligne possédant la chaine spécifié  et les numérotes (-n)
sed me permet d'enlever des morceau de chaine

grep -n static $fichxml | sed -e 's/\" type="static">//g' | sed -e 's/<playlist name="//g'
me sort les nom de liste et leurs N° de ligne
ex pour  <playlist name="ambiance1" type="static"> j'obtiens ;   24:  ambiance1


grep -n location $fichxml | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//g'
me sort les chemins et leurs N° de ligne
ex: 25:/home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/08-Hymn%202.mp3

Après je vois pas encore comment exploiter le résultat pour par exemple lire tous les fichiers de "ambiance1"

bye


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#7 Le 23/05/2007, à 16:06

abetsic

Re : [résolu] lire données fichier xml avec bash

Salut,

Hop :

grep -nE "location|static" bidule2.xml | sed -e 's/\" type="static">//g' | sed -e 's/<playlist name="//g' | sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//g' | sed 's/%20/ /g'

Avec ça tu récupères les lignes qui contiennent location ou static, puis tu fais les traitements sur ces lignes...

Après pour n'afficher que les fichiers de ambiance1, je pense qu'il faut se tourner vers un autre langage de script qui gère le xml et abadonner bash... python doit faire ça très facilement je pense... Il est néanmoins certainement possible de faire ce que tu souhaites en bash, mais j'ai pas le temps de m'en occuper tout de suite, je regarderai ce soir si j'ai un peu de temps.

edit : contrée lointaine pour moi, gmt-5 wink

Dernière modification par abetsic (Le 23/05/2007, à 16:09)

Hors ligne

#8 Le 23/05/2007, à 22:28

BlaireauOne

Re : [résolu] lire données fichier xml avec bash

Si tu as xmllint (parseur xml), tu peux déja sélectionner les "playlist" de type "static" comme suit smile:


xmllint --shell rythm.xml <<EOD
cat //playlist[@type='static']
EOD

Résultat :

/ > cat //playlist[@type='static']
 -------
<playlist name="ambiance1" type="static">
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20-%20as%20if%20to%20nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD2/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/10.%20Katie%%20Records%20On.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/11.%20Katie%20Melua%20-%20I%20Cried%20For%20You.mp3</location>
    <location>file:///home/jovial/Musique/Corrine%20Bailey/Enchantment.mp3</location>
    <location>file:///home/jovial/Musique/Moby/14-At%20least%20we%20tried.mp3</location>
    <location>file:///home/jovial/Musique/Denez%20Pregent/13.%20Denez%20Prigent%20-%20Gortoz%20a%20ran%20(bonus%20track%20extrait%20de%20la%20.mp3</location>
    <location>file:///home/jovial/Musique/Laurent%20Voulzy%20-%20Avril/03-Quatre%20nuages.mp3</location>
    <location>file:///home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/11-Orgullecida.mp3</location>
    <location>file:///home/jovial/Musique/Marwiok/luc_marwiok_la_cour_de_recre.mp3</location>
    
  </playlist>
 -------
<playlist name="00 ambiance.m3u" type="static">
    <location>file:///media/JLUC-USB/ambiance/08-Hymn%202.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/10.%20Katie%20Melua%20-%20Just%20Like%20Heaven.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/07.%20Katie%20Melua%20-%20Blue%20Shoes.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/11-The%20day%20before%20my%20birthday.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/Wax%20Tailor%20-%2015%20-%20A%20Woman's%20Voice.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/15.%20Goran%20Bregovic%20-%20Lullabye.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/06-Y%20Tu%20Que%20has%20Hecho.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/02-Maya.mp3</location>
  </playlist>
/ > 
/ >

Hors ligne

#9 Le 24/05/2007, à 01:39

jovial

Re : [résolu] lire données fichier xml avec bash

Hello

Oui abetsic c'est mieux
Merci

Merci BlaireauOne
Cela fonctionne je supose que xmllint est nativement sur Feisty
en précisant playlist[@name='ambiance1' je récupère cette liste
J'ai adapté le code

#!/bin/bash
#parse_fichier_xml.sh

fichxml="/home/jovial/Desktop/playlists.xml"

grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'

dialresult=`grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'|\
     zenity --list \
            --title "Listes de lecture Rhythmbox" \
            --width=300 \
            --height=300 \
            --text "" \
            --column "Sélectionnez une liste"`

# j'ajoute les apostrophes et j'enleve les 2 espaces devant(pas compris pourquoi???)
dialresult=\'${dialresult:2}\'
echo $dialresult

xmllint --shell $fichxml <<EOD
cat //playlist[@name=$dialresult]
EOD

zenity --info --title=" " --text="reste à exploiter le résultat"

par contre j'arrive pas à rediriger le résultat du parseur.


Bye

ZZZ


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#10 Le 24/05/2007, à 02:58

abetsic

Re : [résolu] lire données fichier xml avec bash

Tu as essayé ça :

xmllint --shell $fichxml >ton_fichier <<EOD

Hors ligne

#11 Le 24/05/2007, à 10:37

jovial

Re : [résolu] lire données fichier xml avec bash

abetsic a écrit :

Tu as essayé ça :

xmllint --shell $fichxml >ton_fichier <<EOD

Ben oui tu m'a encore donné la solution smile:):cool:

Donc on choisi un noms de liste dans zenity
Et on affiche la liste dans zenity


#!/bin/bash
#parse_playlist.xml.sh
echo emplacement de votre playlist Rhythmbox 
echo ~/.gnome2/rhythmbox/playlists.xml
# Dans le code suivant j'en ai fait une copie sur mon bureau

fichxml="/home/jovial/Desktop/playlists.xml"
fichtxt="/home/jovial/Desktop/playlists.txt"
grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'

dialresult=`grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'|\
     zenity --list --title "Listes de lecture Rhythmbox" \
            --width=300 --height=300 \
            --text "" --column "Sélectionnez une liste"`

# j'ajoute les apostrophes et j'enleve les 2 espaces devant(pas compris pourquoi???)
dialresult=\'${dialresult:2}\'
echo ---------------
echo $dialresult

#cat //playlist[@name='ambiance1']
xmllint --shell $fichxml >$fichtxt <<EOD
cat //playlist[@name=$dialresult]
EOD

grep  '<location>' $fichtxt | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | sed 's/%20/ /g' 

grep  '<location>' $fichtxt | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | sed 's/%20/ /g'|\
zenity --text-info --title="Liste de lecture: $dialresult" --width=800 --height=400 \ \

Donc on approche du but,

Reste à paufiner le code
- dans le résultat des noms de liste j'ai 2 espaces avant, je comprends pas pourquoi???
- il me semble avoir vu que l'on peut rediriger un résultat à la fois sur le terminal et un fichier(ou zenity), ou simplement passer par une variable pour éviter de doubler les instructions
- convertir les formats URL il doit y avoir autre chose que sed

Et merci smile

Jean-luc


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#12 Le 24/05/2007, à 16:00

abetsic

Re : [résolu] lire données fichier xml avec bash

Pour les deux espaces au début de nom de fichier, c'est certainement parce que les espaces sont présent sur les lignes du fichier xml (l'indentation).

Tu dois pouvoir les supprimer avec une regle du genre

sed 's/^ *//'

Ca remplace un nombre inconnu (*) d'espace en début de ligne (^)par rien.

Pour rediriger à la fois vers le terminal et vers un fichier il y a la commande "tee", regarde bien le man, une fois je l'ai testé comme un bourrin et ça m'a effacé tout les fichiers dans le repertoire courant... hmm Mais si tu lis bien la page de man et que tu t'entraines dans un repertoire vide, il ne devrait pas y avoir de problèmes.

Qu'est ce que tu appelles convertir l'url ? Si c'est juste récupérer le nom de fichier, tu as la commande "basename" qui fait ça.

Voilà voilà smile

et de rien wink

Dernière modification par abetsic (Le 24/05/2007, à 16:04)

Hors ligne

#13 Le 24/05/2007, à 23:50

jovial

Re : [résolu] lire données fichier xml avec bash

abetsic a écrit :

Qu'est ce que tu appelles convertir l'url ? Si c'est juste récupérer le nom de fichier, tu as la commande "basename" qui fait ça.

voir post http://forum.ubuntu-fr.org/viewtopic.php?id=122081


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#14 Le 25/05/2007, à 07:20

marc31

Re : [résolu] lire données fichier xml avec bash

voici mon code php :

<?php

error_reporting(E_ALL);

$data = <<<EOF
<?xml version="1.0"?>
<rhythmdb-playlists>
  <playlist name="Liste d'attente" type="queue"/>
  <playlist name="R&#xE9;cemment lu" type="automatic" sort-key="LastPlayed" sort-direction="1">
    <conjunction>
      <equals prop="type">song</equals>
      <subquery>
        <conjunction>
          <current-time-within prop="last-played">604800</current-time-within>
        </conjunction>
      </subquery>
    </conjunction>
  </playlist>
  <playlist name="Mon top" type="automatic" sort-key="Rating" sort-direction="1">
    <conjunction>
      <equals prop="type">song</equals>
      <subquery>
        <conjunction>
          <greater prop="rating">4,000000</greater>
        </conjunction>
      </subquery>
    </conjunction>
  </playlist>
  <playlist name="ambiance1" type="static">
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Craig%20Armstrong%20-%20as%20if%20to%20nothing/08-Hymn%202.mp3</location>
    <location>file:///home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD2/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/10.%20Katie%%20Records%20On.mp3</location>
    <location>file:///home/jovial/Musique/Katie%20Melua/11.%20Katie%20Melua%20-%20I%20Cried%20For%20You.mp3</location>
    <location>file:///home/jovial/Musique/Corrine%20Bailey/Enchantment.mp3</location>
    <location>file:///home/jovial/Musique/Moby/14-At%20least%20we%20tried.mp3</location>
    <location>file:///home/jovial/Musique/Denez%20Pregent/13.%20Denez%20Prigent%20-%20Gortoz%20a%20ran%20(bonus%20track%20extrait%20de%20la%20.mp3</location>
    <location>file:///home/jovial/Musique/Laurent%20Voulzy%20-%20Avril/03-Quatre%20nuages.mp3</location>
    <location>file:///home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/11-Orgullecida.mp3</location>
    <location>file:///home/jovial/Musique/Marwiok/luc_marwiok_la_cour_de_recre.mp3</location>
    
  </playlist>
  <playlist name="00 ambiance.m3u" type="static">
    <location>file:///media/JLUC-USB/ambiance/08-Hymn%202.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/03-Zuell%20-%20Olas%20De%20Sal.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/10.%20Katie%20Melua%20-%20Just%20Like%20Heaven.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/07.%20Katie%20Melua%20-%20Blue%20Shoes.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/11-The%20day%20before%20my%20birthday.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/Wax%20Tailor%20-%2015%20-%20A%20Woman's%20Voice.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/15.%20Goran%20Bregovic%20-%20Lullabye.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/06-Y%20Tu%20Que%20has%20Hecho.mp3</location>
    <location>file:///media/JLUC-USB/ambiance/02-Maya.mp3</location>
  </playlist>
</rhythmdb-playlists>
EOF;

$xml = new SimpleXMLElement($data); #on peut aussi lire sur stdin ;
# print_r($xml);  # affiche le contenu interne de la structure XML - pratique pour debuger
foreach($xml->playlist as $playlist){
	if($playlist['type'] == 'static'){
		printf("Liste=%s\n", $playlist['name']);
		foreach($playlist->location as $location){
			$location = str_replace('file://', '', $location); # suppression de file:///
			$location = basename($location); # suppression du repertoire
			printf("%s\n", urldecode($location));
		}
		echo "\n";
	}
}
?>

et le résultat :

marc@ubuntu-feisty:~/public_html/php$ php -q simple-xml.php
Liste=ambiance1
08-Hymn 2.mp3
08-Hymn 2.mp3
03-Zuell - Olas De Sal.mp3
10. Katie% Records On.mp3
11. Katie Melua - I Cried For You.mp3
Enchantment.mp3
14-At least we tried.mp3
13. Denez Prigent - Gortoz a ran (bonus track extrait de la .mp3
03-Quatre nuages.mp3
11-Orgullecida.mp3
luc_marwiok_la_cour_de_recre.mp3

Liste=00 ambiance.m3u
08-Hymn 2.mp3
03-Zuell - Olas De Sal.mp3
10. Katie Melua - Just Like Heaven.mp3
07. Katie Melua - Blue Shoes.mp3
11-The day before my birthday.mp3
Wax Tailor - 15 - A Woman's Voice.mp3
15. Goran Bregovic - Lullabye.mp3
06-Y Tu Que has Hecho.mp3
02-Maya.mp3

si jamais tu es intéressé, je peux modifier pour qu'il lise un fichier a la place, ou sur l'entrée standard (stdin). Le script fait vraiment peu de lignes. Il me semble que c'est tout de meme assez lisible (ca ressmble a du perl si jamais).


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#15 Le 25/05/2007, à 09:50

jovial

Re : [résolu] lire données fichier xml avec bash

@marc31

Ton script semble intéressant.
Si on enléve basename il produit exactement ce que je veux: Extraire une liste de fichier avec leur chemin vers un fichier texte, après on peut en faire ce qu'on veux avec bash:
Par ex: les copier, les lire avec un lecteur, extraire les tag...

Maintenant j'essaye de faire la chose dans un bash script

Jusque là j'arrive à extraire une liste, par ex ambiance 1 sous cette forme

/home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/08-Hymn%202.mp3
/home/jovial/Musique/Craig%20Armstrong%20-%20as%20if%20to%20nothing/08-Hymn%202.mp3
/home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD2/03-Zuell%20-%20Olas%20De%20Sal.mp3
/home/jovial/Musique/Katie%20Melua/10.%20Katie%20Melua%20-%20Just%20Like%20Heaven.mp3
/home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD2/10-UKO%20-%20Sunbeams.mp3
/home/jovial/Musique/Katie%20Melua/07.%20Katie%20Melua%20-%20Blue%20Shoes.mp3
/home/jovial/Musique/Moby/11-The%20day%20before%20my%20birthday.mp3
/home/jovial/Musique/Wax%20tailor/Wax%20Tailor%20-%2015%20-%20A%20Woman's%20Voice.mp3
/home/jovial/Musique/Goran%20bregovic/15.%20Goran%20Bregovic%20-%20Lullabye.mp3
/home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/06-Y%20Tu%20Que%20has%20Hecho.mp3
/home/jovial/Musique/Susheela%20Raman%20-%20Salt%20Rain/02-Maya.mp3
/home/jovial/Musique/Higelin%20Illicite/04.%20Jacues%20Higelin%20-%20Ballade%20pour%20Izia.mp3
/home/jovial/Musique/Laurent%20Voulzy%20-%20Avril/10-La%20fille%20d'avril.mp3
/home/jovial/Musique/Craig%20Armstrong%20%20-%20As%20If%20To%20Nothing/16-innonnu.mp3
/home/jovial/Musique/Caf%C3%A9%20del%20Mar%20-%20VOL%2010/05-DAB%20_%20The%20Blues.mp3
/home/jovial/Musique/Caf%C3%A9%20del%20Mar%20-%20VOL%2010/12-Vargo%20_%20The%20Moment.mp3
/home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD1/01-Paco%20De%20Lucia%20-%20Entre%20Dos%20Aguas.mp3
/home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD1/06-Jos%C3%A9%20Padilla%20-%20Adios%20Ayer.mp3
/home/jovial/Musique/Best%20of%20Caf%C3%A9%20del%20Mar%20CD1/11-Erik%20Satie%20-%20Gymnopedie%20No.%201.mp3
/home/jovial/Musique/Craig%20Armst
rong%20%20-%20As%20If%20To%20Nothing/15-Choral%20Ending.mp3
/home/jovial/Musique/Corrine%20Bailey/Put%20Your%20Records%20On.mp3
/home/jovial/Musique/Katie%20Melua/11.%20Katie%20Melua%20-%20I%20Cried%20For%20You.mp3
/home/jovial/Musique/Corrine%20Bailey/Enchantment.mp3
/home/jovial/Musique/Moby/14-At%20least%20we%20tried.mp3
/home/jovial/Musique/Denez%20Pregent/13.%20Denez%20Prigent%20-%20Gortoz%20a%20ran%20(bonus%20track%20extrait%20de%20la%20.mp3
/home/jovial/Musique/Laurent%20Voulzy%20-%20Avril/03-Quatre%20nuages.mp3
/home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/11-Orgullecida.mp3
/home/jovial/Musique/Marwiok/luc_marwiok_la_cour_de_recre.mp3
/home/jovial/Musique/Higelin%20Illicite/02.%20Jacues%20Higelin%20-%20Ce%20quie%20est%20dit%20doit%20etre%20fait.mp3
/home/jovial/Musique/Lhasa/La%20Llorona/09%20-%20El%20P%C3%A1jaro.mp3
/home/jovial/Musique/Moby/06-One%20of%20these%20mornings.mp3
/home/jovial/Musique/Ry%20%20Cooder/Buena%20vista%20social%20club/01-Chan%20Chan.mp3
/home/jovial/Musique/Tom%20Waits/The%20Heart%20of%20Saturday%20Night/06%20-%20(Looking%20for)%20the%20Heart%20of%20Saturday%20Night.mp3

Maintenant est ce qu'on peut lancer ce code à partir du bash

Par exemple créer un fichier php, l'exécuter, balancer le résultat dans un fichier texte"
Bon il faut que j'essaye ton code.

En tout cas merci bien pour ta réponse.

Bye

smile

Dernière modification par jovial (Le 25/05/2007, à 13:34)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#16 Le 25/05/2007, à 14:20

jovial

Re : [résolu] lire données fichier xml avec bash

Bon Alain m'a donné la solution pour utiliser la fonction decodeURL de perl voir post

Le script me lit mon fichier xml, m'extrait une liste et crée un fichier de liste *.m3u

h
#parse_playlist.xml.sh

mp3info -p %a /home/jovial/Desktop/02-Maya.mp3
#mp3info -p %g /home/jovial/Desktop/02-Maya.mp3


echo emplacement de votre playlist Rhythmbox 
echo ~/.gnome2/rhythmbox/playlists.xml
# Dans le code suivant j'en ai fait une copie sur mon bureau

fichxml="/home/jovial/Desktop/playlists.xml"
fichtxt="/home/jovial/Desktop/playlists.txt"
grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'

dialresult=`grep  static $fichxml | sed -e 's/\" type="static">//' | sed -e 's/<playlist name="//'|\
     zenity --list --title "Listes de lecture Rhythmbox" \
            --width=300 --height=300 \
            --text "" --column "Sélectionnez une liste"`

# j'ajoute les apostrophes et j'enleve les 2 espaces devant(pas compris pourquoi???)
dialresult=\'${dialresult:2}\'
echo ---------------
echo $dialresult

#cat //playlist[@name='ambiance1']
xmllint --shell $fichxml >$fichtxt <<EOD
cat //playlist[@name=$dialresult]
EOD

Liste_lecture=~/Desktop/listeLecture.m3u

# on traite la chaine pourconvertire l'url au format local, on envoie dans un fichier texte
grep  '<location>' $fichtxt | sed 's/ //g'| sed -e 's/<location>file:\/\///' | sed -e 's/<\/location>//' | perl -pe 's|%([0-9a-f]{2})|pack('C',hex($1))|segi;' > $Liste_lecture

zenity --info --title="Ok" --text="$Liste_lecture \na été crée sur votre bureau"

Je pense que l'on peut arranger le code
Si vous travailler avec vos listes, vous aurez des erreurs si vous avez supprimer des fichiers, car leur locations sont conservés dans la playlist.xml de rhythmbox, il faut donc vérifier existence des fichiers dans une routine.

bye

Jean-luc


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#17 Le 25/05/2007, à 14:47

marc31

Re : [résolu] lire données fichier xml avec bash

c'est quoi l'objectif du script .
- 1 : en entrée un fichier XML provenant de hythmbox,
- 2 : tu traites le fichier,
- 3 : et apres ?


ubuntu-gutsy / ATI RC410 [Radeon Xpress 200] + Nvidia GeForce 7300 SE / wireless RaLink RT2500 / toulouse-ouest / xmpp://marc.quinton@jabber.org

Hors ligne

#18 Le 25/05/2007, à 21:48

jovial

Re : [résolu] lire données fichier xml avec bash

marc31 a écrit :

c'est quoi l'objectif du script .
- 1 : en entrée un fichier XML provenant de hythmbox,
- 2 : tu traites le fichier,
- 3 : et apres ?

- Copier les fichiers ogg mp3 dans un rep ou sur ma clé USB en y adjoinant un fichier m3u pour pouvoir les lire nimporte .... voir http://forum.ubuntu-fr.org/viewtopic.php?id=116450

- Une fois que j'ai ma liste au format texte on faire ce qu'on veut, la lire avec un lecteur,Transférer les fichiers, afficher , graver, imprimer les tags...
-C'est aussi une manière pour moi de découvrir les possibilités du script et je commence à comprendre l'ouverture qu'offre linux.

bye

Jean-Luc

Dernière modification par jovial (Le 25/05/2007, à 21:54)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#19 Le 25/05/2007, à 21:59

abetsic

Re : [résolu] lire données fichier xml avec bash

Pour tester l'existence d'un fichier ça se passe comme ça :

fichier="Lorie - Tu m'as ensorcellé.mp3" # Quoi ?! c'est pas ta musique préférée ?!
if [ -f $fichier ]
  echo le fichier $fichier existe
else
  echo ouf je ne vais pas écouter ce titre : $fichier
fi

Hors ligne

#20 Le 25/05/2007, à 23:55

jovial

Re : [résolu] lire données fichier xml avec bash

abetsic a écrit :

Pour tester l'existence d'un fichier ça se passe comme ça :

fichier="Lorie - Tu m'as ensorcellé.mp3" # Quoi ?! c'est pas ta musique préférée ?!
if [ -f $fichier ]
  echo le fichier $fichier existe
else
  echo ouf je ne vais pas écouter ce titre : $fichier
fi

Ah bah super j'allais le chercher cool
Non Lorie ne m'ensorcellera (ni d'autres) pas  et je commence à me sentir excorcisé du mysticisme de la ligne de commande... grace à vous  wink

bye

Jean-Luc

Dernière modification par jovial (Le 25/05/2007, à 23:58)


Ubuntu 22.04: Dell Optiplex 7040, I7-6700 16Gio Ssd240, Radeon pro wx4100 & Dell Latitude E7270  i5-6300U 8Gio Ssd240

Hors ligne

#21 Le 26/05/2007, à 00:28

abetsic

Re : [résolu] lire données fichier xml avec bash

"man test" pour toutes les infos sur les tests wink

Dernière modification par abetsic (Le 26/05/2007, à 00:28)

Hors ligne