IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Veille de page web


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut Veille de page web
    Bonjour,

    Je suis en train d'essayer d'écrire un projet permettant de faire de la veille de page web.

    Pour cela je récupère le source de chaque page web à vérifier toutes les x minutes(l'ensemble des url à vérifier se trouvant dans un fichier xml). A chaque intervalle de temps je vérifie si le source a été modifié pour une même page, si c'est le cas je fais une action pour prévenir l'utilisateur.

    Le code en lui-même fonctionne mais je n'emploie pas la bonne méthode....par exemple si je fait un test sur google.fr le source de la page web n'est jamais le même (pourtant visuellement c'est bien le cas)... certains éléments changent. C'est facile a vérifier il suffit d'afficher le source de la page google.fr, de faire un refresh et de réafficher le source... le contenu n'est pas le même !

    Du coup je ne sais plus trop comment m'y prendre pour développer une application qui me permettrait de faire ce genre de chose car à part récupérer le source je ne vois, pourtant ce genre d'outils existe déjà donc ça doit être possible... a moins que je puisse faire quelque chose à l'aide de System.Windows.Forms.WebBrowser... je ne sais pas trop, si quelqu'un aurait une idée je suis preneur...

    Même si le problème ne vient pas du code ou en tout cas pas uniquement de là (dans tout les cas ca ne peut fonctionner a cause du problème ci-dessus) je vous donne quand même le code, si ca peut vous inspirer... la méthode CheckWebPages() est appelé toutes les x minutes. Les pages à vérifier sont contenues dans WebWatch.xml. Si la page n'a pas encore été vérifié (non présente dans lstUrl) ou que les données sont différentes d'une version précédemment mémorisée de cette même page alors cette nouvelle page (avec sont nouveau contenu) est ajouté à lstUrl (en l'occurence c'est toujours le cas puisque la source de google.fr est toujours différente après un refresh !)

    WebWatch.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?xml version="1.0" encoding="utf-8"?>
    <webPageToWatch>
    	<webPage name="google">
    		<url>http://www.google.fr/</url>
    	</webPage>
    	<webPage name="bing">
    		<url>http://www.bing.com/</url>
    	</webPage>
    <webPageToWatch>
    CheckWebPages() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    private const string xmlPath = "WebWatch.xml";
            private const string archivePath = "";
            private const string proxyAddress = "http://000.000.000.000:1111";
            private List<UrlToCheck> lstUrl = new List<UrlToCheck>();
     
            Timer clock;
     
    private void CheckWebPages()
    {
                HttpWebResponse response;
                WebRequest request;
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(xmlPath);
                Stream dateStream;
                StreamReader reader;
                UrlToCheck wp;
                string responseFromServer;
     
                foreach (XmlNode n in xmlDoc.ChildNodes[1].ChildNodes)
                {
                    wp = new UrlToCheck();
                    wp.Url = n.ChildNodes[0].FirstChild.Value;
                    wp.Name = n.Attributes[0].Value;
                    wp.FileName = wp.Name + DateTime.Now.ToString("yyyyMMddhhmmss") + ".html";
                    request = WebRequest.Create(wp.Url);
                    request.Proxy = new WebProxy(proxyAddress);
                    response = (HttpWebResponse)request.GetResponse();               
                    dateStream = response.GetResponseStream();
                    reader = new StreamReader(dateStream);
                    responseFromServer = reader.ReadToEnd();
                    wp.Data = responseFromServer;                
     
                    UrlToCheck result = lstUrl.Find(delegate(UrlToCheck ur)
                                                    {
                                                        return ur.Name == wp.Name;
                                                    });
                    if ((result == null) || (result!=null && (result.Data != wp.Data)))
                    {
                        lstUrl.Add(wp);
                    }          
     
     
                }
    }

  2. #2
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Salut.

    A tu essayé de lire ta page comme un fichier XML ???

    Ce qui dois changer c'est du javascript, des id, .....

    En lisant le fichier xml, tu pourrais (en cogitant un peu) ne sélectionner que le contenu et donc tester si la page à changer.

    C'est peux être une piste à creuser.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    Citation Envoyé par el_pedro Voir le message
    Salut.

    A tu essayé de lire ta page comme un fichier XML ???

    Ce qui dois changer c'est du javascript, des id, .....

    En lisant le fichier xml, tu pourrais (en cogitant un peu) ne sélectionner que le contenu et donc tester si la page à changer.

    C'est peux être une piste à creuser.
    Merci. Bonne idée je vais tester ça mais dans tout les cas j'ai l'impression que ça va être un peu plus compliqué que je ne le pensais !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    Ca me parait un peu compliqué si je veux faire quelque qui fonctionne pour tous les sites web (ou en tout cas le plus possible...). Difficile (impossible ?) de trouver une règle qui s'appliquerait à l'ensemble des sites.

    Plutôt que de me fier aux sources des pages je me suis dit qu'il serait peut être préférable que je me fie au visuel des pages qui lui ne change pas. Je pense que sélectionner l'ensemble du texte contenu dans un contrôle WebBrowser pourrait être pas mal (sachant que je ne souhaite pas identifier les modifications d'images). Pour identifier les modifications il ne me resterait plus qu'a comparer deux sélections. Reste à voir si une sélection de texte est possible dans un contrôle WebBrowser... A priori ca ne me parait pas possible à faire de façon simple, il va donc falloir que je trouve une astuce, mais laquelle ?

    [EDIT]A priori j'ai trouvé une bonne piste en passant par MSHTML[/EDIT]

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 103
    Points
    103
    Par défaut
    Bon je suis sur une nouvelle piste... j'essaye de selectionner le contenu d'un WebBrowser avec ma page en faisant un SendKeys("^A") je n'aurais plus ensuite qu'à mettre ça dans le presse papier et le récupérer, ca fait un peu bricolage comme méthode mais je n'ai pas trouvé autre chose... Par contre j'ai beau faire un focus sur le contrôle il ne me fait pas la sélection du contenu du WebBrowser...

    Je clôture ce topic, je vais en ouvrir un avec un sujet un peu plus précis...

  6. #6
    Membre actif Avatar de el_pedro
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 200
    Points : 236
    Points
    236
    Par défaut
    Tu risque d'avoir le même problème qu'avant, a savoir que ta page ne sera pas tout à fait identique.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JSP][WEB] recuperer le contenu d'une page web
    Par ypikahe dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 14/03/2008, 10h10
  2. application qui connecte sur une page web
    Par spoolz dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2004, 09h47
  3. [Réseau]Récupération de page Web
    Par n1c0las dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 27/03/2004, 18h15
  4. ouvrir une page Web en mode texte
    Par Halleck dans le forum Windows
    Réponses: 7
    Dernier message: 03/03/2004, 15h08
  5. Réponses: 3
    Dernier message: 28/10/2003, 14h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo