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 27/09/2010, à 11:06

jovial

Fip recupérer les infos en bash

J'ai commencé un script qui permet de collecter les infos  sur les morceau joué sur fip et faire une chercher sur google, ajouter dans un bloc note...

Je voudrai isoler les infos  pour les passer dans des variables : titre,artiste,album, année .
Je suis juste largué pour extraire correctement les chaines.
Je viens donc demander de l'aide.

Voici donc un exemple de programmation Fip à partir du quel je récupére les infos

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body style="margin:0;padding=0">
<META HTTP-EQUIV="Refresh" CONTENT="30">
<body bgcolor="#000000" style="margin:0;padding=0">
<center><font face="arial" size="2" color="#ffffff"><b>A l'antenne</b></font><br><br>
<MARQUEE DIRECTION="left" BGCOLOR="#000000" SCROLLAMOUNT="2" SCROLLDELAY="3">
<!-- FIP a l'antenne -->
<font face="arial" size="2" color="#ffffff"><b>TURN IT UP</b></font><br><font face="arial" size="1" color="#ffffff"><b>THE BAMBOOS - THE BAMBOOS 4 2010</b></font>
</MARQUEE></b></font></center>
</body>
</html>

Source:
http://players.tv-radio.com/radiofrance … tenne.html

Voici un exemple qui récupère les infos globalement (fourni par alej)

wget -qO - http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html|sed 's/\r//g;/FIP/,$!d;s/<br>/\n/g;s/<[^>]*>//g;/^$/d'

le script en cours ici : https://sites.google.com/site/jovialubuntu/divers/fip-infos-now

Merci

Jluc

Dernière modification par jovial (Le 27/09/2010, à 11:40)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#2 Le 27/09/2010, à 14:23

sputnick

Re : Fip recupérer les infos en bash

links -dump http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | awk 'NR>2{print}'

edit: Si toutes les radios avait ce genre de flux RSS ça serais cool, mais je pense pas que ça soit le cas !?

Dernière modification par sputnick (Le 27/09/2010, à 14:25)


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#3 Le 27/09/2010, à 18:26

jovial

Re : Fip recupérer les infos en bash

sputnick a écrit :
links -dump http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | awk 'NR>2{print}'

edit: Si toutes les radios avait ce genre de flux RSS ça serais cool, mais je pense pas que ça soit le cas !?

Merci cela marche bien le seul inconvénient est d'installer Links

Jluc

Dernière modification par jovial (Le 27/09/2010, à 18:26)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#4 Le 27/09/2010, à 22:59

sputnick

Re : Fip recupérer les infos en bash

Ca marche aussi avec lynx :

lynx -dump http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | awk 'NR>6 && NR<9{print}'

Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#5 Le 27/09/2010, à 23:03

sputnick

Re : Fip recupérer les infos en bash

Une solution plus approprié, plus sure et plus propre :

curl -s http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | grep "^<font face" | html2text

Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#6 Le 28/09/2010, à 13:33

jovial

Re : Fip recupérer les infos en bash

Toute vos solution marchent , par contre cela oblige à installer des paquets
J'ai idée de partager le script et donc de le rendre le plus simple.
C'est aussi pour moi l'occasion d'apprendre à récupérer du texte dans fichier html et travailler sur les chaines

je suis avec ma petite logique de novice, J'aurai fait comme cela

J'isole le texte entre <!-- FIP a l'antenne --> et </body>:

<font face="arial" size="2" color="#ffffff"><b>I GOT RHYTHM</b></font><br><font face="arial" size="1" color="#ffffff"><b>JOVANOTTI - RHAPSODY 1998</b></font>
</MARQUEE></b></font></center>

Je recupère les chaines entre <b> et </b> dans 2 variables
ch1=I GOT RHYTHM
ch2=JOVANOTTI - RHAPSODY 1998

je me sert du tiret pour spliter le texte
ch3 =JOVANOTTI
ch4=RHAPSODY 1998

J'isole le dernier mot de ch 4
ch5=RHAPSODY
ch6=1998

Et j'ai tout ch1=titre ch3=artiste ch5=album ch6=année

En bash je sais pas encore le faire, je veux bien de l'aide

Merci à tous bye

Jluc

Jean-Luc

Dernière modification par jovial (Le 28/09/2010, à 13:52)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#7 Le 28/09/2010, à 13:51

jovial

Re : Fip recupérer les infos en bash

@HP
Si besoin je le ferai mais dans ce cas je prévois une fonction pour installer les paquets
Sur 10.04 il m'en a fallu 2  html2text et curl.

Ce problème me donne  aussi pour moi l'occasion de travailler sur fichier texte avec les outils de base.

Merci bye jluc

Dernière modification par jovial (Le 28/09/2010, à 13:51)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#8 Le 28/09/2010, à 14:25

credenhill

Re : Fip recupérer les infos en bash

hello
w3m me semble installé par défaut

$ w3m -dump http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html 2>&1 |tail -2
                              IM CHAMBRE SEPAREE
                        ANNA NETREBKO - SOUVENIRS 2008

Hors ligne

#9 Le 28/09/2010, à 15:21

sputnick

Re : Fip recupérer les infos en bash

L'approche consistant à utiliser tail n'est selon moi pas très fiable car si le nombre de lignes change pour une raison ou une autre cela ne fonctionnera pas, ce pourquoi j'ai choisi la méthode avec grep. Ce qui nous donne au final :

wget -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | grep "^<font face" | html2text

pour ne rien installer à part html2text, mais c'est un outil basique à avoir dans la trousse à outil de scripting bash.

Selon moi, la présence de <font face en début de ligne est plus sur, il faut toujours essayer de minimiser l'impact de changements (mineurs ou pas) et de ce qui se passerais par exemple si le titre devenait plus long qu'habituellement.

@jovial, si tu veut partir sur de bonnes bases, oublie la solution des regex(p) en général pour parser du HTML sauf cas très simples, car c'est crados. Il existe pour ça des modules en Perl Ruby Python qui parsent proprement le HTML par leurs tags notamment. En Perl, je pense à  HTML::TreeBuilder et HTML::TokeParser::Simple.


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#10 Le 28/09/2010, à 15:47

sputnick

Re : Fip recupérer les infos en bash

Une solution pour affecter des variables à la volée :

eval $(
    wget -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html |
    grep "^<font face" |
    html2text |
    awk 'NR==1{print gensub(/(.*)/, "titre=\"\\1\"", "g")} NR==2{print "details=\""$0"\""}'
)
echo "$titre"
echo "$details"

Dernière modification par sputnick (Le 28/09/2010, à 15:48)


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#11 Le 28/09/2010, à 16:32

sputnick

Re : Fip recupérer les infos en bash

C'est possible mais le grep est plus sûr selon moi. Bon, d'une façon ou d'une autre c'est empirique.
En utilisant la balise MARQUEE c'est surement encore mieux :

IFS='%' read titre details < <(
	wget -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | 
	awk '/^<MARQUEE DIRECTION/,/^<\/MARQUEE>/' | 
	html2text | 
	tr '\n' '%' | 
	xargs
)

Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#12 Le 29/09/2010, à 14:00

jovial

Re : Fip recupérer les infos en bash

Bonjour

Merci à tous, voilà ce j'arrive à faire

#!/bin/sh
eval $(
    wget -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html |
    grep "^<font face" |
    html2text |
    awk 'NR==1{print gensub(/(.*)/, "titre=\"\\1\"", "g")} NR==2{print "details=\""$0"\""}'
)
echo "Titre: $titre"
echo "Artiste Album Année: $details"
echo "------"
echo rech="$titre""$details"|sed -e "s/- //g"|sed -e "s/ /+/g"
`firefox "$rech" &`
gsearch="http://www.google.fr/search?q="
adr_rech="$gsearch$rech"

#echo $adr_rech 

`firefox $adr_rech &`

Pour rappel le script permet d'afficher les infos Fip , de les ajouter à la volée dans un bloc note, denvoyer une recherche sur google 

1 - J'arrive pas à concaténer les variables $gsearch $rech et les placer en argument sur le lancement de firefox
2 - Je voudrai spliter $details dans les variables $Artiste $Album $Annee

Dernière modification par jovial (Le 29/09/2010, à 14:06)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#13 Le 29/09/2010, à 14:13

jovial

Re : Fip recupérer les infos en bash

La fonction pour installer les paquets… évite. Je penserais plutôt à une petite fonction testant leur présence, et avertissant l'utilisateur et interrompant le programme en leur absence…

Pourquoi? on peut pas lancer un sudo apt-get install html2text en demandant le mot de passe avec zenity ?
Si non je place simplement un lien apt sur mon site


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#14 Le 29/09/2010, à 16:21

sputnick

Re : Fip recupérer les infos en bash

Bon, comme j'aime scripter et accessoirement FIP, je me suis penché sur la question de plus près :

#!/usr/bin/env bash
#
# ------------------------------------------------------------------------------
#     made by sputnick in da FreAkY lAb (c) 2010
#      gilles.quenot <AT> gmail <DOT> com
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#         (see http://www.gnu.org/licenses/gpl.html).
# ------------------------------------------------------------------------------
#                                        ,,_
#                                       o"  )@
#                                        ''''
#------------------------------------------------------------------------------#
#                    V e r s i o n   i n f o r m a t i o n                     #
#------------------------------------------------------------------------------#
# $Id:: fip-rss.bash 1 2010-09-29 15:09:49Z sputnick                        $: #
# $Revision:: 1                                                             $: #
# $Author:: sputnick <gilles.quenot@gmail.com>                              $: #
# $Date:: 2010-09-29 17:10:54 +0200 (mer., 29 sept. 2010)                   $: #
# $Hash::                                                                   $: #
#------------------------------------------------------------------------------#
#             E n d   o f   v e r s i o n   i n f o r m a t i o n              #
#------------------------------------------------------------------------------#
#
# vim:ts=4:sw=4

readlink -f /proc/$$/exe | grep -q bash || {
    echo >&2 "Hey dude ! You must call $0 with bash !"
    exit 2
}

trap 'res=$?; kill &>/dev/null $_pid; exit $res' 1 2 3 15

mplayer &>/dev/null http://mp3.live.tv-radio.com/fip/all/fiphautdebit.mp3 & _pid=$!

while kill -0 $_pid; do
    IFS='%' read titre details < <(
        wget -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | 
        awk '/^<MARQUEE DIRECTION/,/^<\/MARQUEE>/' | 
        html2text -nobs | 
        tr '\n' '%'
    )

    clear

    cat<<-EOF
    On air:
    $titre
    $details
    EOF
    echo -n 'Saisir "g" pour rechercher avec google ou "q" pour quitter. >>> '

    read -n1 -s -t 7

    case $REPLY in
        g)
            titre=$(sed -r 's@[[:space:]\-]{1,}@+@g' <<< "$titre")
            details=$(sed -r 's@[[:space:]\-]{1,}@+@g' <<< "$details")

            url="http://www.google.com/search?q=\"${titre}\"+${details}&ie=utf-8&oe=utf-8&lr=lang_en"
            #firefox -remote "openurl('${url}',new-tab)"
            xdg-open &>/dev/null "${url}"
        ;;
        q)
            kill $_pid
            exit 0
        ;;
    esac

done

Dernière modification par sputnick (Le 29/09/2010, à 21:00)


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#15 Le 29/09/2010, à 17:11

sputnick

Re : Fip recupérer les infos en bash

Message du dessus édité avec version améliorée


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#16 Le 29/09/2010, à 21:55

sputnick

Re : Fip recupérer les infos en bash

Re nouvelle version

Changelog :
- user agent changé pour Mozilla/5.0 afin de prevenir un éventuel mécontentement si un admin voit pas mal de wget. Pour ne pas abuser de la bande passante, on ne rafraichit que de :
- timeout de 7 secondes
- améliorations d’ordre esthétiques

#!/bin/bash
#
# ------------------------------------------------------------------------------
#     made by sputnick in da FreAkY lAb (c) 2010
#      gilles.quenot <AT> gmail <DOT> com
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of version 2 of the GNU General Public
#    License published by the Free Software Foundation.
#         (see http://www.gnu.org/licenses/gpl.html).
# ------------------------------------------------------------------------------
#                                        ,,_
#                                       o"  )@
#                                        ''''
#------------------------------------------------------------------------------#
#                    V e r s i o n   i n f o r m a t i o n                     #
#------------------------------------------------------------------------------#
# $Id:: fip-rss.bash 1 2010-09-29 15:09:49Z sputnick                        $: #
# $Revision:: 1                                                             $: #
# $Author:: sputnick <gilles.quenot@gmail.com>                              $: #
# $Date:: 2010-09-29 17:10:54 +0200 (mer., 29 sept. 2010)                   $: #
# $Hash::                                                                   $: #
#------------------------------------------------------------------------------#
#             E n d   o f   v e r s i o n   i n f o r m a t i o n              #
#------------------------------------------------------------------------------#
#
# vim:ts=4:sw=4

readlink -f /proc/$$/exe | grep -q bash || {
    echo >&2 "Hey dude ! You must call $0 with bash !"
    exit 2
}

die() {
    kill $_pid
    echo
    stty echo
    exit ${1:-0}
}

trap 'res=$?; die $res' 1 2 3 15

mplayer &>/dev/null http://mp3.live.tv-radio.com/fip/all/fiphautdebit.mp3 & _pid=$!

while kill -0 $_pid; do
    IFS='%' read titre details < <(
        wget --user-agent="Mozilla/5.0" -qO- http://players.tv-radio.com/radiofrance/metadatas/fipRSS_a_lantenne.html | 
        awk '/^<MARQUEE DIRECTION/,/^<\/MARQUEE>/' | 
        html2text -nobs | 
        tr '\n' '%'
    )

    titre=$(echo $titre)
    details=$(echo $details)

    clear

    cat<<-EOF
    On air:
    $titre
    $details
    EOF
    echo -n 'Saisir "g" pour rechercher avec google ou "q" pour quitter. >>> '

    read -n 1 -s -t 7

    case $REPLY in
        g)
            titre=$(sed -r 's@[[:space:]\-]+@+@g' <<< "$titre")
            details=$(sed -r 's@[[:space:]\-]+@+@g' <<< "$details")

            url="http://www.google.com/search?q=\"${titre}\"+${details}&ie=utf-8&oe=utf-8&lr=lang_en"
            #firefox -remote "openurl('${url}',new-tab)"
            xdg-open &>/dev/null "${url}"
        ;;
        q)
            die
        ;;
    esac

done

Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#17 Le 29/09/2010, à 23:34

jovial

Re : Fip recupérer les infos en bash

@ sputnick

Hello , j'ai testé ton script j'ai des erreurs

jean-luc@jean-luc-pc:~$ bash extract.sh
extract.sh: line 72: warning: here-document at line 48 delimited by end-of-file (wanted `EOF')
extract.sh: line 73: Erreur de syntaxe : fin de fichier prématurée
jean-luc@jean-luc-pc:~$

En copiant le script dans gedit je perds la coloration syntaxique à partir de la ligne 49 après cat<<-EOF

jluc

Dernière modification par jovial (Le 29/09/2010, à 23:40)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#18 Le 29/09/2010, à 23:45

sputnick

Re : Fip recupérer les infos en bash

Oui, c'est à cause du copier coller. Une copie est dispo ici, ya qu'à copier coller cela dans ton term :

wget http://www.sputnick-area.net/scripts/fip-rss.bash
chmod +x fip-rss.bash
./fip-rss.bash

Dernière modification par sputnick (Le 29/09/2010, à 23:46)


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#19 Le 29/09/2010, à 23:58

jovial

Re : Fip recupérer les infos en bash

@sputnick

Et bien ça marche nickel, bon job.
Pourquoi cela passe passe avec le copier collé ?

Grand merci à toi , smile et au autres wink
Je vais l'arranger à ma sauce, je vous tiens au courant

Bye

jluc


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#20 Le 30/09/2010, à 00:18

sputnick

Re : Fip recupérer les infos en bash

Ca marche pas car ca ajoute des espaces à la fin des lignes.


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#21 Le 30/09/2010, à 18:58

jovial

Re : Fip recupérer les infos en bash

Bonjour j'ai avancé sur le script dispo ici

https://sites.google.com/site/jovialubu … -infos-now

Il me manque
- du code pour informer l'absence du paquet
- du code pour placer une variable string dans le presse papier

Bye

Jean-Luc


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#22 Le 30/09/2010, à 19:34

sputnick

Re : Fip recupérer les infos en bash

# fonction de test de présence commande
testApp() {
    if ! type &>/dev/null "$1"; then
        echo >&2 "Le paquet $1 soit être installé!"
        die
    fi
}

# utilisation de la fonction
testApp html2text

# presse papier
xsel <<< string

Sinon, je te suggère de changer tes test [ par des [[ si tu utilise bash, c'est plus puissant.
Aussi la forme `` est dépréciée en faveur de $()

Dernière modification par sputnick (Le 30/09/2010, à 19:37)


Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#23 Le 01/10/2010, à 09:58

jovial

Re : Fip recupérer les infos en bash

# presse papier
xsel <<< string

Installer le paquet: xsel
Copier recho "a-bit-of-text" | xsel -b
Autres exemples avec aussi xclip: http://linuxtidbits.wordpress.com/2008/ … o" | xclip


merci


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne

#24 Le 01/10/2010, à 14:46

sputnick

Re : Fip recupérer les infos en bash

Pas besoin d'un pipe, ma solution est adaptée, je pense que tu ne l'a pas gardée parce que tu n'a pas compris :

xsel <<< string

C'est comme un here-doc sauf que sur une seule ligne ça s’appelle un here-string :

LC_ALL=C man bash | less +'/Here Strings'

Je sais, un peu partout, tout le monde s'entretue, c'est pas gai, mais d'autres s'entrevivent, j'irai les retrouver. Jacques Prévert
https://sputnick.fr

Hors ligne

#25 Le 04/10/2010, à 08:25

jovial

Re : Fip recupérer les infos en bash

sputnick a écrit :

Pas besoin d'un pipe, ma solution est adaptée, je pense que tu ne l'a pas gardée parce que tu n'a pas compris :
xsel <<< string

Bonjour

Alors je connais  "<" "<<" mais rien trouvé avec "<<<"

xsel <<< "ma chaine " ne donne rien, donc si quelqu'un veux m'éclairer ...

Sinon, je te suggère de changer tes test [ par des [[ si tu utilise bash, c'est plus puissant.
Aussi la forme `` est dépréciée en faveur de $()

Plus puissant cela veux dire quoi ?
$() c'est vrai que c'est plus explicite pour la lecture.

Merci

Jluc

Dernière modification par jovial (Le 04/10/2010, à 08:46)


Ubuntu 22.10: Dell Optiplex 7040, I7-6700 16Gio - 22.04: Dell Latitude E7270  i5-6300U 8Gio

Hors ligne