UbuntOlivier a écrit
…et trouver parmi les programmes la plage horaire dans laquelle elle tombe, mais cette dernière étape dépasse mes compétence, je ne sais pas comment comparer deux heures en bash. De plus, je ferai remarquer que la liste dégrossie des programmes comprend des entrées à 2 ou 3 lignes, ce n'est donc pas sytématique.
Titillé par le problème de comparaison de deux heures, j'ai fini par trouver comment faire en passant par le temps Unix Epoch (les seconde écoulées depuis le 01/01/1970).
Voici le script permettant d'afficher l'émission en cours, ainsi que la suivante :
ATTENTION : CETTE VERSION v0.1 EST OBSOLÈTE !! cf.
msg #628 pour la version v0.3.
#!/bin/bash
#~ C'est UbuntOlivier qui a pondu cette daube, il espère que ça marchera suffisamment bien…
#~ Préparation fonction mktime() de awk
vNow=$(date +%s)
vYY=$(date +%Y)
vMM=$(date +%m)
vDD=$(date +%d)
#~ curl sert à récupérer la page des programmes du jour sur le site ;
#~ grep sert à en extraire les lignes intéressantes ;
#~ sed sert à les nettoyer (ôter les balises HTML, supprimer les espaces doubles et en fin de ligne) ;
#~ awk sert trouver la plage horaire correspondant à l'heure actuelle et à formater le texte affiché.
#~ Et, oui, il y a sans doute moyen de faire plus simple…
curl -s http://www.franceculture.fr/programmes \
| grep '<span class="plage">[^<]*</span>\|<h2><a href="[^"]*" title="[^"]*">[^<]*</a></h2>\|<li><span>.*</a>' \
| sed -re 's#.*">([^<]*)</.*#\1#g ; s/([0-9]{2}:[0-9]{2})/\n\1/g ; s/ +/ /g ; s/ +$//g' \
| awk -vvMaintenant=$vNow -vvAA=$vYY -vvMM=$vMM -vvJJ=$vDD '
BEGIN { RS = "" ; FS = "\n" ; vEmissionEnCours="" ; vEmissionSuivante="-" }
{
vFormatAffichage=( $1 " - " toupper($2) " - " $3 ) ;
vHH=substr($1,1,2) ;
vmm=substr($1,4,2) ;
vHeureDiffusion=mktime(vAA " " vMM " " vJJ " " vHH " " vmm " 00") ;
if ( vHH == "00" ) { vHeureDiffusion = vHeureDiffusion + 86400 } ; # +1 jour au-delà de minuit
if ( vMaintenant >= vHeureDiffusion ) { vEmissionEnCours = vFormatAffichage }
if ( vMaintenant < vHeureDiffusion ) {
if ( vEmissionSuivante == "-" ) { vEmissionSuivante = vFormatAffichage }
}
#~ Pour tester/vérifier :
#~ décommenter la ligne suivante si on a envie de voir s’afficher une ligne par émission
#~ print vHeureDiffusion " - " $1 " - " $2 " - " $3
}
END { print "Actuellement à l’antenne :" ; print vEmissionEnCours ;
print "Émission suivante :" ; print vEmissionSuivante
}
'
… ce qui permet d'afficher ceci :
Actuellement à l’antenne :
21:00 - FICTIONS / DRÔLES DE DRAMES - Balancé dans les cordes
Émission suivante :
22:00 - MAUVAIS GENRES - AMERICAN WAY OF MADNESS : Henry Darger , Bill Plympton
Il est facile de modifier l'affichage en sortie en bricolant dans la partie
END {} de
awk et/ou dans la variable
vFormatAffichage.
Tout ça n'est pas tip-top, mais ça marche… sauf peut-être pour la dernière émission de la liste et/ou celles après minuit, je vérifierai à l'occasion.
En pratique, mettre le script dans son répertoire
$USER/bin, le rendre exécutable et l'appeler de
conky toutes les x secondes/minutes avec une commande
${execi …}.
Bon amusement !