Beaucoup de sites consacrés à la météo proposent d'intégrer un résumé des prévisions dans un site web par l'inclusion d'un peu de code javascript. Il n'est pas difficile d'analyser les données renvoyées pour en faire un autre usage, comme les transformer en code compatible avec celui d'un gestionnaire de fenêtre.
Ce qui suit concerne Fluxbox et http://www.meteo.be1 mais c'est sans doute transposable à d'autres configurations.
Institut royal météorologique (IRM)
Pour obtenir le code javascript, les instructions figurent sur cette page et l'url incluse dans ce code correspondait dans le cas qui m'intéressait à
http://www.meteo.be/meteo/view/fr/1370090?filter=6447
Tapée telle quelle dans la barre d'adresse d'un navigateur, le résultat n'est évidemment pas très beau, mais ce qui compte, c'est que les données renvoyées comportent du code html sous cette forme (je l'ai simplifié en éliminant toutes les informations de style pour le rendre lisible):
<td>jeudi</td> <td><img src="http://www.kmi.be/.../1.gif"/></td> <td>7°/23°</td>
Avec quelques expressions régulières, c'est jouable .
D'un autre côté, Fluxbox, bien qu'il ne permette pas de créer des entrées de menu dynamiques, permet d'inclure un sous menu de cette manière:
[submenu] (Météo) {} [include] (/home/gv/.fluxbox/forecast) [end]
et d'insérer dans le menu des lignes d'information sur lesquelles le passage de la souris est sans effet, avec le mot clé nop (pour no operation).
[nop] (texte affiché) <chemin/icone.xpm>
Le tag correspondant à l'icone n'est pas explicitement documenté pour ce contexte, mais ça marche.
Le principe est donc de récupérer périodiquement les données en question pour les formatter ainsi dans un fichier de sous-menu:
[nop] (Cette nuit 15°) </home/gv/.fluxbox/icons/24.xpm> [nop] (Demain 25°) </home/gv/.fluxbox/icons/3.xpm> [nop] (Vendredi 16°/23°) </home/gv/.fluxbox/icons/3.xpm> [nop] (Samedi 16°/23°) </home/gv/.fluxbox/icons/6.xpm>
Il a fallu au préalable télécharger toutes les icones au format gif et les convertir en xpm...2
Le script Perl qui fait le boulot:
#!/usr/bin/perl use LWP::Simple; my $path = '/home/gv/.fluxbox/'; my $file = $path . 'forecast'; open F,">$file"; my $url = 'http://www.meteo.be/meteo/view/fr/1370090?filter=6447'; my $content = get $url; if (defined $content) { $content =~ s/\\//g; # élimination du junk my @jours; my @degres; my @icones; while ($content =~ s/<td.*?>(.*?)<\/td>//) { my $s = $1; if ($s =~ /\/(\d*)\.gif/) { push @icones,$1 # le numéro de l'icone } elsif ($s =~ s/°/°/g) { push @degres,$s # la température } else { $s =~ s/^(\w)/\u\1/; # mise en capitale de la 1ère lettre push @jours,$s # du jour } } my $l = @jours; for (my $i = 0; $i < $l; $i++) { print F "[nop] ($jours[$i] $degres[$i]) <${path}icons/$icones[$i].xpm>\n" } } else { print F "[nop] (Pas d'infos) <>\n" } close F
et voilà le travail !