Javascript asynchrone

Licence Informatique 1ère année

Jean-Marc Lecarpentier

Enseignement des technologies du Web

 

Travail personnel

Notes de cours

Exercice 1 — Service d'articles #

Cet exercice fait partie de ceux qui seront évalués. La page doit être accessible et fonctionnelle à l'URL suivante :

https://dev-LOGIN.users.info.unicaen.fr/TW2-2025/TP09/ex1/articles.html
(en remplaçant LOGIN par votre nom de login). Pensez à vérifier la validité W3C de votre page !

D'autre part, l'élément head doit contenir le code suivant :

<meta name="author" content="LOGINS" />
en remplaçant LOGINS par les noms de login des étudiant·e·s qui ont travaillé sur cette page, séparés par des virgules. (Il faut laisser name="author" tel quel, par contre !) Par exemple, si dupont210 et durand212 ont travaillé ensemble, ils mettent <meta name="author" content="dupont210,durand212" /> dans le head de leur page. Ça permettra à notre script de savoir qui a travaillé avec qui. Attention, le travail en binôme est réservé aux cas où il n'y a pas assez de machines disponibles.

Il est conseillé de vérifier que l'exercice a été correctement rendu en utilisant l'application evalweb.

Vous avez jusqu'au début du TP de la semaine suivante pour terminer l'exercice.

Un web service d'articles

Pour cet exercice, nous allons utiliser un service web qui propose une base d'articles (fictifs) dans laquelle on peut rechercher par nom d'auteur (nom partiel ou complet). La documentation du service web est à l'URL https://ensweb.unicaen.fr/TW2/services/articles/

Interrogation du service web

Télécharger l'archive contenant les fichiers du TP et installer le tout dans le dossier du TP.

Compléter la fonction init() pour que le formulaire capte le submit.

Écrire la fonction recherche qui est déclenchée au submit du formulaire et qui va effectuer la recherche d'articles en effectuant une requête XHR vers le service web. Attention penser à bloquer le submit avec preventDefault() comme d'habitude.
Attention si le champ de recherche est vide ou ne contient que des espaces, il ne faut pas interroger le service web et il faut afficher un message d'erreur comme ci-dessous.
L'évènement load de la requête XHR déclenchera la fonction afficheReponse (on pourra commencer en y mettant simplement un console.log de la réponse reçue.

Message d'erreur si champ vide
Message d'erreur si champ vide

Affichage des résultats de recherche

Écrire la fonction afficheReponse qui affichera les résultats de l'interrogation du service web.
Attention il faut regarder si la réponse contient un message d'erreur ou non.

Si la valeur contenue dans la clé result correspond à une erreur, afficher le message d'erreur dans le formulaire comme sur l'exemple ci-dessous.
Pour tester cela il faudra mettre dans clés erronées dans l'URL de la requête XHR.

Message d'erreur si la réponse est un message d'erreur
Message d'erreur si la réponse est un message d'erreur

Si la liste des résultats est vide, afficher comme sur l'exemple ci-dessous :

Liste de résultats vide
Liste de résultats vide

Si la liste des résultats est non vide, afficher les articles en utilisant un élément section par article, comme sur l'exemple ci-dessous.

Exemples de noms pour tester :

  • Carson (8 résultats)
  • Stein (78 résultats)
  • Dora (3 résultats)
Affichage des articles
Affichage des articles

Exercice 2 — Images Flickr #

Attention : cet exercice sera continué lors du prochain TP et sera noté sur 10.

Cet exercice fait partie de ceux qui seront évalués. La page doit être accessible et fonctionnelle à l'URL suivante :

https://dev-LOGIN.users.info.unicaen.fr/TW2-2025/TP09/ex2/images.html
(en remplaçant LOGIN par votre nom de login). Pensez à vérifier la validité W3C de votre page !

D'autre part, l'élément head doit contenir le code suivant :

<meta name="author" content="LOGINS" />
en remplaçant LOGINS par les noms de login des étudiant·e·s qui ont travaillé sur cette page, séparés par des virgules. (Il faut laisser name="author" tel quel, par contre !) Par exemple, si dupont210 et durand212 ont travaillé ensemble, ils mettent <meta name="author" content="dupont210,durand212" /> dans le head de leur page. Ça permettra à notre script de savoir qui a travaillé avec qui. Attention, le travail en binôme est réservé aux cas où il n'y a pas assez de machines disponibles.

Il est conseillé de vérifier que l'exercice a été correctement rendu en utilisant l'application evalweb.

Vous avez jusqu'au début du TP de la semaine suivante pour terminer l'exercice.

Flickr et services web

Un des objectifs de cet exercice est d'utiliser des outils réels du web. Pour cette première partie, nous utiliserons les services de Flickr.
Flickr est un service de gestion et de partage d'images qui propose une API permettant d'explorer les images publiques des utilisateurs.

Création de compte et de clé d'API

Pour utiliser l'API de Flickr, il faut avoir un compte utilisateur et une clé d'API fournie par Flickr sur demande. Malheureusement, depuis peu Flickr n'accepte plus la création de nouvelles clés pour les comptes non payants.

Si vous aviez déjà créé une clé l'an passé, alors il faut la réutiliser.

Sinon, vous allez utiliser les clés suivantes selon votre groupe et votre nom. Attention, le nombre de requêtes par heure est limité, il faut donc éviter de faire de nombreuses requêtes pour rien.

GroupeNomClé API à utiliser
1AA à E inclus284b7f350f73af0ea34e62600e96da8b
F à Za66486ab8ee012e12e3196d2434a2f31
1BA à H inclusdcf45ca6d177b93f546f4dd936e4cf2f
H à Z3e1021279eed7a865ddee509c4f8cc89
2AA à E inclus9d70ee9ffe49899b1c69797f24229281
F à Z020fb706488a4ca350656dda754ab50d
2BA à K inclus a6ef6a8ca1d83760bebbd5d7169ce05e
K à Z75ce2c9c355a10a470c041065a3b8139
3AA à F inclus e7a445e62aaf85e1566e1d01b269ecbb
G à Z7d5442ca360dced910c889da85259587
3BA à F inclus be9c7200ece08e38dbe736c1f77cd0d7
G à Z641c72dd2e896d86884bab8bfe79c472
4AA à F inclus 19c67c6700fd65178ef67e79a82f73bc
G à Z0a83b6cfc2f08f71dd735e27939497e7
4BA à G inclus 4d29b1b9ecb3a68143f662fa632356c7
H à Zdaaedebc59fa6a22b7930ed5fd9b2650
5AA à L inclus 856b3225fa33d75f64f34bf81fb3154b
K à Z704fce97c24e098da2988ec29bb33c6c
5B A à F inclus1ab086cd03680aee4e176c83b4c23b2e
G à Z09345c01128cba58f7cdc543a6b3a223

Découverte de l'API Flickr

La documentation de l'API Flickr est disponible à https://www.flickr.com/services/api/

Consulter les pages de la section Consultez les rubriques suivantes, en particulier Présentation, Codage, Dates, Tags, URL.

À noter que la partie Authentification de l'utilisateur n'a rien à voir avec votre clé d'API et que nous n'utiliserons pas l'authentification pour les fonctionnalités que nous allons développer.

Pour commencer, nous allons faire une recherche d'images et afficher les petites images des résultats.
Consulter la documentation sur la recherche d'image et expérimenter avec l'Explorateur API (en bas de page) en utilisant votre clé d'API (choisir le format JSON et l'option Ne pas signer l'appel).
Cela vous montre les URLs utilisées pour faire des requêtes.

Important !

Noter en particulier que l'URL se termine par format=json&nojsoncallback=1 donc vos URLs pour interroger l'API Flickr doivent toujours inclure ces 2 paramètres. Ce n'est pas clairement spécifié dans la documentation mais ils sont indispensables pour avoir du JSON en réponse.

Recherche d'images

Télécharger l'archive contenant les fichiers du TP et installer le tout dans le dossier du TP.

Compléter la fonction init() pour que le formulaire capte le submit.

Écrire la fonction recherche qui est déclenchée au submit du formulaire et qui va effectuer la recherche d'images en effectuant une requête XHR vers le service web de Flickr. Attention penser à bloquer le submit avec preventDefault() comme d'habitude.
Attention si le champ de recherche est vide ou ne contient que des espaces, il ne faut pas interroger le service web et il faut afficher un message d'erreur comme dans l'exercice précédent.
L'évènement load de la requête XHR déclenchera la fonction afficheReponse (on pourra commencer en y mettant simplement un console.log de la réponse reçue.

Écrire la fonction afficheReponse qui affichera les résultats de l'interrogation du service web.
Attention il faut regarder si la réponse contient un message d'erreur ou non.

Si la valeur contenue dans la clé stat correspond à une erreur, afficher le message d'erreur dans le formulaire comme dans l'exercice précédent.

Si la liste des résultats est vide, afficher aucun résultat comme dans l'exercice précédent.

Si la liste des résultats est non vide, afficher les images dans la section resultats en utilisant l'image carrée 75x75 (voir la page de documentation sur les URLs qui indique comment avoir l'URL d'une photo). La CSS fournie dans la page doit alors permettre d'avoir 3 images par ligne.
Mettre le titre de l'image pour les valeurs des attributs alt et title de l'élément image.
Compléter les paramètres de la requête pour avoir un nombre de résultats multiple de 3 (par défaut Flickr renvoie 100 résultats), et ce qui permet donc de n'avoir que des lignes complètes, comme ci-dessous.

Affichage des images
Affichage des images

Compléter la fonction afficheReponse pour que les images captent le clic. Au clic sur une image, la fonction getDetails est appelée.
Pour une première version de cette fonction, la section details affichera l'image en grand (par exemple la version large en 1024px).

Affichage des détails

Modifier la fonction getDetails pour que celle-ci, au lieu de simplement afficher l'image en grand, interroge à nouveau Flickr pour avoir les détails de l'image (titre, description, etc).
Voir la méthode flickr.photos.getInfo

Il faut donc faire une nouvelle requête XHR qui appellera la fonction afficheDetails pour le traitement de sa réponse.

Afficher le titre, la description, la date de création et le pseudo du propriétaire de l'image.
Sur le pseudo, on fera un lien vers la page Flickr de cet utilisateur, comme ci-dessous :

Exemple d'afficahge complet
Exemple d'affichage des détails d'une image