PROJET ISN : Site météo du Lycée Léonard de Vinciisn.ldvsoissons.fr/chouete/dossier_isn.pdf ·...
Transcript of PROJET ISN : Site météo du Lycée Léonard de Vinciisn.ldvsoissons.fr/chouete/dossier_isn.pdf ·...
PROJET ISN : Site météo du Lycée Léonard de Vinci
Lien de notre site météo écrit en HTML :
CHOUETE Alexis TSSVT
.Pourquoi avons-nous choisi le projet : un site météo?
Cette idée de créer un site météo a commencé à germer en nous lorsque nous
avons compris que ce site regrouperait à peu près tout ce que nous avions vu
en cours d’ISN. Mais aussi et surtout car d’une part Noheila avait reçu comme
enseignement de spécialité en seconde « MPS » (méthode et pratique
scientifique) où elle avait pu abordée le sujet de la météo et d’autre part car
étant en section sport, j’ai pu à de nombreuses reprises me rendre compte de
l’importance de la météo lorsque l’on joue au golf. D’autant plus que cette
station météo est située sur le joli parcours du Lycée Léonard de Vinci, au trou
N°3!
.Que savons-nous sur les sites météorologiques ?
De nos jours, les sites météo obtiennent leurs prévisions par le biais de
satellites météorologiques à 90% et à 10% des stations au sol, des
radiosondages et des capteurs embarquées sur des avions de ligne ou navire de
commerce. La météo est bien plus importante que ce que nous pouvons en
penser, dire que la météo permet simplement de savoir comment s’habiller le
lendemain serait restreindre le sujet ! Les prévisions météorologiques nous
permettent de mieux appréhender le jour suivant en choisissant la voiture
plutôt que la moto s’il pleut ou en décidant ou non de continuer certains
travaux ou même en protégeant son travail effectué à l’extérieur.
.Quels sont nos objectifs ?
Notre objectif est de créer un site météorologique avec une interface simple.
Etant donné que les seules connaissances que nous avons en matière de
programmation sont dû au cours et à quelques recherches personnelles ce site
n’indiquerait que la température .Afin de réaliser ce projet nous nous aiderons
de certains camarades ayant beaucoup plus d’aisance que nous en ce qui
concerne la programmation et si certaines choses nous dépassent nous ferons
alors appel à notre professeur Mr.Krebs.
Cahier des charges du site météo du lycée
léonard de Vinci
But du projet :
Objectif : Nous avons donc pour objectif de créer le site météo du lycée qui
nous donnera la température et la pression atmosphérique
Solution : Le programme sera réalisé en Python 3.2
*Moyens mis en œuvre :
- Programme en Python 3.2
- Utilisation de bases de données
Comment avons-nous repartis nos tâches ?
Tâches à accomplir
Recherche des outils de la réalisation du site web
Réalisation de la page du siteweb
Mise en place des courbes représentatives de la température et de la pression atmosphérique sur le site web
Elève concernés
Noheila CHERGUI
Alexis CHOUETE
Alexis CHOUETE Et Noheila CHERGUI
Présentation du programme :
-Météo.sq3-> c’est le fichier contenant la base de donnée, c’est donc la base de donnée en
elle-même.
-Création de ce que l’on appelle un connecteur branché sur la base de donnée qui s’appelle «
météo.sq2 ».
-Ensuite on se branche sur ce fichier avec sq3.connect, c’est-à-dire que la fonction sq3 sait
qu’il faut aller lire dans le fichier qui est à l’adresse renseigné à l’intérieur.
-On essaye de créer une table si jamais elle n’existe pas-> c’est la 1ère exécution dans la base
de donnée : on créer une table (une table c’est un tableau) dans ce tableau il va y avoir une
colonne pour les jours, une pour les mois etc.
Tout cela juste au début pour préparer la base de données
-Si elle n’existe pas on l’a crée et si la table qui existe dedans n’existe pas on crée la table. Si
ça existe déjà on passe.
-Ensuite on va avoir une fonction quoi va enregistrer les données dans la base de données.
On crée donc une variable avec 6 champs. « 6[] » veut dire que c’est un tableau avec 6
données-> c’est une ligne avec 6 données et les 6 données correspondent aux 6 instructions
qui sont au-dessus.
Que fait la fonction ?
-Elle va d’abord appeler une autre fonction qui s’appelle « gestion nouvelles données » et
cette fonction va aller chercher sur internet le fichier qui contient les données. Sur le serveur
il y a un fichier qui contient les données météo que la station a transmises.
-Ce fichier va rechercher les données du mois de mai
-Ouvrir sur internet le fichier csv qui est un fichier Excel. Le programme va aller chercher et
télécharger ce fichier et on va ouvrir un fichier texte dans lequel on va recopier ce qu’il y
avait dans le fichier, ici on va le mettre dans le fichier texte.
-« with open » ça veut dire qu’on va ouvrir un fichier texte mais le fichier va s’appeler
meteo.texte et « wb » ça veut dire qu’on va ouvrir le fichier en écriture pour écrire dedans.
-« as texte » ça veut dire qu’on va l’ouvrir comme un fichier texte.
-« texte write URL open URL read » c’est pour lire le fichier et donc regarder ce qu’il y a
dedans et ce qu’il y a dans le fichier à cette adresse là on l’écrit dans le fichier météo texte.
-Pourquoi faire ça ? c’est pour ne pas modifier le fichier, c’est le fichier qu’on télécharge sur
internet mais il n’est pas modifiable on prend juste ce qu’il y a dedans et pour travailler sur
ce qu’il y a dedans on commence par le recopier sur un fichier que l’on appelle « météo texte
», le but de cette fonction là
-Ensuite cette fonction là retourne la variable quand elle est terminée ça renvoi le fichier qui
s’appelle « nouvelles données ». Et « nouvelles données » ce sont les lignes qui sont dans le
fichier « meteo texte ».
-Je reviens à ma fonction enregistrer, une fois que j’ai rentré mes nouvelles données-> j’ai
récupérer donc dans la variable « fiche » je vais avoir mes lignes qui étaient dans mon fichier
« meteo texte »
-Je vais regarder combien il y a de lignes, ici « printlentfiche » c’est pour voir combien il y a de
lignes dans le fichier.
-Ensuite on va filtrer ce qu’il y a dans le fichier, on va garder que les nouvelles données
-On créer donc une fonction filtrée qui va ouvrir un fichier qui s’appelle nouvelles données
que l’on va créer dans lequel on va mettre que les nouvelles lignes
-Pour savoir quelles sont les nouvelles lignes on va : aller voir dans la base de données, on va
chercher la dernière chose qui a été écrite sur la base de données, le dernier enregistrement
dans la base de données et on va comparer le dernier enregistrement que l’on a dans la base
de données aux lignes qu’on a dans le fichier qu’on a lu sur internet-> si c’est déjà enregistré
on laisse tomber sinon on l’ajoute à la base de données.
-Juste avant le « print last » trier par ordre de décroissant tous les derniers enregistrements
de la base de données.
-« print last » pour afficher le dernier enregistrement
-Après on compare le dernier enregistrement ligne après ligne avec les nouveaux
enregistrements qui sont dans le fichier que l’on a pris sur internet qui sont dans le fichier
météo texte.
- Ensuite on compare les dates : « If int données années » > « int last » c’est à-dire si l’année
récupéré dans le nouveau fichier est plus grande que l’année du dernier enregistrement à ce
moment là on va écrire dans la base de données les nouvelles données et on teste le mois
avec « ELIF » qui veut dire « sinon si » et ainsi de suite pour les jours etc.
-Mise à jour base de données :
-Concrètement sur le serveur tourne tous les minutes , il s’exécute et va vérifier qu’il y a des
nouvelles données et va les rajouter à la base de données toutes les minutes, il complète la
base de données.
-Récupération des graphe
-La fonction collect sert a collecter les données de la base données
-Lecture data= récupération de données et contient les donnes du début à la fin on va dans
la base de donne pour lire les dates du début jusqu’à la fin
Puis il va y avoir les graphiques avec x en abscisse et y en ordonnée
- Tkinter (Tk interface) est un module intégré à la bibliothèque standard de Python, bien qu'il
ne soit pas maintenu directement par les développeurs de Python. Il offre un moyen de créer
des interfaces graphiques via Python.
Tout au long de ce projet nous avons connu plusieurs difficultés, par exemple le choix des
fonctions. Nous avons donc à plusieurs reprises demandées de l’aide auprès de notre
professeur.
Bilan et perspectivesNotre projet est assez rudimentaire, dans le sens où notre site ne traite que la température
et la pression atmosphérique, à cela rajoutez l’interface qui n’est pas non plus rayonnantes.
Donc il est assez simple de dire que oui beaucoup d’amélioration sont possibles en ajoutant
d’autres mesures comme : la vitesse du vent ou le taux d’humidité ; et en améliorant notre
interface afin de la rendre plus attrayant. Cependant nous n’avions aucunes notions de
programmation avant d’intégrer la spécialité ISN.
Cette spécialité ne pouvait être qu’enrichissante, dans le sens où nous n’avions aucunes
notions en programmation. Mais nous avons appris beaucoup plus, le travail d’équipe
nécessaire afin d’avancer, l’entraide que l’on a reçu et que l’on a essayé d’apporter à d’autres
groupes et surtout l’organisation car nous nous sommes vite rendu compte que la
procrastination serait notre pire ennemi. Heureusement que notre professeur a su plus que
nous épauler.
Programmeimport cgifrom urllib.request import urlopenimport sqlite3import osimport os.pathimport timeimport datetimeimport matplotlibimport matplotlib.path as pathimport matplotlib.pyplot as pltfrom matplotlib.colors import BoundaryNormfrom matplotlib.ticker import MaxNLocatorimport matplotlib.patches as patchesimport matplotlib.mlab as mlabimport numpy as npimport dateutilimport cgifrom collections import Counterform = cgi.FieldStorage()print("Content-type: text/html; charset=utf-8\n")debut = """<!DOCTYPE html><head> <title>MeteoPythonWebServer</title> <meta http-equiv="refresh" content="120"></head> <body> <table border="0" width="100%"> <tbody style="background-color: rgb(255, 255, 200)"> <tr align="center"> <td> <div>Lycée Léonard de Vinci - Soissons - Station météorologique<span class="Apple-converted-space"> </span><br>"""fin = """
</td> </tr> </tbody> </table> </td> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> <tr> </tr> </tbody> </table> </td> </tr> </tbody> </table> </body></html>print(debut)rep = os.getcwd()try: os.mkdir(rep + "/meteo")except: print('')rep=rep+"/meteo"os.chdir(rep)rep_meteo=reptry: os.mkdir(rep + "/Sqlite3")except: print('')rep=rep+"/Sqlite3"fichierBaseDonnees =rep+"/meteo.sq3"con=sqlite3.connect(fichierBaseDonnees)os.chdir(rep)try: con.execute("CREATE TABLE data (jour INTEGER, mois INTEGER, annee INTEGER, heures INTEGER, minutes INTEGER, temperature_ext REAL)")except: print('')def date():dateactuelle=[int(time.strftime("%d")),int(time.strftime("%m")),int(time.strftime("%Y")),int(time.strftime("%H")),int(time.strftime("%M"))] return(dateactuelle)def DateRelecture(tupl):
NewFormatDate=datetime.datetime.strptime(str(tupl[0])+"/"+str(tupl[1])+"/"+str(tupl[2])+"/"+str(tupl[3])+"/"+str(tupl[4]), "%Y/%m/%d/%H/%M") return(NewFormatDate)def graphe24heures(): Data=grapheperiode(1)# graphiqueA(1,Data)# graphiqueB(1,Data)# graphiqueC(1,Data) return(Data)def graphe48heures(): Data=grapheperiode(2)# graphiqueA(2,Data)# graphiqueB(2,Data)# graphiqueC(2,Data) return(Data)def grapheSemaine(): Data=grapheperiode(7)# graphiqueA(7,Data)# graphiqueB(7,Data)# graphiqueC(7,Data) Return LectureData(datedebut,datefin):date=[datedebut[0],datedebut[0],datedebut[1],datedebut[0],datedebut[1],datedebut[2],datedebut[0],datedebut[1],datedebut[2],datedebut[3],datedebut[0],datedebut[1],datedebut[2],datedebut[3],datedebut[4]] curseur = con.cursor() curseur.execute("SELECT * FROM data WHERE (annee>?) or (annee=? and mois>?) or (annee=? andmois=? and jour>?) or (annee=? and mois=? and jour=? and heures>?) or (annee=? and mois=? and jour=? and heures=? and minutes>?) ",date) data = list(curseur) return(data)def graphiqueA(periode,Data): if periode==2:Aname="a2.png" if periode==7: Aname="a7.png" if periode==1: Aname="a1.png" k=0 X=[] Y=[] Z=[] T=[] U=[] S=0 collect=Data[22] while k < len(collect):date1=str(collect[k][0])+"/"+str(collect[k][1])+"/"+str(collect[k][2])+"/"+str(collect[k][3])+"/"+str(collect[k][4]) datetime1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M") if k==0: datedebut1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M")
if k==len(collect)-1: datefin1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M") X.append(datetime1) Y.append(collect[k][5]) Z.append(collect[k][7]) T.append(collect[k][12]) S=S+collect[k][12] U.append(S) k=k+1 k=0 while k < len(collect): k=k+1Mint=Data[8][0] Maxt=Data[9][0] Minr=Data[14][0] Maxr=Data[15][0] Minp=Data[16][0] Maxp=Data[17][0]f, axarr = plt.subplots(2, sharex=True,figsize=(8,4), facecolor='#FFFFC8') plt.xticks(fontsize = 9) axarr[0].plot(X, Y,label='Température',markersize=3,linewidth='1') axarr[0].legend(loc="upper left", markerscale=3., scatterpoints=1, fontsize=8) axarr[0].set_title('Température (°C)') axarr[0].axis([datedebut1, datefin1, Minr-5,Maxt+5 ]) axarr[0].grid(True)def graphiqueC(periode,Data): if periode==2: Cname="c2.png" if periode==7: Cname="c7.png" if periode==1: Cname="c1.png") k=0 X=[] Y=[] Z=[] collect=Data[22] while k < len(collect): date1=str(collect[k][0])+"/"+str(collect[k][1])+"/"+str(collect[k][2])+"/"+str(collect[k][3])+"/"+str(collect[k][4]) datetime1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M") if k==0: datedebut1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M") if k==len(collect)-1: datefin1=datetime.datetime.strptime(date1, "%d/%m/%Y/%H/%M") X.append(datetime1) Y.append(collect[k][5]) Z.append([int(collect[k][11]),int(3.6*collect[k][9])]) k=k+1 N=[0,0,0,0,0,0] P=[0,0,0,0,0,0] T=0
p=0 q=0 while p <= len(Z)-1: for j in range (0,16): if Z[p][0]>j*11.25 and Z[p][0]<(j+1)*11.25: N[j]=N[j]+Z[p][1] T=T+Z[p][1] p=p+1 while q <= 15: if q+7<=15: P[q+7]=round(30*N[q]/T,2) else: P[q-9]=round(30*N[q]/T,2) q=q+1 #P.reverse() properties = ['E', 'ENE', 'NE','NNE', 'N', 'NNO','NO','ONO','O','0SO', 'SO','SSO', 'S', 'SSE','SE','ESE'] values=P matplotlib.rc('axes', facecolor = 'white') fig = plt.figure(figsize=(5,4.5), facecolor='#FFFFC8') axes = plt.subplot(111, polar=True) t = np.arange(0,2*np.pi,2*np.pi/len(properties)) plt.xticks(t, []) plt.yticks(np.linspace(0,10,11)) points = [(x,y) for x,y in zip(t,values)] points.append(points[0]) points = np.array(points) codes = [path.Path.MOVETO,] + \ [path.Path.LINETO,]*(len(properties) -1) + \ [ path.Path.CLOSEPOLY ] _path = path.Path(points, codes) _patch = patches.PathPatch(_path, fill=True, color='blue', linewidth=0, alpha=.1) axes.add_patch(_patch) _patch = patches.PathPatch(_path, fill=False, linewidth = 2) axes.add_patch(_patch) plt.scatter(points[:,0],points[:,1], linewidth=2, s=20, color='red', edgecolor='black', zorder=10) plt.ylim(0,10) for i in range(len(properties)): angle_rad = i/float(len(properties))*2*np.pi angle_deg = i/float(len(properties))*360 ha = "right" if angle_rad < np.pi/2 or angle_rad > 3*np.pi/2: ha = "left" plt.text(angle_rad, 10.75, properties[i], size=14, horizontalalignment=ha, verticalalignment="center") plt.savefig(Cname, facecolor='#FFFFC8',dpi=72)def graphiqueB(periode,Data): if periode==2: Bname="b2.png" if periode==7: Bname="b7.png" if periode==1:
Bname="b1.png"def enreg(): fiche=15*[] fiche=GestionNouvDonnees() dst=filtrer(fiche) data = open("DonneesActives.csv", "r") NouvDonnees=data.readlines() for ligne in NouvDonnees: ligne donnees = ligne.rstrip('\n').split(",") con.execute("insert into data (jour, heures, minutes, temperature_ext, humidite_ext) values (?,?,?,?,)",donnees) con.commit() data.close() return()
def GestionNouvDonnees(): url = 'http://meteo.ldvsoissons.fr/42017lgcsv.csv' with open('meteo.txt', 'wb') as txt: txt.write(urlopen(url).read()) fichier_travail = open('meteo.txt','r')
NouvDonnees=fichier_travail.readlines() fichier_travail.close() return(NouvDonnees)
def filtrer(fiche): dst = open("DonneesActives.csv", "w") Jouridx = 0 Heureidx = 1 Minutesidx = 2 Temperature_extidx = 3 curseur = con.cursor() curseur.execute("SELECT * FROM data ORDER BY jour DESC, heures DESC, minutes DESC LIMIT 1 ") last = curseur.fetchone() last1=[last[2],last[1],last[0],last[3],last[4]] lastlect=DateRelecture(last1) print("généré le: ") print(lastlect) suite1='''</div> <br><div> <a href="http://meteo.ldvsoissons.fr/42017lgcsv.csv">Fichier de données</a><br> <a href="http://meteo.ldvsoissons.fr/presentation/Presentationmeteoauto.html">Présentation du projet</a></div> </td> </tr>''' print(suite1) for ligne in fiche: donnees = ligne.rstrip('\n\r').split(",") try:
if len(last)!=0: try: if int(donnees[Anneeidx])>int(last[2]) : dst.write("%s,%s,%s,%s \n" % (donnees[Jouridx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) elif int(donnees[Anneeidx])==int(last[2]) and int(donnees[Moisidx])>int(last[1]): dst.write("%s,%s,%s,%s,\n" % (donnees[Jouridx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) elif int(donnees[Anneeidx])==int(last[2]) and int(donnees[Moisidx])==int(last[1]) and int(donnees[Jouridx])>int(last[0]): dst.write("%s,%s,%s,%s,%s\n" % (donnees[Jouridx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) elif int(donnees[Anneeidx])==int(last[2]) and int(donnees[Moisidx])==int(last[1]) and int(donnees[Jouridx])==int(last[0]) and int(donnees[Heureidx])>int(last[3]): dst.write("%s,%s,%s,%s,%s,%s\n" % (donnees[Jouridx],], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) elif int(donnees[Anneeidx])==int(last[2]) ==int(last[1]) and int(donnees[Jouridx])==int(last[0]) and int(donnees[Heureidx])==int(last[3]) and int(donnees[Minutesidx])>int(last[4]): dst.write("%s,%s,%s,%s,%s,%s\n" % (donnees[Jouridx], donnees[Moisidx], donnees[Anneeidx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx]))
except: print('')else: dst.write("%s,%s,%s,%s\n" % (donnees[Jouridx], donnees[Moisidx], donnees[Anneeidx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) except: dst.write("%s,%s,%s,%s,%s\n" % (donnees[Jouridx], donnees[Moisidx], donnees[Anneeidx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx])) dst.close() return(dst)def lectactuelles(): totaldata=graphe24heures() lastref=len(totaldata[22])-1 act=totaldata[22][lastref] dst = open("DonneesActives.csv", "w") Jouridx = 0 Heureidx = 1 Minutesidx = 2 Temperature_extidx =3 curseur = con.cursor() curseur.execute("SELECT * FROM data ORDER BY annee DESC, mois DESC, jour DESC, heures DESC, minutes DESC LIMIT 1 ") last = curseur.fetchone() donnees=last actuelles=[donnees[Jouridx], donnees[Heureidx], donnees[Minutesidx], donnees[Temperature_extidx] <tr align="center"> <td style="text-align: center;"><span style="color: rgb(85, 85, 85); font-family: -webkit-standard;font-size: 14px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: center; text-indent: 0px; text-transform: none; white-space:
normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 200); display: inline !important; float: none;"> - Température</span> </td> </tr> <tr align="center"> <td style="text-align: center;"> <table border="1" width="100%"> <tbody> <tr> <td style="text-align: center;"><br> </td> <td style="text-align: center; margin-left: -149px;">actuelle</td> <td style="text-align: center; width: 186.65px;">moyenne (24h)</td> <td style="text-align: center; width: 188.767px;">minimum (24h)<br></td> <td style="text-align: center; width: 188.217px;">maximum (24h)<br></td> </td> </tr> <tr> <td style="text-align: center;">Température extérieure (°C)<br> </td> <td style="text-align: center;">''' #deb,fi,d,f,h,j,m,l,MinTemp24h,MaxTemp24hprint(suite2) print(donnees[Temperature_extidx]) print('''<br> </td> <td style="text-align: center;">''') print(totaldata[23]) print('''<br> </td> <td style="text-align: center;">''') print(totaldata[8][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[8][1]) print("-") print(totaldata[8][2]) print("-") print(totaldata[8][3]) print(" à ") print(totaldata[8][4]) print("h") print(totaldata[8][5]) print('''</span><br> </td> <td style="text-align: center;">''') print(totaldata[9][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[9][1]) print("-") print(totaldata[9][2]) print("-") print(totaldata[9][3])
print(" à ") print(totaldata[9][4]) print("h") print(totaldata[9][5]) print(''' </span></td> </tr> <tr><td style="text-align: center;">Température extérieure (°C)<br> </td> <td style="text-align: center;">''') totaldata=graphe48heures() print(totaldata[23]) print('''<br> </td> <td style="text-align: center;">''') print(totaldata[8][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[8][1]) print("-") print(totaldata[8][2]) print("-") print(totaldata[8][3]) print(" à ") print(totaldata[8][4]) print("h") print(totaldata[8][5]) print('''</span><br> </td> <td style="text-align: center;">''') print(totaldata[9][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[9][1]) print("-") print(totaldata[9][2]) print("-") print(totaldata[9][3]) print(" à ") print(totaldata[9][4]) print("h") print(totaldata[9][5]) print(''' </span></td> </tr><tr align="center"> <td colspan="4" rowspan="1"><img style="width: 400px; height: 277px;" alt="48heures" src="meteo/Sqlite3/a2.png"><img style="width: 400px; height: 277px;" alt="vent" src="meteo/Sqlite3/b2.png"><img style="width: 300px; height: 265px;" alt="rose" src="meteo/Sqlite3/c2.png"><br>
</td> </tr> </tbody> </table> Semaine<br> </td> </tr> <tr> <td style="text-align: center;"> <table border="1" width="100%"> <tbody> <tr> <td style="text-align: center;"><br> </td> <td style="text-align: center; width: 186.65px;">moyenne</td> <td style="text-align: center; width: 188.767px;">minimum<br> </td> <td style="text-align: center; width: 188.217px;">maximum<br> </td> </tr> <tr> <td style="text-align: center;">Température extérieure (°C)<br> </td> <td style="text-align: center;">''') totaldata=grapheSemaine() print(totaldata[23]) print('''<br> </td> <td style="text-align: center;">''') print(totaldata[8][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[8][1]) print("-") print(totaldata[8][2]) print("-") print(totaldata[8][3]) print(" à ") print(totaldata[8][4]) print("h") print(totaldata[8][5]) print('''</span><br> </td> <td style="text-align: center;">''') print(totaldata[9][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[9][1]) print("-") print(totaldata[9][2]) print("-") print(totaldata[9][3]) print(" à ") print(totaldata[9][4])
print("h") print(totaldata[9][5]) print(''' </span></td> </tr><tr align="center"> <td colspan="4" rowspan="1"><img style="width: 400px; height: 277px;" alt="48heures" src="meteo/Sqlite3/a7.png"><img style="width: 400px; height: 277px;" alt="vent" src="meteo/Sqlite3/b7.png"><img style="width: 300px; height: 265px;" alt="rose" src="meteo/Sqlite3/c7.png"><br> </td> </tr> </tbody> </table> Mois<br> </td> </tr> <tr> <td style="text-align: center;"> <table border="1" width="100%"> <tbody> <tr> <td style="text-align: center;"><br> </td> <td style="text-align: center; width: 186.65px;">moyenne</td> <td style="text-align: center; width: 188.767px;">minimum<br> </td> <td style="text-align: center; width: 188.217px;">maximum<br> </td> </tr> <tr> <td style="text-align: center;">Température extérieure (°C)<br> </td> <td style="text-align: center;">''') <tr align="center"> <td colspan="4" rowspan="1"><img style="width: 400px; height: 277px;" alt="48heures" src="meteo/Sqlite3/a30.png"><img style="width: 400px; height: 277px;" alt="vent" src="meteo/Sqlite3/b30.png"><img style="width: 300px; height: 265px;" alt="rose" src="meteo/Sqlite3/c30.png"><br> </td> </tr> </tbody> </table>
<td style="text-align: center;">''') print(totaldata[9][0]) print("</br><span style='font-size:10px;font-style:italic;'>le ") print(totaldata[9][1]) print("-") print(totaldata[9][2]) print("-") print(totaldata[9][3]) print(" à ") print(totaldata[9][4]) print("h") print(totaldata[9][5]) print(''' </span></td> </tr><tr align="center"> <td colspan="4" rowspan="1"><img style="width: 400px; height: 277px;" alt="48heures" src="meteo/Sqlite3/a365.png"><img style="width: 400px; height: 277px;" alt="vent" src="meteo/Sqlite3/b365.png"><img style="width: 300px; height: 265px;" alt="rose" src="meteo/Sqlite3/c365.png"><br> </td> </tr> </tbody> </table> <tr><td width=100% align='center'>Projet ISN : CHERGUI Nohiela CHOUETE Alexis)</td></tr> </table>''')def grapheperiode(periode): collect=[] datefinbis=datetime.datetime.now() datefin=datetime.datetime.timetuple(datefinbis) delta = datetime.timedelta(days=periode)last24heuresdebut=[int(time.strftime("%Y")),int(time.strftime("%m")),int(time.strftime("%d")),int(time.strftime("%H")),int(time.strftime("%M"))] datedebutbis=datetime.datetime.now()-delta datedebut=datetime.datetime.timetuple(datedebutbis) collect=LectureData(datedebut,datefin)MaxTemp24h=[collect[0][5],collect[0][0],collect[0][1],collect[0][2],collect[0][3],collect[0][4]]MinTemp24h=[collect[0][5],collect[0][0],collect[0][1],collect[0][2],collect[0][3],collect[0][4]] TotTemp24h=0 k=0 while k<len(collect if collect[k][5] > MaxTemp24h[0]:MaxTemp24h=[collect[k][5],collect[k][0],collect[k][1],collect[k][2],collect[k][3],collect[k][4]] if collect[k][5] < MinTemp24h[0]:MinTemp24h=[collect[k][5],collect[k][0],collect[k][1],collect[k][2],collect[k][3],collect[k][4]] TotTemp24h=collect[k][5]+TotTemp24h k=k+1
MoyTemp24h=[TotTemp24h/k,datedebut,datefin] deb=DateRelecture(MoyTemp24h[1]) fi=DateRelecture(MoyTemp24h[2]) b=format(MoyTemp24h[0], '.2f') return(deb,fi,d,f,h,j,m,l,MinTemp24h,MaxTemp24h,b)enreg()#graphe24heures()#graphe48heures()#grapheSemaine()lectactuelles()print(fin)
Mise a jour du sitefrom __future__ import divisionfrom collections import *from PIL import Image, ImageTkfrom tkinter import *from urllib.request import urlopenimport sqlite3import osimport os.pathimport mathimport matplotlibrep = os.getcwd()try: os.mkdir(rep + "\\meteo")except: print ("\\meteo existe deja")rep=rep+"\\meteo"os.chdir(rep)rep_meteo=reptry: os.mkdir(rep + "\\Sqlite3")except: print("\\Sqlite3 existe deja")rep=rep+"\\Sqlite3"fichierBaseDonnees =rep+"\\meteo.sq3"con=sqlite3.connect(fichierBaseDonnees)os.chdir(rep)def LectureData(date): print(date) curseur = con.cursor() curseur.execute("SELECT * FROM data WHERE annee=? and mois=? and jour=? and heures=? and minutes=?",date) data = curseur.fetchone() print("data=") print(data)