1. Introduction

Le but de ce projet est de réaliser, comme son nom l’indique, une application web qui permettrait de savoir dès le matin s’il faut prendre une veste contre le vent, un parapluie ou rien du tout. Le programme devra vérifier la météo sur un site spécialisé, l'affichera sur une page web et enverra un email, pour prévenir de la météo du jour.

2. Matériel et méthodes

Matériel:

Une base de données mysql
Un compte sur cron-job.org

Méthode:

1. Flux d'informations météo

La première étape consiste à trouver un flux d'informations météo. La différence avec une information normale est qu'un flux envoie des informations continues et donc se "met à jour" tout seul, les informations affichées seront toujours les plus récentes sans intervention manuelle. J'ai trouvé http://www.prevision-meteo.ch/services qui permet d'afficher la météo sur une page html grâce à la balise <iframe>.

2. Liste d'inscrits

Maintenant il faut créer une liste d'inscrits, pour gérer les adresses mails à qui envoyer la newsletter météo. Pour ce faire j'ai utilisé la base de données mysql. Sur celle-ci on peut créer des listes modifiables depuis un programme php. Il suffit de se connecter sur puis de créer la liste voulue directement sur le site.

3. S'inscrire et se désinscrire

Pour cette étape, nous allons créer un formulaire ou l'utilisateur devra entrer son adresse mail, puis l'envoyer sur la base de donner pour être stockée et réutilisée plus tard. Pour se désinscrire, il s'agira du procédé inverse: l'utilisateur devra entrer son adresse mail pour l'enlever de la liste et ne plus recevoir de mails. Pour ce faire, il faut tout d'abord créer un formulaire sur le fichier inscription.php, où l'utilisateur entrera son email. Dans mon cas, une fois rempli, il doit appeler le fichier inscription_action.php, le code est donc celui-ci: @@<form action = "inscription_action.php"> <p> Votre email: <input type = "text" name = "email"> </p> <p> <input type = "submit" value = "Envoi"> </p> </form>@@ Ensuite il faut s'occuper du fameux fichier inscription_action.php. Dans celui-ci, il faut tout d'abord se connecter à sa base de données dans le programme en utilisant une ligne de code comme celle-ci: $rdbms = mysqli_connect('localhost', 'sarah.furrer', '<mot de passe>', 'sarah.furrer'); Puis il faut récupérer l'adresse qui vient d'être écrite grâce à GET, l'ajouter à la liste dans la base de données puis l'afficher. Cette dernière étape est optionnel mais j'ai pensé qu'il était plus judicieux de pouvoir vérifier quelle adresse on avait inscrite une dernière fois. @@<?php $email = $_GET"email"; print $email; $res = mysqli_query($rdbms, "INSERT INTO inscription_newsletter (Email) VALUES ('$email')"); ?>@@ Pour se désinscrire, il suffit de remplacer le INSERT INTO par DELETE FROM dans un dossier desinscription_action.php accessible depuis un dossier desinscription.php. Il est important de ne pas mettre d'accent dans les noms de fichiers pour ne pas poser problème plus tard.

4. Envoyer des mails

Pour envoyer des mails il faut utiliser la fonction mail avec les variables suivantes: mail($adresse, '$sujet', $message, $headers); Le $headers permet d'afficher le contenu d'une url en html dans le mail. La plupart des messageries ne supportent pas le <iframe> utilisé sur le site, il faut donc utiliser file_get_contents('http://www.prevision-meteo.ch/services/html/renens/horizontal') à la place, cela prend l'image affichée sur le site source, le défaut étant que rien n'est personnalisable avec cette méthode.

5. Créer la newsletter

Pour la newsletter, il va falloir mixer la liste mysql pour compléter la partie adresse des champs mail et le code pour les envoyer. La variable $adresse est donc récupérer dans la colonne Email de ma base de données, ce qui permet d'envoyer le même mail à tous les inscrits. @@<?php $rdbms = mysqli_connect('localhost', 'sarah.furrer', '<mot de passe>', 'sarah.furrer');

$results = mysqli_query($rdbms, "SELECT * FROM `inscription_newsletter`");

$headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

while ($row = mysqli_fetch_assoc($results)) {

$adresse = $row'Email'; $message = file_get_contents('http://www.prevision-meteo.ch/services/html/renens/horizontal');

// Envoi du mail mail($adresse, 'Bonjour voilà la météo du jour', $message, $headers); }

  1. fermer la connexion

mysqli_close($rdbms); ?>@@ Pour que la newsletter soit envoyée tous les matins, j'ai créé un compte sur cron-job.org, qui permet d'appeler une url à un rythme régulier. J'ai donc fait en sorte que dev.gyre.ch/sarah.furrer/projet/envoi_newsletter soit appelé tous les matins à 6h.

6. Mise en place web

Pour que le site soit utilisable, j'ai mis des liens pour s'inscrire et se désinscrire sur la page d'accueil test_accueil.php, y ait affiché la météo grâce au <iframe>, et ait fait un petit fichier css, pour que les couleurs soient un peu plus jolies et originales que du simple noir et blanc. J'ai mis un lien pour retourner sur la page d'accueil sur toutes les pages pour faciliter les retours en arrière et ai réutilisé la même feuille de style sur toutes les pages pour un effet plus homogène.

3. Résultats

Le système d'inscription et de desinscription fonctionne, la newsletter est bien envoyée tous les matins avec la météo.

4. Discussion

Le résultat final est assez éloigné de mon projet de base, en effet je voulais faire une newsletter sur Telegram, ce qui c'est avéré être trop compliqué pour moi. J'ai également eu beaucoup de problèmes avec les envois de mails car <iframe> fonctionne rarement dans les mails, j'ai donc du afficher une url à la place. Je n'avais pas réussi tout de suite à inclure du html dans le mail, et ces deux problèmes ont menés à ce genre de situation: J'ai pu arranger le problème grâce à l'url mais je ne peux plus personnaliser l'image affichée. Mon système d'inscription comporte également de nombreux problèmes: n'importe qui peut inscrire n'importe quoi (adresse email ou pas), autant de fois qu'il le veut, et désinscrire n'importe qui sans son avis. Une amélioration à apporter à ce projet serai donc de rajouter un mot de passe et de vérifier la validité des adresses enregistrées.

5. Conclusion

Objectif de base atteint, on reçoit la météo si on inscrit, mais de nombreuses améliorations à ajouter pour que le projet puisse être une vraie réussite.