La météo de votre ville
Par
, en novembre 2020Si vous avez cliquez ici c’est surement que vous voulez savoir comment vous habillez aujourd’hui ou bien de simplement connaître la température actuelle de votre prochaine destination.
Ce projet a été réalisé par des élèves en spécialité NSI du Lycée Louis Pasteur. Ils sont également les auteurs de ce compte rendu. Pour en savoir plus : Les projets en spécialité NSI
Le but du projet :
Ce projet est un site réalisé en HTML, CSS et Javascript. Ce site a pour but de connaitre la météo, c’est à dire de se renseigner sur le climat et la température d’un lieu précis en écrivant seulement le nom de la ville en question.
Les différents pages du sites :
Tout d’abord le site est composé de 3 pages dont 2 que nous avons créés et une qui est directement liée au site nsi.xyz.
Dans la première page du site, nous avons simplement utilisé du HTML et du CSS.
Elle comporte un menu qui permet de naviguer entre les différentes pages du site.
Nous avons mit une animation lorsque la page se charge.
Voici le code :
HTML :
CSS :
- @keyframes anime {
- 0% {
- transform: translateX(-50%) translateY(-50%) rotate(0deg);
- }
- 85% {
- transform: translateX(-50%) translateY(-50%) rotate(180deg);
- }
- 60%{
- transform: translateX(-50%) translateY(-50%) rotate(190deg);
- }
- 100%{
- transform: translateX(-50%) translateY(-50%) rotate(180deg);
- }
- }
- #style {
- color: white;
- text-shadow: 0 20px 25px #2e2e31, 0 40px 60px #2e2e31;
- font-size: 80px;
- font-weight: bold;
- letter-spacing: -3px;
- margin: 0;
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translateX(-50%) translateY(-50%);
- }
- #style:after{
- content: '';
- padding: 50px 20px;
- position: absolute;
- left: 50%;
- width: 100%;
- transform: translateX(-50%) translateY(-50%);
- top: 50%;
- border: 15px solid #21b2a6;
- animation: 4s anime;
- }
Résultat :
Ensuite, dans la seconde page, nous avons réutilisé le même menu que dans la première page mais c’est sur cette page que nous allons pouvoir utiliser toutes les fonctionnalités du site.
Sur cette page nous avons intégré une barre de recherche et lorsque l’on veut rechercher une ville dans le monde, le site fait appel a une API qui va renvoyer la température ou encore le temps de la ville recherchée.
Voici le Script permettant d’utiliser l’API météo :
JavaScript :
- const api = {
- key: "b147c4df493194eae4491bc6c5bc15f6",
- base: "https://api.openweathermap.org/data/2.5/"
- }
- const searchbox = document.querySelector('.search-box');
- searchbox.addEventListener('keypress', setQuery);
- function setQuery(evt) {
- if (evt.keyCode == 13) {
- getResults(searchbox.value);
- }
- }
- function getResults (query) {
- fetch(`${api.base}weather?q=${query}&units=metric&APPID=${api.key}`)
- .then(weather => {
- return weather.json();
- }).then(displayResults);
- }
- function displayResults (weather) {
- let city = document.querySelector('.location .city');
- city.innerText = `${weather.name}, ${weather.sys.country}`;
- let now = new Date();
- let date = document.querySelector('.location .date');
- date.innerText = dateBuilder(now);
- let temp = document.querySelector('.current .temp');
- temp.innerHTML = `${Math.round(weather.main.temp)}<span>°c</span>`;
- let weather_el = document.querySelector('.current .weather');
- weather_el.innerText = weather.weather[0].main;
- let hilow = document.querySelector('.hi-low');
- hilow.innerText = `${Math.round(weather.main.temp_min)}°C / ${Math.round(weather.main.temp_max)}°C`;
- }
- function dateBuilder (d) {
- let months = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Decembre"];
- let days = ["Lundi", "Mardi", "Mercredi", "Mercredi", "Jeudi", "Vendredi", "Samedi","Dimanche"];
- let day = days[d.getDay()];
- let date = d.getDate();
- let month = months[d.getMonth()];
- let year = d.getFullYear();
- return `${day} ${date} ${month} ${year}`;
- }
Résultat :
Présentation des modules et scripts utilisées :
Abordons directement la chose la plus importante de cette deuxième page, qui est le module Javascript basé sur l’appel d’une API météo.
Pour commencer, qu’est ce qu’une API :
Une API (Application Programming Interface) est un code qui permet à deux programmes logiciels de communiquer. C’est a dire que notre site appellera un autre logiciel afin de récupérer les informations nécessaires sur la météo en temps réel.
- const api = {
- key: "b147c4df493194eae4491bc6c5bc15f6",
- base: "https://api.openweathermap.org/data/2.5/"
Ici, les données sont récupérées grâce à une base de données récupérée sur un site, et une clé (key) d’authentification obtenu via ce même site. Ces données sont retranscrites ensuite sur notre site grâce à des fonctions JavaScript.
Voici une de ces fonctions :
- function dateBuilder (d) {
- let months = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Decembre"];
- let days = ["Lundi", "Mardi", "Mercredi", "Mercredi", "Jeudi", "Vendredi", "Samedi","Dimanche"];
- let day = days[d.getDay()];
- let date = d.getDate();
- let month = months[d.getMonth()];
- let year = d.getFullYear();
- return `${day} ${date} ${month} ${year}`;
Egalement nos professeurs voulaient que l’on importe un menu dépliant permettant de relié notre site au site nsi.xyz. Pour cela nous avons importé un script permettant d’intégré directement ce menu automatiquement :
Cette balise permet d’appeler un script externe qui permettra ensuite d’implanter un menu. Ce script est utilisable grâce au rajout de cette balise :
- <nsi-xyz add="menu" ref="0NSI 2020"></nsi-xyz>
Ce menu dépliant est ajouter en haut à droite de la page :
Les difficultés rencontrées :
Lors de la création de notre site, nous avons rencontré certains problèmes que se soit au niveau du CSS, HTML ou JavaScript.
Par exemple, nous avons eu des difficultés avec l’intégration d’un module JavaScript météo basé sur une API qui ne fonctionner pas car il fallait rentrer une clé d’authentification pour pouvoir l’utilisé dans le script.
Egalement, nous avons eu des soucis au niveau du CSS avec la mise en page des différentes balises qui ne s’agencées pas comme nous le pensions sur la page.
Mise a part ces quelques problèmes nous n’avons rencontrés aucuns autres problèmes concernant les codes des pages.
Les solutions et modifications apportées :
Pour faire face a ces problèmes nous avons cherché des solutions. Pour le problème de l’API avec notre module JavaScript, nous avons dut créé un compte sur https://openweathermap.org/api qui est le site ou nous avons pris l’API météo en question pour recevoir une clé d’authentification a implémenter dans le JavaScript.