PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Lire une restRéponse
Lire une restRéponse
Débuté par Juju, 07 mar. 2018 16:18 - 8 réponses
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 07 mars 2018 - 16:18
Bonjour,

J'utilise un restRequête et un restRéponse pour interroger un webservice Prestashop.
J'arrive à avoir un résultat, cependant comment faire pour récupérer les données précises :

Voici mon code :
numCmd est une chaîne= ""
numCmd = "20"

rr_get est une restRequête

rr_get..Méthode = httpGet
rr_get..URL = sUrl+numCmd
rr_get..Utilisateur = key
rr_get..MotDePasse = ""

rep est un restRéponse = RESTEnvoie(rr_get)


SI rep.CodeEtat = "200" ALORS
Info(rep.Contenu)
SINON
Info("Code état : " + rep.CodeEtat + " = " + rep.DescriptionCodeEtat)

FIN


Voici le contenu retourné :
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<order>
<id>
<![CDATA[ 20 ]]>
</id>
<![CDATA[ 11 ]]>
</current_state>
<module>
<![CDATA[ ps_wirepayment ]]>
</module>
<invoice_number>
<![CDATA[ 6 ]]>
</invoice_number>
<invoice_date>
<![CDATA[ 2018-02-06 11:08:02 ]]>
</invoice_date>
<delivery_number>
<![CDATA[ 0 ]]>
</delivery_number>
<delivery_date>
<![CDATA[ 0000-00-00 00:00:00 ]]>
</delivery_date>
<valid>
<![CDATA[ 1 ]]>
</valid>
<date_add>
<![CDATA[ 2018-01-30 15:04:03 ]]>
</date_add>
<date_upd>
<![CDATA[ 2018-02-06 11:08:02 ]]>
</date_upd>
<shipping_number notFilterable="true"/>
<id_shop_group>
<![CDATA[ 1 ]]>
</id_shop_group>
<id_shop>
<![CDATA[ 1 ]]>
</id_shop>
<payment>
<![CDATA[ Transfert bancaire ]]>
</payment>
<recyclable>
<![CDATA[ 0 ]]>
</recyclable>
<gift>
<![CDATA[ 0 ]]>
</gift>
<gift_message/>
<mobile_theme>
<![CDATA[ 0 ]]>
</mobile_theme>
<total_discounts>
<![CDATA[ 0.000000 ]]>
</total_discounts>
<total_discounts_tax_incl>
<![CDATA[ 0.000000 ]]>
</total_discounts_tax_incl>
<total_discounts_tax_excl>
<![CDATA[ 0.000000 ]]>
</total_discounts_tax_excl>
<total_paid>
<![CDATA[ 196.600000 ]]>
</total_paid>
<total_paid_tax_incl>
<![CDATA[ 196.600000 ]]>
</total_paid_tax_incl>
<total_paid_tax_excl>
<![CDATA[ 184.000000 ]]>
</total_paid_tax_excl>
<total_paid_real>
<![CDATA[ 196.600000 ]]>
</total_paid_real>
<total_products>
<![CDATA[ 121.000000 ]]>
</total_products>
<total_products_wt>
<![CDATA[ 121.000000 ]]>
</total_products_wt>
<total_shipping>
<![CDATA[ 75.600000 ]]>
</total_shipping>
<total_shipping_tax_incl>
<![CDATA[ 75.600000 ]]>
</total_shipping_tax_incl>
<total_shipping_tax_excl>
<![CDATA[ 63.000000 ]]>
</total_shipping_tax_excl>
<carrier_tax_rate>
<![CDATA[ 20.000 ]]>
</carrier_tax_rate>
<total_wrapping>
<![CDATA[ 0.000000 ]]>
</total_wrapping>
<total_wrapping_tax_incl>
<![CDATA[ 0.000000 ]]>
</total_wrapping_tax_incl>
<total_wrapping_tax_excl>
<![CDATA[ 0.000000 ]]>
</total_wrapping_tax_excl>
<round_mode>
<![CDATA[ 2 ]]>
</round_mode>
<round_type>
<![CDATA[ 2 ]]>
</round_type>
<conversion_rate>
<![CDATA[ 1.000000 ]]>
</conversion_rate>
<reference>
<![CDATA[ VZJMVJXYL ]]>
</reference>
...


Par exemple pour récupérer la référence commande qui se trouve tout à la fin ...
Membre enregistré
24 messages
Popularité : +4 (6 votes)
Posté le 08 mars 2018 - 02:37
Bonjour,

Tu dois d'abord générer un document XML de référence où seul existe la structure comme un document vierge.
Ce document XML doit être "référencé" par windev :
Menu projet > projet > liste déroulante "Liste des éléments"
Sélectionner "liste des éléments du projet"
Dans la fenêtre qui s'ouvre cliquer sur le bouton "Ajouter" : indiquer le chemin où se trouve le document "nom_de_mon_fichier.xml".

Puis dans le code, tu déclares ce document comme suit :
DocRef_XML est un xmlDocument <Description="nom_de_mon_fichier.xml">


Après avoir interrogé ton WS, tu récupères les données de ta variable "rep.Contenu" comme suit :
DocRef_XML=XMLOuvre(rep.Contenu,depuisChaîne)


Ensuite tu accèdes à l'objet DocRef_XML qui sera structuré comme ton fichier, exemples :
DocRef_XML.order.id:CDATA
DocRef_XML.module.CDATA
etc.

Pour le ":CDATA" je ne sais plus si cela fonctionne comme cela mais je pense que mon exemple va te donner une bonne piste à suivre.

--
Logiciel iWeb, pour aider les professionnels du SEO/SMO : Impulse-web.com
Message modifié, 08 mars 2018 - 02:38
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 08 mars 2018 - 08:41
J'avais fait plusieurs réponses sur ce sujet, c'est bizarre pourquoi elles n'apparaissent plus ...?

numCmd est une chaîne= ""
numCmd = "20"

rr_get est une restRequête

rr_get..Méthode = httpGet
rr_get..URL = sUrl+numCmd
rr_get..Utilisateur = sKey
rr_get..MotDePasse = ""

rep est un restRéponse = RESTEnvoie(rr_get)

bRes est un booléen = XMLDocument("XmlPresta", rep.Contenu)

SI rep.CodeEtat = "200" ALORS
Info(rep.Contenu)
//nomDoc est une chaîne = XMLLit("XmlPresta","order/reference")
//nomDoc est une chaine = XMLLit("XmlPresta", "/order/reference", "test")
//nomDoc est une chaine = XMLLit("XmlPresta", "prestashop/order/reference", "test")
nomDoc est une chaîne = XMLLit("XmlPresta", "/prestashop/order/reference", "test")
Info(nomDoc)
SINON
Info("Code état : " + rep.CodeEtat + " = " + rep.DescriptionCodeEtat)
FIN


Je reçois la réponse de mon WebService dans mon rep.Contenu, je n'ai donc pas un document XML à proprement parlé ... Je suis obligé de passer par le référencement dans WD ?

Si oui je prend la réponse complète je la met dans un document Xml et je la référence comme tu me l'a indiqué ?
Mais je dois interroger plusieurs pages de mon WebService, il faut que je fasse cette manipulation pour toutes les pages ?
Membre enregistré
948 messages
Popularité : +30 (92 votes)
Posté le 08 mars 2018 - 09:06
Coucou,

Tu ne prefere pas un retour en JSON ?

http://example.prestashop.com/api/products?output_format=JSON


--
In üs we trust

Chocolat en Suisse - #Foetus
Kaeng Khiao Wan en Thailland - #ATR
Kopi luwak en Indonesie - #Abracadabra
Posté le 08 mars 2018 - 09:28
Juju a écrit :
J'avais fait plusieurs réponses sur ce sujet, c'est bizarre pourquoi elles n'apparaissent plus ...?

numCmd est une chaîne= ""
numCmd = "20"

rr_get est une restRequête

rr_get..Méthode = httpGet
rr_get..URL = sUrl+numCmd
rr_get..Utilisateur = sKey
rr_get..MotDePasse = ""

rep est un restRéponse = RESTEnvoie(rr_get)

bRes est un booléen = XMLDocument("XmlPresta", rep.Contenu)

SI rep.CodeEtat = "200" ALORS
Info(rep.Contenu)
//nomDoc est une chaîne = XMLLit("XmlPresta","order/reference")
//nomDoc est une chaine = XMLLit("XmlPresta", "/order/reference", "test")
//nomDoc est une chaine = XMLLit("XmlPresta", "prestashop/order/reference", "test")
nomDoc est une chaîne = XMLLit("XmlPresta", "/prestashop/order/reference", "test")
Info(nomDoc)
SINON
Info("Code état : " + rep.CodeEtat + " = " + rep.DescriptionCodeEtat)
FIN


Je reçois la réponse de mon WebService dans mon rep.Contenu, je n'ai donc pas un document XML à proprement parlé ... Je suis obligé de passer par le référencement dans WD ?

Si oui je prend la réponse complète je la met dans un document Xml et je la référence comme tu me l'a indiqué ?
Mais je dois interroger plusieurs pages de mon WebService, il faut que je fasse cette manipulation pour toutes les pages ?


Bonjour

XMLLit ne permet pas de lire les types CDATA tu va recevoir une chaine vide,

pour charger ton XML il faut faire comme suit et lire les infos comme Olivier le propose

DocRef_XML est un xmlDocument
DocRef_XML = XMLOuvre(rep..Contenu, depuisChaîne)
Info(DocRef_XML.order.id)



Bon dev

Marc Fastré
www.marc-fastre.be
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 09 mars 2018 - 08:49
Ok j'ai essayé mais sans succès :
DocRef_Xml est un xmlDocument
DocRef_Xml = XMLOuvre(rep..Contenu,depuisChaîne)
Info(DocRef_Xml.order.id.CDATA)


j'ai dans tous les cas une chaîne vide...
Est ce que je suis obligée de référencer le document XML au préalable ? Comme ce n'est pas un document mais une chaîne ?
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 09 mars 2018 - 08:50
Charly CANDO a écrit :
Coucou,

Tu ne prefere pas un retour en JSON ?

http://example.prestashop.com/api/products…


--
In üs we trust

Chocolat en Suisse - #Foetus
Kaeng Khiao Wan en Thailland - #ATR
Kopi luwak en Indonesie - #Abracadabra



Je ne connais pas le JSON, je peux demander au WebService de me faire un retour en JSON?
Membre enregistré
948 messages
Popularité : +30 (92 votes)
Posté le 09 mars 2018 - 10:38
Coucou,

Oui je crois que

?output_format=JSON


Fonctionne ^^

--
In üs we trust

Chocolat en Suisse - #Foetus
Kaeng Khiao Wan en Thailland - #ATR
Kopi luwak en Indonesie - #Abracadabra
Membre enregistré
87 messages
Popularité : +4 (4 votes)
Posté le 19 mars 2018 - 16:50
Désolée je viens juste d'essayer effectivement en écrivant exactement ça après l'URL j'obtiens bien du JSON, beaucoup plus lisible. Je vais utiliser cela merci.