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

APIs XML Discussion :

Requete XML, comment faire?


Sujet :

APIs XML

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut Requete XML, comment faire?
    Bonjour

    J'ai un website qui me permet (soi disant) d'avoir un access distant a mes donnees.

    Ils me donne une adresse web et me donne un fichier txtavec la requete XML, je dois juste mettre mon login et mot de passe dans les champs apropries.

    Seulement, une fois le fichier du code de XML complete, comment lancer la requete?

    Merci!

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Le langage de requête associé à XML s'appelle XPath. Il existe aussi XQuery pour interroger une base XML.

    Pouvez-vous poster un exemple de requête ??

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Je dois effectuer ce genre de requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="UTF-8"?>
    <ServiceLogin>
    <username>${Lameth}</username>
    <password>${Caysecret}</password>
    <ShortName>${Lam}</ShortName>
    </ServiceLogin>
    Sur une adresse whb fournie http://www.site.com/login

    Et donc je veux le faire avec VBA Excel...

    Si les requete SQL par ADO j'y aryve, la c'est encore obscur...

  4. #4
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Bon, alors, je pense plutôt qu'il faut voir cela comme une requête HTTP c'est-à-dire un POST avec le XML en question en y ayant mis les vraies valeurs... Une sorte de service web...

    Plutôt qu'avec VBA à 100%, j'utiliserais une classe .Net appelée par VBA. J'ai déjà fait cela : http://sourceforge.net/projects/light-html2xml

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Merci Alain,

    J'y ai passe la nuit sans succes, j'arrive pas a me debrouiller...

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Le problème se situe où ? Faire une requête HTTP depuis VBA ?

  7. #7
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    oui clairement, je ne vois pas comment faire ma requete malgre le lien poste...

    J'ai trouve ca, j'essaye une sauce cette nuit et reviens... http://www.developpez.net/forums/sho...quete+http+vba

  8. #8
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    L'utilisation des fonctionnalités d'Excel pour récupérer des données Web risque fort de ne pas permettre un POST avec données. C'est une solution pour non informaticiens...

    MSXML6 (utilisation de XMLHttpRequest) est une solution de type objet COM qui devrait vous convenir : c'est de la même génération que VBA et il faut l'installer sur le poste avec Excel.

    Microsoft ne développe plus son activité autour des objets COM. Maintenant tout est déployé sur .Net. Et .Net dispose de tout pour faire ce que vous voulez.

    Le code .Net en exemple :
    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
                int nb_essais;
                StreamReader loResponseStream = null;
                HttpWebResponse HttpWResp = null;
                for(nb_essais = 10; nb_essais != 0; nb_essais--) {
                    try {
                        HttpWebRequest HttpWReq = (HttpWebRequest)WebRequest.Create(url);
                        HttpWReq.Method = "GET";
                        HttpWReq.ContentType = "application/x-www-form-urlencoded";
                        ASCIIEncoding encoding = new ASCIIEncoding();
                        HttpWResp = (HttpWebResponse)HttpWReq.GetResponse();
                        Encoding enc1252 = Encoding.GetEncoding(1252);
                        loResponseStream = new StreamReader(HttpWResp.GetResponseStream(), enc1252);
                        s = loResponseStream.ReadToEnd();
                        loResponseStream.Close();
                        try {
                            string xs = Html2Xml(s);
                  Regex normspace = new Regex(@"[\f\n\r\t\v\x85\p{Z}\xA0]+");
                  Regex xmlnsrem = new Regex(" xmlns=\"[^\"]*\"");
                            xDoc.LoadXml(xmlnsrem.Replace(normspace.Replace(Html2Xml(s), " "), ""));
                            HttpWResp.Close();
                            return xDoc.OuterXml;
                        }
                        catch {
                        }
                        break;
                    }
                    catch(Exception e) {
                        Console.WriteLine(e);
                        Thread.Sleep(nb_essais < 3 ? 1000*10 : 1000*5);
                    }
                    finally {
                        try {
                            HttpWResp.Close();
                        }
                        catch {
                        }
                    }
                }

  9. #9
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Merci pour votre aide, a force de recherches j'arrive deja a me connecter grace a ce code, en retour j'obtiens un session ID.

    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
        Sheets(1).Select
     
     
        sURL = Sheets(1).Range("J4")
        sRequete = Sheets(1).Range("J1")
     
        Set oHttp = CreateObject("MSXML2.XMLHTTP")
     
     
        oHttp.Open "POST", sURL, False
        oHttp.Send (sRequete)
        sHTML = oHttp.responseText
     
        Sheets(2).Range("A1") = sHTML
     
        Set oHttp = Nothing

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Encore merci Alain, j'arrive a a peu pres faire tout ce que je veux.

    Maintenant il ne me reste plus qu'a trouver comment mettre en forme mes reponses xml!

  11. #11
    Membre régulier
    Inscrit en
    Janvier 2005
    Messages
    129
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 129
    Points : 72
    Points
    72
    Par défaut
    Pour info, j'enregistre la réponse de mon serveur en fichier "texte formaté avec une extension ".xml", je le rouvre dans Excel et il est formatté.

    Merci beaucoup pour votre aide précieux.

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

Discussions similaires

  1. Requete SQL : comment faire un cumul
    Par yannick069 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/04/2015, 13h21
  2. [VBA et XML]Comment faire une requete en XML?
    Par EvaristeGaloisBis dans le forum Général VBA
    Réponses: 1
    Dernier message: 15/06/2008, 13h59
  3. [SQLLite] requete SQL comment faire
    Par babaahmed dans le forum Langage SQL
    Réponses: 8
    Dernier message: 02/06/2006, 17h09
  4. [struts requete sql] comment faire un wait
    Par chouchou93 dans le forum Struts 1
    Réponses: 1
    Dernier message: 15/05/2006, 19h04
  5. [SQL] requetes inbriquées, comment faire celle ci??
    Par Devil666 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/05/2005, 15h44

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