WebPage Alerter vous informe de la
mise à jour de vos sites WEB favoris
Un outil pour être informé
de la l'actualisation de pages WEB.
Cet exemple de code illustre les fonctionnalités offertes par Microsoft
.Net et la bibliothèque de classe du Framework.
Il met en oeuvre deux techniques simples : l'exécution d'une requête
HTTP et l'utilisation de XML pour la sauvegarde des données.
Le but de cet exemple est de pouvoir interroger une liste d'URL afin de connaître
la date de dernière modification d'une page WEB,
et d'être ainsi averti de la mise à jour de la page.
La date de modification d'un document WEB est fournie par le protocole HTTP
parmi les paramètres d'entête du serveur WEB : LastModified.
On utilise une requête HTTP de type HEAD pour récupérer
uniquement les paramètres entête du serveur.
Télécharger le code source : WebAlerterSource.Zip
(30 Ko)
Télécharger l'exécutable : WebAlerter.zip
(8 Ko)
Attention, le
RunTime Microsoft .Net est indispensable pour exécuter le programme. (20,4
Mb)
Les URLs sont sauvegardées dans un fichier XML :
<?xml version="1.0" encoding="utf-8"?>
<URLs>
<URL>https://www.sam-mag.com</URL>
<URL>http://www.referenceur.com</URL>
</URLs>
Les attributs de l'élément URL sont utilisés pour sauvegarder
les informations de date de dernière modification.
Ce qui va donné ceci :
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="webUrl.xslt"?>
<urls>
<url modified="oui" lastmodified="09/10/2002 19:50:03">https://www.sam-mag.com</url>
<url modified="non" lastmodified="28/09/2002 18:42:27">http://www.referenceur.com</url>
</urls>
Le Code Source de l'application
Déclaration des espaces de noms utilisés
Les premières lignes du programmes déclarent les espaces de noms
nécessaires, ici System.Net pour l'accès HTTP, et System.XML pour
l'utilisation de XML.
using System;
using System.Net;
using System.IO;
using System.Text;
using System.Xml;
Vérification des dates de dernières modification des URLs
L'accès au données XML est réalisé avec l'objet
de type XmlDocument.
La méthode Load permet de charger un fichier XML existant.
Ici, on va parcourir la liste des URLs pour effectuer une requête HTTP
sur chaque URL.
La liste des éléments à tester est obtenue par SelectNodes("/URLs/*")
Pour chaque URL à tester, on va appeller la méthode GetDateTime()
Les dates sont stockés sous forme d'attribut de l'élément
URL.
// Crée un document XML
XmlDocument doc = new XmlDocument();
try
{
// Charge le fichier de données
doc.Load (DATAFILE);
// Sélectionne la liste des URLs à tester
XmlNodeList nodeList;
XmlElement root = doc.DocumentElement;
nodeList = root.SelectNodes("/URLs/*");
// Pour chaque URL
foreach (XmlNode node in nodeList)
{
precModified = string.Empty;
lastModified = string.Empty;
// récupère l'attribut Last Modified Date
foreach (XmlNode attr in node.Attributes)
{
if (attr.Name == "LastModified")
precModified = attr.Value;
}
URL = node.InnerText;
// Récupère la date de dernière modification
int res = GetDateTimeURL (URL, ref lastModified);
if (res == (int) HttpStatusCode.OK)
{
// Sauvegarde l'attribut Modifié Oui/Non
XmlAttribute AttrModified = doc.CreateAttribute("Modified");
// Compare date de modification
if (lastModified == precModified)
AttrModified.Value = "non";
else
AttrModified.Value = "oui";
node.Attributes.Append(AttrModified);
// Sauvegarde l'attribut nouvelle date de dernière modification
XmlAttribute AttrLastModified = doc.CreateAttribute("LastModified");
AttrLastModified.Value = lastModified;
node.Attributes.Append(AttrLastModified);
}
}
// sauvegarde des données
doc.Save(DATAFILE);
}
catch (XmlException e)
{
Console.WriteLine ("Erreur : " + e.Message);
}
Exécution de la requête HTTP
L'éxecution d'une requête HTTP avec les librairies du Framework
est simple.
On commence par crééer un objet de type HttpWebRequest par la
méthode WebRequest.Create(URL)
La réponse à la requête est obtenue par la méthode
GetResponse()
try
{
HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(url);
httpReq.AllowAutoRedirect = true;
httpReq.UserAgent = "Mozilla/2.0 (compatible; MSIE 3.0B; Windows NT)";
httpReq.Method = "HEAD";
HttpWebResponse httpRes = (HttpWebResponse)httpReq.GetResponse();
if (httpRes.StatusCode==HttpStatusCode.OK)
{
lastmodified = httpRes.LastModified.ToString();
}
httpRes.Close();
res = (int) httpRes.StatusCode;
}
catch (UriFormatException e)
{
Console.WriteLine ("Erreur : " + e.Message);
}
catch (WebException e)
{
Console.WriteLine ("Erreur : " + e.Message);
}
Ajout d'URL au fichier XML
Il est possible d'ajouter une URL en spécifiant l'argument -a 'url'
au programme.
Dans ce cas la méthode AddURL est appellée :
// Crée un document XML
XmlDocument doc = new XmlDocument();
// Charge le fichier de données
doc.Load (DATAFILE);
// Créé l'élément
XmlNode newElem=doc.CreateNode(XmlNodeType.Element, "URL", "");
newElem.InnerText = URL;
// Ajoute l'élément au document
XmlElement root = doc.DocumentElement;
root.AppendChild(newElem);
// sauvegarde des données
doc.Save(DATAFILE);
Affichage des résultats
L'affichage des résultats s'obtient en ouvrant le fichier XML WebURL.XML
(!)
Le fichier XSL WebUrl.XSLT permet de spécifier le format d'affichage
des données XML.
Améliorations
Cet exemple peut être améliorer de bien des façons: ajout
d'une interrface Windows, envoi d'emails, ....
Crédits
Réalisé par Jérôme
Lacaille pour Sam-Mag le 08/10/2002
|