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 15/04/2010, à 19:09

wlourf

[résolu bash] extraire chaîne accentuée

Bonjour,

Je chercher à récupérer quelques infos de cette page : http://sites.radiofrance.fr/chaines/fip/endirect/popprog.php?first=0 (la programmation qui est diffusée sur FIP) pour l'afficher dans un conky.

En fait tout ce que je veux se trouve sur cette ligne (Artiste, Album, Titre, Label, Année):

<td BGCOLOR="#ED1A3B" CLASS="blanc11"><SPAN CLASS="txt"><B>  BRAD MEHLDAU</B> THE FALCON WILL FLY AGAIN</SPAN><br><IMG SRC="http://image.radio-france.fr/img/vide.gif" WIDTH="4"><br>Album : HIGHWAY RIDER<br>Label : NONESUCH<br>Année : 2010</td>

Mon problème est que je n'arrive pas à extraire l'année, sans doute à cause de l'accent ... heureusement, tout le reste est en majuscules
Voici le script, si vous avez une idée hmm ce n'est peut être pas la meilleure façon de faire pour l'extraction, vaut-il mieux passer par un cut? :

#! /bin/bash

#usage :
#./get-fip.sh  W
#écrit les infos artiste, titre, album, label, année dans un fichier fileOut
##
#./get-fip.sh R n
#lit les infos du fichier créé précedemment n est la ligne à lire

fileTmp="/tmp/get-fip.txt"
fileOut="/tmp/info-fip.txt"
imgCover="/tmp/fip-cover"
urlInfos="http://sites.radiofrance.fr/chaines/fip/endirect/popprog.php?first=0"
urlCover="http://players.tv-radio.com/radiofrance/pochettes/fipRSS.html"


function extract {
    a=$(($(expr "$line_txt" : ".*$begin")))
    b=$(($(expr "$line_txt" : ".*$end")-$a-${#end}))
    echo ${line_txt:$a:$b}
}



if [ "$1" == "W" ]; then
    rm -f $fileOut

    GET $urlInfos > $fileTmp

    #match="<td BGCOLOR=\"#ED1A3B\" CLASS=\"blanc11\"><SPAN CLASS=\"txt\">"
    line_txt=`cat $fileTmp.utf8 | grep "td BGCOLOR=\"#ED1A3B\""`


    if [[ "$line_txt" == "" ]]; then
        echo "Pas d'info FIP..."
        exit
    fi

    begin="<B>"
    end="</B>"
    artist=$(extract)
    
    begin=$end
    end="</SPAN>"
    title=$(extract)
    
    begin="Album :"
    end="<br>Label"
    album=$(extract)
    
    begin="Label :"
    end="<br>Ann"
    label=$(extract)
    
    begin="e : "
    end="</td>"
    #year="" 
    year=$(extract) #-->problème avec l'année
    
    if [ "$title" == "PROGRAMME FIP" ]; then
        artist=""
        album=""
        label=""
        year=""
    fi

    echo
    #echo $line_txt #<=== ligne à commenter pour utiliser avec le conky
    echo
    echo $artist > $fileOut
    echo $title >> $fileOut
    echo $album >> $fileOut
    echo $label >> $fileOut
    echo $year  >> $fileOut
fi

if [ "$1" == "R" ]; then
    i=0
    if [ ! -f $fileOut ]; then
        echo "Pas de fichier "$fileOut
    else
		while read line
		do    
		    if [ "$i" == "$2" ]; then
		        echo $line
		    fi
		    i=$(( $i + 1 ))
		done < $fileOut
	fi
fi

Au final, ça devrait donner ça, l'année serait donc un petit plus !
1271351086.png

Merci d'avance ...!

Dernière modification par wlourf (Le 15/04/2010, à 20:59)

Hors ligne

#2 Le 15/04/2010, à 20:01

toto2006

Re : [résolu bash] extraire chaîne accentuée

salut ,

si c'est un pb d'accent tu peux utiliser iconv pour convertir en utf8 (voir man iconv ) genre :

urlInfos="http://sites.radiofrance.fr/chaines/fip/endirect/popprog.php?first=0"
GET $urlInfos > ./fileTmp
iconv -f iso-8859-1 -tutf8 fileTmp > fileTmp.utf8

sinon j'ai pas trop le tps de regarder le code mais on dois pouvoir optimiser un peu je pense smile

Hors ligne

#3 Le 15/04/2010, à 20:57

wlourf

Re : [résolu bash] extraire chaîne accentuée

Super, ça marche très bien, j'en ai profité pour remplacer la boucle qui cherche la ligne qui va bien par ceci :

line_txt=`cat $fileTmp.utf8 | grep "td BGCOLOR=\"#ED1A3B\""`

Pour le reste, je ne vais pas trop y toucher pour l'instant, sauf si vous me soufflez des idées big_smile
En tout cas merci, l'année s'affiche bien!

Hors ligne

#4 Le 15/04/2010, à 21:25

AnsuzPeorth

Re : [résolu bash] extraire chaîne accentuée

Bjr,
Tu peux utiliser une ER

eval $(sed -n '69s@.*CLASS="txt"><B> \(.*\)</B> \(.*\)</SPAN>.*Album : \(.*\)<br>Label : \(.*\)<br>Ann.* : \(.*\)</td>@artist="\1" title="\2" album="\3" label="\4" year="\5"@p' < <(wget http://sites.radiofrance.fr/chaines/fip/endirect/popprog.php?first=0 -O- | iconv -f iso-8859-1 -t utf8))
echo $arstist $title $album $label $year

C'est pas très propre ... Cela peut être amélioré wink

ps: je récupère la ligne 69, normalement elle ne devrait pas bouger !

Dernière modification par AnsuzPeorth (Le 15/04/2010, à 21:26)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#5 Le 16/04/2010, à 01:09

wlourf

Re : [résolu bash] extraire chaîne accentuée

AnsuzPeorth a écrit :

Bjr,
Tu peux utiliser une ER

eval $(sed -n '69s@.*CLASS="txt"><B> \(.*\)</B> \(.*\)</SPAN>.*Album : \(.*\)<br>Label : \(.*\)<br>Ann.* : \(.*\)</td>@artist="\1" title="\2" album="\3" label="\4" year="\5"@p' < <(wget http://sites.radiofrance.fr/chaines/fip/endirect/popprog.php?first=0 -O- | iconv -f iso-8859-1 -t utf8))
echo $arstist $title $album $label $year

C'est pas très propre ... Cela peut être amélioré wink

ps: je récupère la ligne 69, normalement elle ne devrait pas bouger !

humpf, un peu trop violente pour moi cette ligne !

Hors ligne

#6 Le 16/04/2010, à 03:02

AnsuzPeorth

Re : [résolu bash] extraire chaîne accentuée

wlourf a écrit :

humpf, un peu trop violente pour moi cette ligne !

Comme c'était pour conky, donc refresh régulier, je pensais que tu voulais une commande assez rapide (en tout cas un peu plus rapide que ton script !); Je pense qu'on faire mieux avec awk , mais je ne maitrise pas du tout ...

Sinon, c'est pas si compliqué !
C'est juste une commande sed :
sed -n '69p' < <(wget .....) → affichera la ligne 69 du téléchargement.
sed 's@TOTO@TATA@' <<< $var → remplace TOTO par TATA dans la variable $var
sed 's@du texte \(.*\) suite de texte@\1@' <<< $var\(.*\) pattern à récupérer, \1 rappel du pattern.
donc pour var='du texte voila le pattern suite de texte', le résultat de la commande précédante sera voila le pattern
j'ai mis un eval devant la commande complète, car j'ai fait un rappel de pattern artist="\1", comme ça les variables sont chargées directement ! Il serait possible de juste afficher le resultat avec saut de ligne, cela pourrait être utiliser direct dans conky, sans passer par un script.


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#7 Le 18/04/2010, à 11:58

wlourf

Re : [résolu bash] extraire chaîne accentuée

Merci pour ces explications, j'ai essayé de les essayer sur ce post : http://forum.ubuntu-fr.org/viewtopic.php?pid=3410644#p3410644 mais sans succès pour l'instant big_smile

Dernière modification par wlourf (Le 18/04/2010, à 11:59)

Hors ligne