#1 Le 23/05/2007, à 00: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, à 19:59)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#2 Le 23/05/2007, à 04:53
- abetsic
Re : [résolu] lire données fichier xml avec bash
Bonjour,
voilà
#!/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, à 05: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, à 08:04
- jovial
Re : [résolu] lire données fichier xml avec bash
@abetsic
Merci je le sens bien 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
Dernière modification par jovial (Le 23/05/2007, à 08:08)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#5 Le 23/05/2007, à 09: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é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, à 09:20)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#6 Le 23/05/2007, à 13: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.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#7 Le 23/05/2007, à 15: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
Dernière modification par abetsic (Le 23/05/2007, à 15:09)
Hors ligne
#8 Le 23/05/2007, à 21: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 :
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, à 00: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.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#10 Le 24/05/2007, à 01: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, à 09:37
- jovial
Re : [résolu] lire données fichier xml avec bash
Tu as essayé ça :
xmllint --shell $fichxml >ton_fichier <<EOD
Ben oui tu m'a encore donné la solution :):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
Jean-luc
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#12 Le 24/05/2007, à 15: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... 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à
et de rien
Dernière modification par abetsic (Le 24/05/2007, à 15:04)
Hors ligne
#13 Le 24/05/2007, à 22:50
- jovial
Re : [résolu] lire données fichier xml avec bash
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.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#14 Le 25/05/2007, à 06: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é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, à 08: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
Dernière modification par jovial (Le 25/05/2007, à 12:34)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#16 Le 25/05/2007, à 13: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.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#17 Le 25/05/2007, à 13: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, à 20:48
- jovial
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 ?
- 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, à 20:54)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#19 Le 25/05/2007, à 20: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, à 22:55
- jovial
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
Ah bah super j'allais le chercher
Non Lorie ne m'ensorcellera (ni d'autres) pas et je commence à me sentir excorcisé du mysticisme de la ligne de commande... grace à vous
bye
Jean-Luc
Dernière modification par jovial (Le 25/05/2007, à 22:58)
Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270 i5-6300U 8Gio
Hors ligne
#21 Le 25/05/2007, à 23:28
- abetsic
Re : [résolu] lire données fichier xml avec bash
"man test" pour toutes les infos sur les tests
Dernière modification par abetsic (Le 25/05/2007, à 23:28)
Hors ligne