remplace ton recmeteo.py
par ceci, je crois avoir trouvé d’où proviens le problème
#! /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 urllib.request import Request, urlopen
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
from bs4 import BeautifulSoup
Version='1.13'
homedir = path.expanduser('~')
#### initialisation des variables
adressWeb="http://www.accuweather.com/fr/fr/argenteuil/133593/current-weather/133593"
repsauv= "~/essais"
huitHeures="oui"
nbFoisHuit=1
matin="oui"
apresmidi="oui"
soiree="oui"
nuit="oui"
nbJour=1
interval=30
notifi="oui"
externe = None
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)
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):
# fiche = open(fichier, "w")
#pour debug
current_balise=None
x=1
while current_balise is None:
url=Request(adress)
currentCond=urlopen(url)
soup = BeautifulSoup(currentCond)
currentCond.close()
#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.select("[class~=lt]")
for d in date:
jour=compile("^.* - (.*)/(.*)/(.*)").search(d.get_text())
information=information+"jour: "+jour.group(1)+"\n"
information=information+"mois: "+jour.group(2)+"\n"
information=information+"année: "+jour.group(3)+"\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:
span=span.get_text()
if len(findall('\d+', span)) > 0:
x=x+1
if i == 1:
span_nom="Soleil "
else:
span_nom="Lune "
if x == 1:
information=information+span_nom+"lever: "+span+"\n"
elif x == 2:
information=information+span_nom+"durée: "+span+"\n"
else :
information=information+span_nom+"coucher: "+span+"\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=soup.select("[class~=current-city]")[0].get_text().split(",")[0]
longi=compile("lon: '(.*)',").search(str(soup)).group(1)
lat=compile("lat: '(.*)',").search(str(soup)).group(1)
information=information+"ville: "+ville+"\n"
information=information+"lat: "+lat+"\n"
information=information+"long: "+longi+"\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")
information=information+"cond:"+infs[0]+"\n"
information=information+"max: "+infs[1]+"\n"
information=information+"min: "+infs[2].replace("Mn ", "")+"\n"
information=information+"RealFeelmax: "+findall('-?\d+', infs[5])[0]+"\n"
information=information+"RealFeelmin: "+findall('-?\d+', infs[5])[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.replace(" ", "").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):
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))
print("huitHeures "+str(x)+" Ok")
if time()-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))
print("Jour "+str(x)+" Ok")
if matin=="oui":
traitement(ent+nb1+'/morning-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Matin"+str(x))
print("Matin "+str(x)+" Ok")
if apresmidi=="oui":
traitement(ent+nb1+'/afternoon-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/AM"+str(x))
print("AM "+str(x)+" Ok")
if soiree=="oui":
traitement(ent+nb1+'/evening-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Soiree"+str(x))
print("Soiree "+str(x)+" Ok")
if nuit=="oui":
traitement(ent+nb1+'/overnight-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Nuit"+str(x))
print("Nuit "+str(x)+" Ok")
traitement(ent+nb1+'/current-weather/'+nb2, repsauv+"/CC")
print("CC Ok")
if externe is not None:
system(externe)
fin=time()
duree=fin-heure
if notifi == "oui":
if time()-dem >= 60*60:
dem=time()
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)
print("mise a jour en : "+str(duree))
collect()
sleep(pause)
### 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)