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

VB.NET Discussion :

Parser une page html en VB


Sujet :

VB.NET

  1. #21
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    Re,

    Pour tes erreurs du moment :
    - StringReader est une classe de System.IO : il faut référencer l'assembler et faire un using (ou préfixer par le namespace),
    - IHTMLDocument3 : pareil sauf que là il faut référencer la DLL COM MSHTML et pas un assembly.

    Pour le WebBrowser :
    - je sais pas de quand date ce contrôle, mais l'est pas tout jeune (base IE9 ?) donc tu pourrais avoir d'autres soucis avec du HTML "moderne".

    Pour la finalité du truc :
    - d'après le JS les info que tu cherches sont listées par le endpoint http ://x.x.x.x:8111/indicators, as-tu essayé de le taper directement ?
    - question en sus : y'a besoin d'une connexion préliminaire ? Y'a un sessionId enregistré dans un cookie ?
    Je vais corriger les erreurs, merci pour la réponse

    Donc pour le webbrowser c'est pas gagne en revanche c'est ça ?

    Pour ce qui est d'ouvrir directement http ://x.x.x.x:8111/indicators ça me donne ça


    {"valid": true,
    "type": "p-26a_33",
    "speed": 15.490190,
    "pedals1": -0.060610,
    "pedals2": -0.060610,
    "stick_elevator": 0.000000,
    "stick_ailerons": 0.000000,
    "altitude_hour": 70.640305,
    "altitude_min": 70.640305,
    "altitude_10k": 70.640305,
    "bank": -0.753966,
    "turn": -0.014329,
    "compass": 222.586227,
    "clock_hour": 8.233334,
    "clock_min": 14.000000,
    "clock_sec": 37.000000,
    "manifold_pressure": 1.102851,
    "rpm": 1974.764038,
    "oil_pressure": 52.404755,
    "oil_temperature": 52.404755,
    "mixture": 0.833333,
    "mixture1": 0.833333,
    "fuel_pressure": 10.000000,
    "trimmer": 0.000000,
    "throttle": 1.000000,
    "throttle1": 0.000000,
    "weapon1": 0.000000,
    "prop_pitch": 1.000000,
    "prop_pitch1": 0.000000,
    "blister1": 0.000000}


    Alors sur cette page, les valeurs ne sont pas mise à jour automatiquement. Donc est ce que je peut ouvrir ça dans un webbrowser et le faire rafraîchir à 60Hz pour ensuite extraire les donnés à chaque rafraîchissement ?

    EDIT :

    Alors j'ai testé de l'ouvrir dans un web browser et ça ne fonctionne pas car c'est un fichier JSON

  2. #22
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Non, il faut récupérer la resource avec une requête HTTP (puis parser le JSON), pas avec le WebBrowser qui s'attend à du HTML.
    L'avantage c'est que ce sera plus rapide à l'exécution et ton prog sera moins lourd.

    Bon, on est d'accord que derrière ce endpoint y'a bien les info que tu voulais sniffer ?
    Pour le rafraichissement 60Hz ça me parait beaucoup, faut voir à pas faire tomber le server
    (faudrait regarder dans les sources de la page HTML à quelle fréquence ces info sont rafraichies, histoire de faire pareil).
    Niveau code tu peux faire un Timer et à chaque Tick tu requêtes le endpoint pour avoir les info à jour.

    EDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setInterval(updateSlow, 500);
    A priori le rafraichissement se ferait toutes les 500ms, ce qui correspondrait à du 2Hz (2 refresh par sec).
    On est quand même très loin des 60Hz que tu aurais aimés.
    Plus je connais de langages, plus j'aime le C.

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Je ne comprend pas l'histoire avec le HTTP

    En revanche pour le rafraichissement en effet 60Hz c'est beaucoup, mais par la suite 2Hz ne suffira peut être pas car si je peut récupérer les infos, je les enverraient sur Arduino qui lui me tourner des servos moteurs

    Et oui sur cette page j'ai toutes les infos que je souhaite récupérer

  4. #24
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Je ne comprend pas l'histoire avec le HTTP
    L'origine du HTTP remonte à la nuit des temps. On estime son apparition aux alentours de longtemps avant Jésus Christ.

    Référence à la Cité de la Peur à part (d'ailleurs ce proto date de 90, pas de la nuit des temps), il va s'agir pour toi de faire une requête HTTP vers le endpoint (regarde du côté de la classe HttpWebRequest pour le côté technique). Dans l'idée ça va faire la même chose qu'un WebBrowser (aller chercher une resource sur un server) sauf que :
    - les scripts ne seront pas interprétés,
    - les ressources (scripts/styles/images ...) ne seront pas téléchargés,
    - le DOM ne sera pas monté depuis l'éventuel HTML reçu (et donc le format de la réponse n'a pas d'importance),
    - aucun rendu graphique ne sera généré.

    Pour le refresh : en direct depuis une entrée physique tu pourrais imaginer faire du 60Hz, mais au travers d'un server HTTP c'est même pas la peine d'y croire. Même en local à cracher du static pas sûr que ce soit possible (je ne considère pas ton traitement qui a lui seul peut manger le 60ème de seconde que t'as entre chaque refresh). Et je sais pas qui tient le site que tu crawles, mais s'ils voient une telle fréquence de requêtes depuis une même IP, tu risques le ban (baisse de perf notable de leur server, voire suspicion d'attaque DDoS).
    Plus je connais de langages, plus j'aime le C.

  5. #25
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Donc grâce à la classe httpWebRequest, je vais pourvoir récupérer les info sur http://x.x.x.x:8111/indicator

    En fait c'est mon jeux qui transmet les infos sur une page web en utilisant l'adresse IP donc je pense pas que tout le monde soit connecté dessus, donc c'est du local
    Après je verrais bien quelle fréquence il me faudra pour pour que ce soit fluide malgré tout

    Déjà je doit commencer par récupérer ses fichues info

  6. #26
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Tiens, sur ce billet - au titre évocateur - tu trouveras un exemple d'utilisation d'une WebRequest.

    Bon dev.
    Plus je connais de langages, plus j'aime le C.

  7. #27
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Je vais testé le code qui est sur la page que tu m'a donné et je vais corriger ce qui va pas

    Donc avec le code, je vais pouvoir demander au programme de lire la page http://x.x.x.x:8111/indicator théoriquement

    EDIT :

    Aucune erreur à signaler dans le programme lors du débogage. Il me reste à mettre un label pour écrire une info récupérée par le programme sur la page http://x.x.x.x:8111/indicator

  8. #28
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Peut-être pas d'erreur à la compil', mais des chances d'avoir un retour 404 : d'après la source il faut un 's' à 'indicators'

    Tiens nous au jus si t'arrives au bout
    Plus je connais de langages, plus j'aime le C.

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Dans le programme j'ai bien écrit "indicators"

    A l'heure actuelle je cherche toujours pour avoir un retour de ce que je récupère dans une RichTextBox. Et la par contre j'ai une erreur

  10. #30
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu galères sur le parse du JSON, ou sur l'utilisation de la RichTextBox ?
    Plus je connais de langages, plus j'aime le C.

  11. #31
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Je galère sur l'utilisation de la RichTextBox

    Je souhaiterais que tout le contenu de la page http://x.x.x.x:8111/indicators soit écris dans la RichTextBox pour faire un test quoi

    Voila mon code :


    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
    Imports System.IO
    Imports System.Net
    Imports System.Text
    Public Class Form1
        Public Shared Sub Main()
            ' Create a request for the URL. 
            Dim request As WebRequest = WebRequest.Create("http://x.x.x.x/indicators")
            ' If required by the server, set the credentials.
            request.Credentials = CredentialCache.DefaultCredentials
            ' Get the response.
            Dim response As WebResponse = request.GetResponse()
            ' Display the status.
            Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
            ' Get the stream containing content returned by the server.
            Dim dataStream As Stream = response.GetResponseStream()
            ' Open the stream using a StreamReader for easy access.
            Dim reader As New StreamReader(dataStream)
            ' Read the content.
            Dim responseFromServer As String = reader.ReadToEnd()
            ' Display the content.
            Console.WriteLine(responseFromServer)
            ' Clean up the streams and the response.
            reader.Close()
            response.Close()
            RichTextBox1.text = responseFromServer
        End Sub
     
    End Class


    Et voila l'erreur due à cette ligne (RichTextBox1.text = responseFromServer) :
    Impossible de faire référence à un membre instance d'une classe à partir d'une méthode partagée ou d'un initialiseur de membre partagé sans une instance explicite de la classe.

  12. #32
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    le souci vient du fait que tu tentes d'accéder à RichTextBox1, attribut de Form1, depuis une méthode partagée (shared). Une méthode partagée (ou static en C#) est une méthode commune à toutes les instances d'une classe, elle ne peut donc pas accéder à un membre d'une instance en particulier, comme RichTextBox1. Ça c'est pour la vision technique du souci.

    D'un point de vue pédagogique c'est simplement que tu as copié cette méthode Main un peu bêtement. Une telle fonction existe dans le cas d'une application console (tu as d'ailleurs laissé les Console.Write), elle n'a rien à faire dans une classe Form. Donc commence par mettre ce code dans une fonction à part, que tu nommes comme tu veux (ex. getData), qui n'est pas shared et que tu appelleras, dans un premier temps, depuis l'event click d'un bouton. Une fois le fonctionnement validé tu pourras appeler cette nouvelle fonction dans l'event Tick d'un Timer.

    Quelques petits conseilles en rab :
    - tu devrais utiliser le Using pour tes objets IDisposable, ça gèrera tout seul les suppressions propres de tes objets,
    - tu devrais parser ton retour et pas juste l'afficher tel quel, sinon ce sera peut-être pas bien lisible,
    - le RichTextBox c'est bien gentil mais perso je trouve ça vraiment pas pratique à utiliser (il faut pas juste taper son .Text mais jouer avec des sélections pour la mise en forme). Mais bon, ça c'est mon avis et c'est pas la priorité
    Plus je connais de langages, plus j'aime le C.

  13. #33
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Alors la je suis pas sur d'avoir tout pigé

    Je dois supprimé la ligne ConsoleWrite ou je dois l'inclure dans une "private sub ... end sub" ?
    Je l’appellerais par le click d'un bouton
    Et ensuite je rappelle la fonction dans un événement Tick pour le rafraichissement des données

    Que sont les objets IDisposable ? Ce sont les infos que je récupère dans mon JSON ?
    Oui par la suite je parserais le retour afin de récupérer que ce dont j'ai besoin, mais là c'est pour faire un test que je veux récupérer la page complète pour voir si le programme communique bien avec la page

    Que conseillerais tu d'autre que la RichTextBox ?

  14. #34
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    La fonction Console.Write écrit dans la sortie standard pour les applications en mode console, toi ton appli est en mode windows. Ces appels de fonction n'ont donc absolument aucune utilité : tu peux les virer.

    L'appel de ta fonction dans un bouton c'est le temps de valider son bon fonctionnement (tu cliqueras sur le bouton pour voir que le résultat obtenu est bien le résultat escompté), ensuite tu l'appelleras dans un timer pour qu'elle soit exécutée toutes les x millisecondes.

    Laisse tomber les Using/IDisposable pour l'instant, c'est pas obligatoire, on verra ça une autre fois.

    Pour le RichTextBox c'est à toi de voir, disons que je me sens pas de t'expliquer comment ça fonctionne ^^ Perso je m'embetterais pas et je mettrais les infos à peine retravaillées dans un pauv' Label (ou si je m'ennuie dans autant de Label que j'ai d'indicateur). Même pas besoin de TextBox : l'utilisateur ne va pas modifier le contenu.
    Plus je connais de langages, plus j'aime le C.

  15. #35
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Donc ok je vire la fonction Console.Write

    Oui l'appel de la fonction par un bouton me servira que lors des phases de test. Quand le programme sera abouti il n'y aura plus besoin du bouton

    En ce qui concerne le timer, ça rejoins ce que tu disais plus haut dans la discussion, pour avoir un rafraichissement de 2Hz c'est ça

    Non non t'inquiète pas, pas besoin de m'expliquer comme fonctionne la RichTextBox, je vais utiliser un label

  16. #36
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Bon et bien c'est pas glorieux
    Le programme reste bloqué à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim response As WebResponse = request.GetResponse()
    Et il y a une erreur, celle ci :
    Une exception de première chance de type 'System.Net.WebException' s'est produite dans System.dll visual basic

  17. #37
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    tu peux nous montrer le code complet de ta fonction (et tout ce qui a rapport avec ce code) ?
    Plus je connais de langages, plus j'aime le C.

  18. #38
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Je laisse tomber le parse du JSON, j'ai trouver une autre alternative
    Je vais faire un programme qui viens lire dans la mémoire pour pouvoir récupérer les valeurs

  19. #39
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Je te parle de parser le JSON parce que c'est bien un truc qui se fait en .NET
    Perso, en C, je ferais juste de la manip' de chaînes, pas besoin de monter une struct pour si peu
    Plus je connais de langages, plus j'aime le C.

  20. #40
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2017
    Messages : 29
    Points : 5
    Points
    5
    Par défaut
    Voici le code

    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
    Imports System
    Imports System.IO
    Imports System.Net
    Imports System.Text
    Namespace Examples.System.Net
        Public Class Form1
            Public Shared Sub Main()
                ' Create a request for the URL. 
                Dim request As WebRequest = WebRequest.Create("http://x.x.x.x/indicators")
                ' If required by the server, set the credentials.
                request.Credentials = CredentialCache.DefaultCredentials
                ' Get the response.
                Dim response As WebResponse = request.GetResponse()
                ' Get the stream containing content returned by the server.
                Dim dataStream As Stream = response.GetResponseStream()
                ' Open the stream using a StreamReader for easy access.
                Dim reader As New StreamReader(dataStream)
                ' Read the content.
                Dim responseFromServer As String = reader.ReadToEnd()
                reader.Close()
                response.Close()
            End Sub
        End Class
    End Namespace

Discussions similaires

  1. Parser une page HTML avec du PHP
    Par Richard_Rahl dans le forum Langage
    Réponses: 9
    Dernier message: 19/08/2008, 15h36
  2. Parser une page html ?
    Par SimoX1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/12/2006, 19h10
  3. Parser une page Html pour récuperer valeur
    Par Andry dans le forum Delphi
    Réponses: 5
    Dernier message: 01/12/2006, 17h10
  4. Parser une page html, quel outil ?
    Par ggnore dans le forum Linux
    Réponses: 5
    Dernier message: 28/11/2006, 11h48
  5. parser une page HTML pour en retirer de l'info
    Par belakhdarbts10 dans le forum ASP
    Réponses: 1
    Dernier message: 29/10/2006, 18h38

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