Bonjour a tous,
voici une nouvelle version test pour recmeteo.py
dans cette version je coupe la page en deux de manière a minimiser les risques liés a la gestion de la mémoire.
recmeteo.py
#! /usr/bin/python3
# -*- coding: utf-8 -*-
# Par Didier-T Forum Ubuntu.fr
# Ajout notification par jpdipsy Forum Ubuntu.fr
# Ajout notification via DBus par ti_tux Forum Ubuntu.fr
# Ajout création repsauv si inexistant par jpdipsy Forum Ubuntu.fr
from socket import timeout
from urllib.request import Request, urlopen, URLError
from os import path, makedirs, system
from time import time, sleep, strftime, localtime
from re import search, compile, findall
from sys import argv
from gc import collect, get_objects
from bs4 import BeautifulSoup
from subprocess import Popen
Version='1.25b'
homedir = path.expanduser('~')
#### initialisation des variables
adressWeb="http://www.accuweather.com/fr/fr/belfort/133341/daily-weather-forecast/133341"
repsauv= "~/essais"
huitHeures="non"
nbFoisHuit=1
matin="non"
apresmidi="non"
soiree="non"
nuit="non"
nbJour=1
interval=2
notifi="non"
externe = None
Id = "sans"
for a in argv:
if search("adressWeb=", a) is not None:
adressWeb=compile("adressWeb=(.*)").search(a).group(1)
if search("repsauv=", a) is not None:
repsauv=compile("repsauv=(.*)").search(a).group(1)
if search("huitHeures=", a) is not None:
huitHeures=compile("huitHeures=(.*)").search(a).group(1)
if search("nbJour=", a) is not None:
nbJour=compile("nbJour=(.*)").search(a).group(1)
if search("interval=", a) is not None:
interval=compile("interval=(.*)").search(a).group(1)
if search("notify=", a) is not None:
notifi=compile("notify=(.*)").search(a).group(1)
if search("matin=", a) is not None:
matin=compile("matin=(.*)").search(a).group(1)
if search("apresmidi=", a) is not None:
apresmidi=compile("apresmidi=(.*)").search(a).group(1)
if search("soiree=", a) is not None:
soiree=compile("soiree=(.*)").search(a).group(1)
if search("nuit=", a) is not None:
nuit=compile("nuit=(.*)").search(a).group(1)
if search("externe=", a) is not None:
externe=compile("externe=(.*)").search(a).group(1)
if search("nbFoisHuit=", a) is not None:
nbFoisHuit=compile("nbFoisHuit=(.*)").search(a).group(1)
if search("id=", a) is not None:
Id=compile("id=(.*)").search(a).group(1)
nbJour=int(nbJour)
interval=int(interval)
repsauv=repsauv.replace("~", homedir)
notifi=str.lower(notifi)
huitHeures=str.lower(huitHeures)
nbFoisHuit=int(nbFoisHuit)
#### fin initialisation des variables
#### Fonction de traitement des fichiers
def traitement(adress, fichier, repsauv):
# fiche = open(fichier, "w")
#pour debug
current_balise=None
x=1
user_agent = 'Mozilla/5.0 (X11; Linux x86_64)'
headers = { 'User-Agent' : user_agent }
while current_balise is None:
response = None
while response is None:
try:
html_page = urlopen(adress, timeout=10)
except (URLError) as error:
print("HTML ", error)
except timeout:
print("erreur timeout acces HTML")
else:
try:
currentCond=html_page.read()
except (URLError) as error:
print("Lecture page ", error)
except timeout:
print("erreur timeout lecture page")
else:
fiche = open("/tmp/page.html", "wb")
fiche.write(currentCond)
fiche.close()
response = "ok"
fiche = open("/tmp/page.html", "r")
lines = fiche.readlines()
curr = {}
curr[0] = ""
curr[1] = ""
i=0
for line in lines:
curr[i] = curr[i]+line
if search("!-- /.feed-tabs --", line) is not None:
i=1
soup1 = BeautifulSoup(curr[0])
soup = BeautifulSoup(curr[1])
#if soup.find(id="tracking-pixels") is not None:
# response = "ok"
#else:
# print("soucis traitement mémoire traitement "+fichier)
#si autres que huit heures
table=soup.find_all('table')
current_balise=soup.find(id="details")
# if current_balise is None:
# sleep(1)
# x=x+1
# print("problème de récupération de donées\n essais n°"+str(x)+"\npage : "+adress)
# print(current_balise.prettify()+"\n")
information="\n"
if search("huitHeures", fichier) is None:
# recherche vent
divs=current_balise.select("[class~=wind-box-lg]")
if len(divs) == 0:
divs=current_balise.select("[class~=wind-box-sm]")
i=0
for div in divs:
i=i+1
ventd=compile("var d = '(.*)';").search(str(div)).group(1).replace("W", "O")
ventf=compile("var s = '(.*)';").search(str(div)).group(1)
information=information+"direction"+str(i)+": "+ventd+"\n"
information=information+"vitesse"+str(i)+": "+ventf+"\n"
#info dans l'image
inf=current_balise.select("[class~=info]")
icone=current_balise.select("[class~=icon]")
i=0
#recherche icone
for ic in icone:
i=i+1
information=information+"icone"+str(i)+": "+str(ic).replace('<div class="icon i-', '').replace('"></div>', '')+"\n"
i=0
#récupération date + historique
if search("Jour", fichier) is not None or search("CC", fichier) is not None:
histo=soup.find(id="feature-history")
#récupération date
date=histo.find_all('th')
jour=compile("(.*)/(.*)/(.*)").search(date[4].get_text())
information=information+"jour: "+jour.group(1)+"\n"
information=information+"mois: "+jour.group(2)+"\n"
information=information+"année: "+str(int(jour.group(3))+1)+"\n"
#récupération historique
hi=histo.select("[class~=hi]")
for v in hi:
hivalue=v.get_text().split("\n")
information=information+"maxjour: "+hivalue[2]+"\n"
information=information+"maxnormal: "+hivalue[3]+"\n"
information=information+"maxrecord: "+hivalue[4]+"\n"
information=information+"max1ans: "+hivalue[5]+"\n"
lo=histo.select("[class~=last]")
for v in lo:
lovalue=v.get_text().split("\n")
information=information+"minjour: "+lovalue[2]+"\n"
information=information+"minnormal: "+lovalue[3]+"\n"
information=information+"minrecord: "+lovalue[4]+"\n"
information=information+"min1ans: "+lovalue[5]+"\n"
#info dans l'image
if search("Jour", fichier) is not None:
infs=inf[0].get_text().split("\n")
information=information+"Tempjour: "+findall('-?\d+', infs[0])[0]+"\n"
information=information+"RealFeeljour: "+findall('-?\d+', infs[1])[0]+"\n"
information=information+"Précipitationsjour: "+findall('-?\d+', infs[2])[0]+"\n"
infs=inf[1].get_text().split("\n")
information=information+"Tempnuit: "+findall('-?\d+', infs[0])[0]+"\n"
information=information+"RealFeelnuit: "+findall('-?\d+', infs[1])[0]+"\n"
information=information+"Précipitationsnuit: "+findall('-?\d+', infs[2])[0]+"\n"
lever_coucher=soup.select("[class~=time-period]")
i=0
for p in lever_coucher:
spans=p.find_all('span')
i=i+1
x=0
for span in spans:
if i == 1:
span_nom="Soleil "
else:
span_nom="Lune "
if search('start', str(span)) is not None:
information=information+span_nom+"lever: "+span.get_text()+"\n"
if search('time', str(span)) is not None:
information=information+span_nom+"durée: "+span.get_text()+"\n"
if search('finish', str(span)) is not None:
information=information+span_nom+"coucher: "+span.get_text()+"\n"
p=current_balise.find_all('p')
i=0
x=0
for pv in p:
i=i+1
if i==5 or i==10:
x=x+1
information=information+"cond"+str(x)+": "+pv.get_text()+"\n"
#localisation si condition courante
if search("CC", fichier) is not None:
ville=soup1.select("[class~=current-city]")[0].get_text().split(",")[0]
longi=compile("lon: '(.*)',").search(str(soup1)).group(1)
lat=compile("lat: '(.*)',").search(str(soup1)).group(1)
information=information+"ville: "+ville+"\n"
information=information+"lat: "+lat+"\n"
information=information+"long: "+longi+"\n"
#info alerte
alerte=soup.select("[class~=forecast-status]")
if str(alerte) != "[]":
p=alerte[0].find_all('p')
a=p[0].find_all('a')
clic=a[0].get_text()
information=information+"alerte: "+p[0].get_text().replace(clic, "").replace("\n","").replace("\r", "").replace(chr(160), "").rstrip().lstrip()+"\n"
else:
information=information+"alerte: RAS\n"
#info dans l'image
inf=inf[0].get_text()
cond=inf[:inf.find(findall('-?\d+', inf)[0])]
inf=inf.replace(cond, "")
infs=inf.split(" ")
information=information+"cond:"+cond+"\n"
information=information+"Temp: "+infs[0]+"\n"
information=information+"RealFeel: "+infs[2]+"\n"
if search("Matin", fichier) is not None or search("AM", fichier) is not None or search("Soiree", fichier) is not None or search("Nuit", fichier) is not None:
infs=inf[0].get_text().split("\n")
i=0
infsc=["","","",""]
for inf in infs:
if inf!="":
infsc[i]=inf
i=i+1
information=information+"cond:"+infsc[0]+"\n"
information=information+"max: "+infsc[1]+"\n"
information=information+"min: "+infsc[2].replace("Mn ", "")+"\n"
information=information+"RealFeelmax: "+findall('-?\d+', infsc[3])[0]+"\n"
information=information+"RealFeelmin: "+findall('-?\d+', infsc[3])[1]+"\n"
#info conditions générales
cc=current_balise.find_all('li')
for inf in cc:
inf=inf.get_text()
inf=inf.replace(compile('^ *').search(inf).group(0), "").replace("\n", "")
if search(":", inf) is not None:
information=information+inf+"\n"
elif search("Jour", fichier) is not None:
i=0
cc=current_balise.find_all('li')
for inf in cc:
inf=inf.get_text()
inf=inf.lstrip().replace("\n", "").replace(" \r", "")
if search(": ", inf) is not None:
i=i+1
if i <= 7:
inf=inf.replace(":", " jour:")
else:
inf=inf.replace(":", " nuit:")
information=information+inf+"\n"
else:
cc=current_balise.find_all('li')
for inf in cc:
inf=inf.get_text()
inf=inf.replace(compile('^ *').search(inf).group(0), "").replace("\n", "")
if search(":", inf) is not None:
information=information+inf+"\n"
information=information+str(int(time()))+"\n"
else:
#recherche icones huit heures
rows = table[0].findAll('tr')
x=0
for tr in rows:
cols = tr.findAll('td')
texte_tr=tr.text.split("\n")[1].replace("\n", "")
i=0
for td in cols:
i=i+1
# td=td.replace(" ", "")
texte_bu = td.text.replace("\n", "").replace(chr(160), "")
if texte_bu != "" :
if texte_tr == " " and x < len(cols):
information=information+"Heure"+str(i)+": "+texte_bu+"\n"
x=x+1
elif texte_tr != " ":
information=information+texte_tr+str(i)+": "+texte_bu+"\n"
icone=table[0].find_all('div')
i=0
for ic in icone:
i=i+1
ico="icone"+str(i)+": "+str(ic).replace('<div class="icon i-', '')
fin=compile('">(.*)div>').search(ico).group(1)
information=information+ico.replace('">'+fin+'div>', '')+"\n"
if i == 8:
break
fiche = open(fichier, "w")
# fiche.write(current_balise.prettify())
fiche.write(information)
fiche.close()
collect()
#### fin Fonction de traitement des fichiers
#### Mise en tache de fond
def demonise(ent, id1, id2, huitHeures, nbJour, interval, nbFoisHuit, Id):
dem=time()-(60*60)
misajour=1
while 1 :
heure=time()
if huitHeures=="oui":
x=0
while x<nbFoisHuit:
h=(x*8)+int(strftime('%H', localtime()))
x=x+1
traitement(ent+nb1+'/hourly-weather-forecast/'+nb2+'?hour='+str(h), repsauv+"/huitHeures"+str(x), repsauv)
print("huitHeures "+str(x)+" Ok")
if heure-dem >= 60*60:
x=0
while x<nbJour:
x=x+1
traitement(ent+nb1+'/daily-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Jour"+str(x), repsauv)
print("Jour "+str(x)+" Ok")
if matin=="oui":
traitement(ent+nb1+'/morning-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Matin"+str(x), repsauv)
print("Matin "+str(x)+" Ok")
if apresmidi=="oui":
traitement(ent+nb1+'/afternoon-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/AM"+str(x), repsauv)
print("AM "+str(x)+" Ok")
if soiree=="oui":
traitement(ent+nb1+'/evening-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Soiree"+str(x), repsauv)
print("Soiree "+str(x)+" Ok")
if nuit=="oui":
traitement(ent+nb1+'/overnight-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Nuit"+str(x), repsauv)
print("Nuit "+str(x)+" Ok")
dem=heure
traitement(ent+nb1+'/current-weather/'+nb2, repsauv+"/CC", repsauv)
print("CC Ok")
if externe is not None:
system(externe)
fin=time()
duree=fin-heure
if notifi == "oui":
if heure-dem == 0:
mess=notify2.Notification('Recmeteo.py v'+Version, 'Météo : mise à jour complète terminée\n en '+str(round(duree,2))+' secondes', 'dialog-information')
else:
mess=notify2.Notification('Recmeteo.py v'+Version, 'Météo : mise à jour partielle terminée\n en '+str(round(duree,2))+' secondes', 'dialog-information')
mess.show()
start=heure
pause=60*interval-int(duree)
if pause < 0:
pause=interval
print("mise a jour en : "+str(duree))
collect()
sleep(pause)
if Id != "sans":
if not path.exists("/proc/"+Id):
exit()
### Initialiation de DBus pour les notifications
if notifi == "oui":
import notify2
notify2.init('Recmeteo.py')
### Vérification répertoire
if not path.exists(repsauv):
makedirs(repsauv)
#### Lancement du script et initialisation de la tache de fond
nb1=findall('\d+', adressWeb)[0]
nb2=findall('\d+', adressWeb)[1]
ent=adressWeb[:adressWeb.find(nb1)]
fin=adressWeb.replace(ent+nb1, "")
fin=fin.replace(fin[:fin.find(nb2)]+nb2, "")
nb2=nb2+fin
print("Version =", Version)
demonise(ent, nb1, nb2, huitHeures, nbJour, interval, nbFoisHuit, Id)
bien entendu j’attends avec impatience les premiers retours d'expériences sous 13.04
@maan,
en effet j'avais oublié cette annotation au début de meteo2.lua, mais recmeteo_python_2.py est voué a disparaitre (Ubuntu passera à python 3 a partir de 14.04)
pour ton soucis avec les images météo il faut modifier le conky.
# -- Conky settings -- #
background yes
update_interval 1
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
double_buffer yes
no_buffers yes
text_buffer_size 2048
# -- Window specifications -- #
own_window yes
own_window_type desktop
own_window_transparent yes
own_window_hints undecorate,below,sticky,skip_taskbar,skip_pager
border_inner_margin 0
border_outer_margin 0
minimum_size 100 100
maximum_width 1440
alignment tm
gap_x -14
gap_y 20
# -- Graphics settings -- #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no
# -- Text settings -- #
use_xft yes
xftfont MaiandraGD:size=24
xftalpha 0.4
uppercase no
default_color 8b8b8b
# -- Déclaration template -- #
template0 ${lua fDrawImage ~/.conky/conky23/meteo/images/\1 \2 \3 \4 \5} # -- images fond -- #
template1 ${lua Meteo_\1 \2 \3 \4 \5 \6} # -- gestion météo --#
template2 ${lua Meteo_\1 \2 \3 \4 \5 \6 \7} # -- icônes météo -- \2=répertoire icônes \3=position \4=taille \5=jour (pour les prévisions) #
template3 ${lua Lune_\1}
template4 ${lua_parse Images_\1 \2 \3 60 \4} # -- Appelle image -- \2=position \3=taille \4=jour (pour les prévisions) #
lua_load ~/.conky/conky23/conky/script/meteo2.lua
lua_startup_hook init ~/.conky/conky23/conky/script/meteo.cfg
lua_load ~/.conky/conky23/conky/script/ring_chrono.lua
lua_draw_hook_post main_rings
lua_load ~/.conky/conky23/conky/script/chrono.lua
lua_draw_hook_pre conky_main
TEXT
#### Lancement du script récupérant les données météo ####
${template1 Maj}
#### Version recmeteo #####
${color FF6600}${goto 450}${voffset -10}${font Syndrome BRK:size=12}recmeteo
${goto 462.5}${voffset 5}v.1.20
#### Heure #####
${voffset 127}${goto 445}${font Zoidal BRK:size=10}${color 0602FF}${time %H}${goto 497}${time %M}${voffset -08}${goto 487}${font Zoidal BRK:size=05}h
${voffset -45}${goto 472}${font Zoidal BRK:size=10}${time %S}
##### ville #####
${voffset 205}${goto 380}${color FF6600}${font Syndrome BRK:size=25}${template1 Ville}
##### température actuelle #####
${voffset -190}${goto 605}${font URW Chancery L:style=Bold:size=25}${if_match ${template1 TempAct}<4}${color red}${blink ${template1 TempAct}°}${else}${color FF6600}${blink ${template1 TempAct}°}${endif}
${font URW Chancery L:style=Bold:size=10}${color white}${goto 623}Ressentit
${goto 605}${font URW Chancery L:style=Bold:size=25}${if_match ${template1 TempRes 1}<4}${color 0602FF}${blink ${template1 TempRes 1}°}${else}${color 66FFFF}${blink ${template1 TempRes 1}°}${endif}
##### Affichage conditions météo #####
${voffset -128}${font URW Chancery L:style=Bold:size=12}${color white}${template1 CondMeteo}
##### Info soleil ####
${voffset 70}${color red}Levé ${color 0602FF}: ${template1 HLeverSoleil 1}h${template1 MLeverSoleil 1}
Couché : ${color red}${template1 HCoucherSoleil 1}h${template1 MCoucherSoleil 1}
##### Affichage infos vent ${color ffe595}######
${voffset -175}${color ffe595}${font Helvetica LT Std:style=Bold:size=10}${goto 305}${template1 VentDirP}
${voffset 40}${color ffe595}${font Helvetica LT Std:style=Bold:size=10}${goto 320}${template1 VentForce} km/h
##### Affichage Probabilité de précipitations Jour/Nuit #####
${voffset -63}${color 522BAF}${font Helvetica LT Std:style=Bold:size=10}${goto 213}${template1 Jour_ProbOrage 1}${voffset 101}${goto 362}${template1 Nuit_ProbOrage 1}
##### Affichage temperature #####
${voffset -70}${goto 185}${color 66FFFF}${template1 Jour_Temp 1}°${voffset 98}${goto 330}${template1 Nuit_Temp 1}°
##### Affichage conditions météo #####
${voffset -215}${goto 235}${font URW Chancery L:style=condensed:size=12}${color white} ${template1 AM_CondMeteo1 1}${voffset 160}${goto 410} ${template1 Noct_CondMeteo1 1}
${voffset 100}${template1 AM_CondMeteo2 1}${goto 270} ${template1 Noct_CondMeteo2 1}
##### Affichage lunaison #####
${voffset -247}${font URW Chancery L:style=Bold:size=15}${color FEEFEF}${goto 795}${template3 ephemerides1}
${goto 900}${voffset 10}${font URW Chancery L:style=Bold:size=10}Couché: ${template3 HCoucherLune}h${template3 MCoucherLune}
${goto 763}Levé: ${template3 HLeverLune}h${template3 MLeverLune}
${font URW Chancery L:style=Bold:size=15}${voffset 15}${goto 850}${template3 ephemerides2}
${font URW Chancery L:style=Bold:size=12}${goto 763}${color 0602FF}${template3 Age}
#### données previsionnelles####
${voffset -270}${font Ubuntu :size=10:style=bold}${color 522BAF}${goto 41}${template1 Jour_ProbOrage 2}${goto 219}${template1 Jour_ProbOrage 3}${goto 641}${template1 Jour_ProbOrage 4}${goto 824}${template1 Jour_ProbOrage 5}
##### Affichage temperature des jours à venir #####
${voffset 30}${goto 15}${font Ubuntu :size=07:style=bold}${color FFBDA8}Max: ${voffset -04}${font Ubuntu :size=10:style=bold}${template1 Jour_Temp 2}°${color white}${goto 122}${font Ubuntu :size=07:style=bold}Min: ${color 66FFFF}${font Ubuntu :size=10:style=bold}${voffset -04}${template1 Nuit_Temp 2}°${goto 197}${color FFBDA8}${font Ubuntu :size=07:style=bold}Max: ${font Ubuntu :size=10:style=bold}${voffset -04}${template1 Jour_Temp 3}°${goto 307}${color white}${font Ubuntu :size=07:style=bold}Min: ${color 66FFFF}${voffset -04}${font Ubuntu :size=10:style=bold}${template1 Nuit_Temp 3}°${goto 615}${color FFBDA8}${font Ubuntu :size=07:style=bold}Max: ${voffset -04}${font Ubuntu :size=10:style=bold}${template1 Jour_Temp 4}°${goto 725}${color white}${font Ubuntu :size=07:style=bold}Min: ${voffset -04}${color 66FFFF}${font Ubuntu :size=10:style=bold}${template1 Nuit_Temp 4}°${goto 805}${color FFBDA8}${font Ubuntu :size=07:style=bold}Max: ${voffset -04}${font Ubuntu :size=10:style=bold}${template1 Jour_Temp 5}°${goto 910}${color white}${font Ubuntu :size=07:style=bold}Min: ${voffset -04}${color 66FFFF}${font Ubuntu :size=10:style=bold}${template1 Nuit_Temp 5}°
##### Affichage vitesse du vent #####
${voffset -85}${font Ubuntu :size=9:style=bold}${color red}${goto 70}${template1 Jour_VentForce 2}${font Ubuntu :size=6:style=bold} km/h${goto 250}${voffset -4}${font Ubuntu :size=9:style=bold}${template1 Jour_VentForce 3}${font Ubuntu :size=6:style=bold} km/h${goto 668}${voffset -4}${font Ubuntu :size=9:style=bold}${template1 Jour_VentForce 4}${font Ubuntu :size=6:style=bold} km/h${goto 855}${voffset -4}${font Ubuntu :size=9:style=bold}${template1 Jour_VentForce 5}${font Ubuntu :size=6:style=bold} km/h
##### Affichage Date #####
${voffset -50}${font Syndrome BRK:size=15}${color 522BAF}${goto 40}${template1 Jour %a_%d 2}${goto 230}${template1 Jour %a_%d 3}${goto 650}${template1 Jour %a_%d 4}${goto 840}${template1 Jour %a_%d 5}
##### Heure mise à jour #####
${voffset 110}${color ffe595}${font Syndrome BRK:size=12}${goto 866} mise a jour
${voffset 10}${goto 915}${template1 Heure}h${template1 Minute}
${voffset -1630}
#### Affichage des cadres utilisés dans le conky ####
#### premier cadre ####
${image ~/.conky/conky23/conky/script/images/fond1.png -p 0,80 -s 173x91}
#### Second cadre ####
${image ~/.conky/conky23/conky/script/images/fond2.png -p 184,80 -s 179x90}
#### troisième cadre ####
${image ~/.conky/conky23/conky/script/images/fond3.png -p 605,80 -s 179x90}
#### quatrieme cadre ####
${image ~/.conky/conky23/conky/script/images/fond4.png -p 792,80 -s 177x90}
#### icônes premier cadre ####
${template2 AM_IconeM ~/.conky/conky23/conky/icones/icone_meteo 2 95 86 52 2}
${template2 Jour_IconeR ~/.conky/conky23/conky/icones/vent 77 130 25 25 2}
${template2 Noct_IconeM ~/.conky/conky23/conky/icones/icone_meteo 90 95 86 52 2}
#### icônes Second cadre ####
${template2 AM_IconeM ~/.conky/conky23/conky/icones/icone_meteo 180 95 86 52 3}
${template2 Jour_IconeR ~/.conky/conky23/conky/icones/vent 260 130 25 25 3}
${template2 Noct_IconeM ~/.conky/conky23/conky/icones/icone_meteo 270 95 86 52 3}
#### icônes troisième cadre ####
${template2 AM_IconeM ~/.conky/conky23/conky/icones/icone_meteo 602 95 86 52 4}
${template2 Jour_IconeR ~/.conky/conky23/conky/icones/vent 680 130 25 25 4}
${template2 Noct_IconeM ~/.conky/conky23/conky/icones/icone_meteo 700 95 86 52 4}
#### icônes quatrieme cadre ####
${template2 AM_IconeM ~/.conky/conky23/conky/icones/icone_meteo 785 95 86 52 5}
${template2 Jour_IconeR ~/.conky/conky23/conky/icones/vent 865 130 25 25 5}
${template2 Noct_IconeM ~/.conky/conky23/conky/icones/icone_meteo 890 95 8 x52 5}
#### icones du moment ####
${template2 IconeM ~/.conky/conky23/conky/icones/icone_meteo 8 185 132 79 1}
${template2 IconeV ~/.conky/conky23/conky/icones/vent 335 225 44 44}
${template2 AM_IconeM ~/.conky/conky23/conky/icones/icone_meteo 150 205 132 79 1}
${template2 Noct_IconeM ~/.conky/conky23/conky/icones/icone_meteo 300 305 132 79 1}
${image /tmp/lune.png -p 830,260 -s 63x63 -f 60}