19
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

PROJET ISN : Site météo du Lycée Léonard de Vinciisn.ldvsoissons.fr/chouete/dossier_isn.pdf · Cahier des charges du site météo du lycée léonard de Vinci But du projet : Objectif

Embed Size (px)

Citation preview

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">&nbsp;</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)