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

WinDev Discussion :

Récupérer les coordonnées d'une ville à partir d'une API


Sujet :

WinDev

  1. #1
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut Récupérer les coordonnées d'une ville à partir d'une API
    Bonjour a tous
    je voudrais a partir du site https://overpass-turbo.eu/, utiliser une API pour récupérer les coordonnées (Latitude, Longitude) d'une ville
    Voici mon code que j'utilise pour lancer ma requete vers le site :
    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sNomDeLaVille est une chaîne = "Abidjan"  // Remplacez par le nom de la ville souhaitée
    sURL est une chaîne = "https://overpass-api.de/api/interpreter?data=[out:json];node['name'='" + sNomDeLaVille + "']['place'~'city|town'];out body;"
     
    sRéponse est une chaîne
    sRéponse = HTTPRequête(sURL)
     
     
    SI sRéponse = Vrai ALORS
    	sResulatat est une chaîne = HTTPDonneRésultat()
    	Info("Code HTML : " + sResulatat)
    SINON
    	Info("Code d'erreur: " + ErreurInfo())
    FIN

    voici ce qui s'affiche dans sResulatat :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    Code HTML : {
      "version": 0.6,
      "generator": "Overpass API 0.7.62.1 084b4234",
      "osm3s": {
        "timestamp_osm_base": "2024-08-21T15:42:16Z",
        "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
      },
      "elements": [
     
    {
      "type": "node",
      "id": 1046100133,
      "lat": 5.3203570,
      "lon": -4.0161070,
      "tags": {
        "capital": "4",
        "comment": "Please keep tagging in synch with the boundary relation 3377982 and the label node 2811123364",
        "ele": "18",
        "is_in:country": "Ivory Coast",
        "is_in:iso_3166_2": "CI-01",
        "loc_name": "Babi",
        "name": "Abidjan",
        "name:af": "Abidjan",
        "name:als": "Abidjan",
        "name:ar": "أبيدجان",
        "name:bat-smg": "Abidžans",
        "name:be": "Абіджан",
        "name:bg": "Абиджан",
        "name:bm": "Abijan",
        "name:bn": "আবিজান",
        "name:br": "Abidjan",
        "name:bru": "Abidjan",
        "name:bs": "Abidjan",
        "name:ca": "Abidjan",
        "name:cs": "Abidžan",
        "name:cy": "Abidjan",
        "name:da": "Abidjan",
        "name:de": "Abidjan",
        "name:el": "Αμπιτζάν",
        "name:en": "Abidjan",
        "name:eo": "Abiĝano",
        "name:es": "Abiyán",
        "name:et": "Abidjan",
        "name:eu": "Abidjan",
        "name:fa": "آبیجان",
        "name:fi": "Abidjan",
        "name:fr": "Abidjan",
        "name:gd": "Abidjan",
        "name:gl": "Abidjan",
        "name:gv": "Abidjan",
        "name:he": "אבידג'אן",
        "name:hi": "आबिजान",
        "name:hr": "Abidjan",
        "name:hu": "Abidjan",
        "name:id": "Abidjan",
        "name:io": "Abidjan",
        "name:is": "Abidjan",
        "name:it": "Abidjan",
        "name:ja": "アビジャン",
        "name:jv": "Abidjan",
        "name:kab": "Abidjan",
        "name:kn": "ಆಬಿಜಾನ್",
        "name:ko": "아비장",
        "name:la": "Abidjan",
        "name:lmo": "Abidjan",
        "name:ln": "Abidjan",
        "name:lt": "Abidžanas",
        "name:lv": "Abidžāna",
        "name:mg": "Abidjan",
        "name:mk": "Абиџан",
        "name:ml": "അബിജാൻ",
        "name:mr": "आबिजान",
        "name:ms": "Abidjan",
        "name:nan": "Abidjan",
        "name:nl": "Abidjan",
        "name:nn": "Abidjan",
        "name:no": "Abidjan",
        "name:nov": "Abidjan",
        "name:oc": "Abidjan",
        "name:pl": "Abidżan",
        "name:pms": "Abidjan",
        "name:pt": "Abidjã",
        "name:ro": "Abidjan",
        "name:roa-rup": "Abidjan",
        "name:ru": "Абиджан",
        "name:sc": "Abidjan",
        "name:sk": "Abidjan",
        "name:sl": "Abidžan",
        "name:sq": "Abidjan",
        "name:sr": "Абиџан",
        "name:sv": "Abidjan",
        "name:sw": "Abidjan",
        "name:th": "à¸*าบีจาน",
        "name:tk": "Abijan",
        "name:tr": "Abidjan",
        "name:uk": "Абіджан",
        "name:vi": "Abidjan",
        "name:vo": "Abidjan",
        "name:war": "Abidjan",
        "name:yo": "Abidjan",
        "name:zh": "阿比让/阿比讓",
        "name:zh-Hans": "阿比让",
        "name:zh-Hant": "阿比讓",
        "note": "Pour l’administration, Abidjan n’est pas une ville, mais un district (autonome), et il y a un « relation » pour ça. Mais comme les gens expectent trouver Abidjan comme ville, ici il y a en plus un « node » avec « place=city ».",
        "place": "city",
        "population": "7567409",
        "population:date": "2014",
        "source:name:br": "proper translation",
        "wikidata": "Q1515"
      }
    }
     
      ]
    }

    je veux juste recuperer : "lat": 5.3203570, "lon": -4.0161070, et "is_in:country": "Ivory Coast", "is_in:iso_3166_2": "CI-01",
    mais je ne sais pas comment procéder.
    Quelqu'un peut m'orienter ou m'aiguiller ?

    Merci a tous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Finalement je pense que les informations qui m' intéressement sont: "lat": 5.3203570, et "lon": -4.0161070
    Merci a tous

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 406
    Points : 683
    Points
    683
    Billets dans le blog
    1
    Par défaut
    C'est un simple json
    Regarde ce code qui peut t'aider
    https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windev/243300-afficher-contenu-json-donc-tout-type-structure-dans/read.awp

  4. #4
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Bonsoir @popoy
    je regarde ça et je te reviens.
    Merci pour ton lien.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Dans l'exemple je comprend pas bien le retour du JSON et récupérer et aussi comment je peux récupérer une valeur précise ? c'est du a la fatique . je cherche une autre approche.
    merci

  6. #6
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    bon finalement voila ce que j'ai trouvé qui marche :
    Code wlangage : 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
     
    MaReponseJSON est un JSON
    sURL est une chaîne = "https://overpass-api.de/api/interpreter?data=[out:json];node['name'='" + SAI_Ville + "']['place'~'city|town'];out body;"
    sRéponse est une chaîne
    sRéponse = HTTPRequête(sURL)
    SI sRéponse = Vrai ALORS
    	MaReponseJSON = HTTPDonneRésultat()
    SINON
    	Info("Code d'erreur: " + ErreurInfo())
    FIN
    // Charger le JSON dans une variable Variant
    vData is Variant = JSONVersVariant(MaReponseJSON)
     
    POUR TOUT vElement DE vData.elements
    	SI vElement.type = "node" ALORS
    		lat is real = vElement.lat
    		lon is real = vElement.lon
        	// Afficher ou utiliser les valeurs
    		Info("Latitude : " + lat + "Longitude : " + lon)
    	SINON
    		Info("Revoir l'Orthographe : " + SAI_Ville)
    	FIN
    FIN

    Merci a tous

  7. #7
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 389
    Points : 9 564
    Points
    9 564
    Par défaut
    Citation Envoyé par devalender Voir le message
    sRéponse est une chaîne
    sRéponse = HTTPRequête(sURL)
    SI sRéponse = Vrai ALORS[/CODE]
    Bonjour,

    Tu dois réussir à faire des superbes bugs si tu utilises n'importe quel type de variable...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #8
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Avant tout, revenons à une règle de base :
    Sauf cas particulier, un JSON n'est pas fait pour être traité directement.
    Au niveau du serveur, on ne s'amuse pas à traiter le résultat membre par membre.
    Donc la fonction JSONVersVariant ne doit être utilisée que lorsque la structure du résultat n'est pas fixe. Cette remarque est reprise dans la doc des exemples supplémentaires de JSONVersVariant.

    Il faut utiliser la désérialisation. C'est d'autant plus facile dans ton cas que la structure du résultat est simple, et que tu n'es pas obligé d'utiliser tous les membres du résultat (je pense notamment aux différents noms utilisés dans STTags voire à STTags elle même)

    Pour plus d'info, je te renvoie vers https://www.developpez.net/forums/bl...-resultat-api/

    RQ regarde aussi le type renvoyé, (ANSI/UNICODE)
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  9. #9
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Bonjour @Voroltinquo

    Merci pour toutes ses remarques, je vais lire le lien et apporter les modifications.
    En réalite je ne maitrise pas trop bien le traitement de JSON.
    je recherche aussi des tutos ou exemple simple pour m'en inspirer.
    Peut tu me guider dans mon cas précis ?

    Merci

  10. #10
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Un résultat JSON est très simple à analyser.
    -Une structure JSON est encadrée par {/}
    -Un membre est de la forme "NomMembre" : ValeurMembre
    -Les membres sont séparés par des virgules
    -Un membre peut être une structure cf "tag"
    -Un membre peut être un tableau cf elements
    -Les tableaux sont encadrés par [/]

    En convertissant "brutalement" les structures JSON du résultat on obtient :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Ctags est une Classe
    	capital est une chaîne
    	comment est une chaîne
    	ele est une chaîne
    	'is_in:country' est une chaîne
    	'is_in:iso_3166_2' est une chaîne
    	loc_name est une chaîne
    	'name:af' est une chaîne
    	'name:als' est une chaîne
    	'name:ar' est une chaîne
    	'name:bat-smg' est une chaîne
    	'name:be' est une chaîne
    	'name:bg' est une chaîne
    	'name:bm' est une chaîne
    	'name:bn' est une chaîne
    	'name:br' est une chaîne
    	'name:bru' est une chaîne
    	'name:bs' est une chaîne
    	'name:ca' est une chaîne
    	'name:cs' est une chaîne
    	'name:cy' est une chaîne
    	'name:da' est une chaîne
    	'name:de' est une chaîne
    	'name:el' est une chaîne
    	'name:en' est une chaîne
    	'name:eo' est une chaîne
    	'name:es' est une chaîne
    	'name:et' est une chaîne
    	'name:eu' est une chaîne
    	'name:fa' est une chaîne
    	'name:fi' est une chaîne
    	'name:fr' est une chaîne
    	'name:gd' est une chaîne
    	'name:gl' est une chaîne
    	'name:gv' est une chaîne
    	'name:he' est une chaîne
    	'name:hi' est une chaîne
    	'name:hr' est une chaîne
    	'name:hu' est une chaîne
    	'name:id' est une chaîne
    	'name:io' est une chaîne
    	'name:is' est une chaîne
    	'name:it' est une chaîne
    	'name:ja' est une chaîne
    	'name:jv' est une chaîne
    	'name:kab' est une chaîne
    	'name:kn' est une chaîne
    	'name:ko' est une chaîne
    	'name:la' est une chaîne
    	'name:lmo' est une chaîne
    	'name:ln' est une chaîne
    	'name:lt' est une chaîne
    	'name:lv' est une chaîne
    	'name:mg' est une chaîne
    	'name:mk' est une chaîne
    	'name:ml' est une chaîne
    	'name:mr' est une chaîne
    	'name:ms' est une chaîne
    	'name:nan' est une chaîne
    	'name:nl' est une chaîne
    	'name:nn' est une chaîne
    	'name:no' est une chaîne
    	'name:nov' est une chaîne
    	'name:oc' est une chaîne
    	'name:pl' est une chaîne
    	'name:pms' est une chaîne
    	'name:pt' est une chaîne
    	'name:ro' est une chaîne
    	'name:roa-rup' est une chaîne
    	'name:ru' est une chaîne
    	'name:sc' est une chaîne
    	'name:sk' est une chaîne
    	'name:sl' est une chaîne
    	'name:sq' est une chaîne
    	'name:sr' est une chaîne
    	'name:sv' est une chaîne
    	'name:sw' est une chaîne
    	'name:th' est une chaîne
    	'name:tk' est une chaîne
    	'name:tr' est une chaîne
    	'name:uk' est une chaîne
    	'name:vi' est une chaîne
    	'name:vo' est une chaîne
    	'name:war' est une chaîne
    	'name:yo' est une chaîne
    	'name:zh' est une chaîne
    	'name:zh-Hans' est une chaîne
    	'name:zh-Hant' est une chaîne
    	note est une chaîne
    	place est une chaîne
    	population est une chaîne
    	'population:date' est une chaîne
    	'source:name:br' est une chaîne
    	wikidata est une chaîne
    FIN
    On n'a pas besoin de tous les 'name:XXX", on peut donc faire le ménage :
    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
     
    Ctags est une Classe
    	capital est une chaîne
    	comment est une chaîne
    	ele est une chaîne
    	'is_in:country' est une chaîne
    	'is_in:iso_3166_2' est une chaîne
    	loc_name est une chaîne
    	'name:fr' est une chaîne
    	note est une chaîne
    	place est une chaîne
    	population est une chaîne
    	'population:date' est une chaîne
    	'source:name:br' est une chaîne
    	wikidata est une chaîne
    FIN
    Les autres classes sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Celements est une Classe
    	type est une chaîne
    	id est un numérique
    	lat est un numérique
    	lon est un numérique
    	tags est un Ctags
    FIN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CResult est une Classe
    	elements est un tableau de Celements
    FIN
    Le code devient :
    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
     
    bufRes est Buffer
    clResultat est CResult
     
     
    SI PAS EnModeTest() ALORS
    	bufRes=AppelAPI("Abidjan")
    SINON
    	//Simule l'appel à l'API
    	bufRes=fChargeBuffer("Contenu.JSON")
    FIN
     
    Désérialise(clResultat,bufRes,psdJSON)
     
    TraceConstruit("%1 a pour coordonnées : %2%3Lat :%4%2%3Lon :%5",clResultat:elements[1]:tags:'name:fr',CRLF,TAB,clResultat:elements[1]:lat,clResultat:elements[1]:lon)
    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
     
    ONCTION AppelAPI(saNomVille est chaîne) :Buffer
    oDemandeInfoVille est un restRequête
    oInfoVille est un restRéponse
    saURL est chaîne
     
    //Je te fais confiance quant-à la construction de l'URL
    saURL=[
    	https://overpass-api.de/api/interpreter?data=[out:json];node['name'='%1']['place'~'city|town'];out body;
    ]
     
    oDemandeInfoVille..URL=ChaîneConstruit(saURL,saNomVille)
     
    oInfoVille=RESTEnvoie(oDemandeInfoVille)
     
    RENVOYER oInfoVille..Contenu
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  11. #11
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Tu n'as donné qu'une partie de la réponse fournie par le serveur.
    Avant le membre element: il y a les membres suivants :
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
        "version": 0.6,
        "generator": "Overpass API 0.7.62.1 084b4234",
        "osm3s": {
            "timestamp_osm_base": "2024-08-24T14:19:45Z",
            "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
        },
    Je te laisse, à titre d'exercice, modifier le code en conséquence.
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  12. #12
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Bonjour @ Voroltinquo

    Merci beaucoup pour ses précieuses informations et aussi toutes mes excuses pour le retard de ma réponse. (en position sur le terrain).
    je vais revoir tout mon code.

    Merci encore une fois

  13. #13
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Tu n'as donné qu'une partie de la réponse fournie par le serveur.
    Avant le membre element: il y a les membres suivants :
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
        "version": 0.6,
        "generator": "Overpass API 0.7.62.1 084b4234",
        "osm3s": {
            "timestamp_osm_base": "2024-08-24T14:19:45Z",
            "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
        },
    Je te laisse, à titre d'exercice, modifier le code en conséquence.
    je suppose que la lettre C signifie classe

    j'aurai ici le membre "osm3s" qui est une structure sera une classe avec les membres "timestamp_osm_base" et "copyright"

    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Cosm3s est une Classe // est une structure
    	timestamp_osm_base est une chaine
    	copyright est une chaîne
    FIN

    Donc finalement la classe CResult devient :

    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CResult est une Classe
    	version est une chaine     // est un membre
    	generator est une chaîne // est un membre
    	osm3s est un Cosm3s     // est une structure
    	elements est un tableau de Celements  // est un tableau
    FIN

    c'est le premier changement que je vois au niveau du code. Maintenant j'ai deux questions :

    1- je ne vois pas bien l'incidence sur la suite du code étant entendu que je n'utilise pas les membres de Cosm3s
    2- pourquoi avoir faire le choix des classes et non des structures ?
    3- dans ce code :
    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SI PAS EnModeTest() ALORS
    	bufRes=AppelAPI("Abidjan")
    SINON
    	//Simule l'appel à l'API
    	bufRes=fChargeBuffer("Contenu.JSON")
    FIN

    a quoi correspond Contenu.JSON ?

    Merci

  14. #14
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par devalender Voir le message
    je suppose que la lettre C signifie classe
    C'est cela
    Citation Envoyé par devalender Voir le message
    1- je ne vois pas bien l'incidence sur la suite du code étant entendu que je n'utilise pas les membres de Cosm3s
    2- pourquoi avoir faire le choix des classes et non des structures ?
    3- a quoi correspond Contenu.JSON ?
    Merci
    1-Comme je l'écrivais, c'était à titre d'exercice. Par ailleurs, pour des raisons de propriété intellectuelle, même si dans ce cas, l'accès aux données est gratuit, il est nécessaire de rappeler d'où viennent ces données. Cela est précisé dans le contrat d'utilisation.
    2-dans un premier temps pour montrer que c'est possible, dans un deuxième temps, le choix entre l'une ou l'autre représentation est donné dans l'article que je citais dans mon post #8 : Exploiter le résultat d'une APIhttps://www.developpez.net/forums/bl...-resultat-api/
    3-Contenu.JSON est le fichiz*er texte contenant la réponse
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  15. #15
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    C'est cela

    1-Comme je l'écrivais, c'était à titre d'exercice. Par ailleurs, pour des raisons de propriété intellectuelle, même si dans ce cas, l'accès aux données est gratuit, il est nécessaire de rappeler d'où viennent ces données. Cela est précisé dans le contrat d'utilisation.
    Ok bien noté

    Citation Envoyé par Voroltinquo Voir le message
    2-dans un premier temps pour montrer que c'est possible, dans un deuxième temps, le choix entre l'une ou l'autre représentation est donné dans l'article que je citais dans mon post #8 : Exploiter le résultat d'une APIhttps://www.developpez.net/forums/bl...-resultat-api/
    En effet je vient de relire post.

    Citation Envoyé par Voroltinquo Voir le message
    3-Contenu.JSON est le fichiz*er texte contenant la réponse
    j'ai un soucis de compréhension ici :
    Voici la fonction en question :

    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    FONCTION AppelAPI(saNomVille est chaîne) :Buffer
    oDemandeInfoVille est un restRequête
    oInfoVille est un restRéponse
    saURL est chaîne
    saURL=[
    	<a href="https://overpass-api.de/api/interpreter?data=" target="_blank">https://overpass-api.de/api/interpreter?data=</a>[out:json];node['name'='%1']['place'~'city|town'];out body;
    ]
    oDemandeInfoVille..URL=ChaîneConstruit(saURL,saNomVille)
    oInfoVille=RESTEnvoie(oDemandeInfoVille)
    RENVOYER oInfoVille..Contenu

    et dans mon bouton j'ai mis le code suivant :

    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bufRes est Buffer
    clResultat est CResult
     
    SI PAS EnModeTest() ALORS
    	bufRes=AppelAPI("Abidjan")
    SINON
    	//Simule l'appel à l'API
    	bufRes=fChargeBuffer("Contenu.JSON")
    FIN
     
    Désérialise(clResultat,bufRes,psdJSON)
     
    TraceConstruit("%1 a pour coordonnées : %2%3Lat :%4%2%3Lon :%5",clResultat:elements[1]:tags:'name:fr',CRLF,TAB,clResultat:elements[1]:lat,clResultat:elements[1]:lon)

    A l’exécution j'ai le message d'erreur suivant :
    Erreur à la ligne 10 du traitement Clic de BTN_SansNom1.
    Vous avez appelé la fonction Désérialise.
    Format JSON invalide

    Je ne vois pas ou se trouve l'erreur ?

    Merci

  16. #16
    Expert confirmé
    Avatar de Voroltinquo
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2017
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Juin 2017
    Messages : 2 885
    Points : 5 458
    Points
    5 458
    Billets dans le blog
    1
    Par défaut
    Y a-t-il bien les {/} de fin et de début de structure ?
    Il y a peut-être plus simple, mais ça tourne.
    Quand tout a échoué utilisez l'option RTFM

  17. #17
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 999
    Points : 2 099
    Points
    2 099
    Par défaut
    Ton URL est fausse, elle devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://overpass-api.de/api/interpreter?data=[out:json];node['name'='[%saNomVille%]']['place'~'city|town'];out body;
    Pour récupérer tes infos tu peux faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monJson est JSON = AppelAPI("Abidjan")
     
    // On affiche coordonnées de toutes les résultats
    POUR TOUT unElement DE monJson.elements
    	Trace(`[%unElement.tags."name:fr"%] --> latitude : [%unElement.lat%] - longitude : [%unElement.lon%]`)
    FIN
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  18. #18
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    Citation Envoyé par Voroltinquo Voir le message
    Y a-t-il bien les {/} de fin et de début de structure ?
    Oui effectivement.

    j'ai tenté de un trace de l'url j'ai eu la réponse suivante :
    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Trace("",oDemandeInfoVille..URL)

    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    https://overpass-api.de/api/interpreter?data=[out:json];node['name'='Abidjan']['place'~'city|town'];out body;
    j'ai exécuter l'URL directement dans mon navigateur
    et voici la réponse :
    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
     
    {
      "version": 0.6,
      "generator": "Overpass API 0.7.62.1 084b4234",
      "osm3s": {
        "timestamp_osm_base": "2024-08-29T13:56:15Z",
        "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
      },
      "elements": [
     
    {
      "type": "node",
      "id": 1046100133,
      "lat": 5.3203570,
      "lon": -4.0161070,
      "tags": {
        "capital": "4",
        "comment": "Please keep tagging in synch with the boundary relation 3377982 and the label node 2811123364",
        "ele": "18",
        "is_in:country": "Ivory Coast",
        "is_in:iso_3166_2": "CI-01",
        "loc_name": "Babi",
        "name": "Abidjan",
        "name:af": "Abidjan",
      .........
        "name:zh": "阿比让/阿比讓",
        "name:zh-Hans": "阿比让",
        "name:zh-Hant": "阿比讓",
        "note": "Pour l’administration, Abidjan n’est pas une ville, mais un district (autonome), et il y a un « relation » pour ça. Mais comme les gens expectent trouver Abidjan comme ville, ici il y a en plus un « node » avec « place=city ».",
        "place": "city",
        "population": "7567409",
        "population:date": "2014",
        "source:name:br": "proper translation",
        "wikidata": "Q1515"
      }
    }
     
      ]
    }
    je me dit que l'erreur démarre a cette ligne ?
    Code wlangage : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    oInfoVille=RESTEnvoie(oDemandeInfoVille)

  19. #19
    Membre éprouvé
    Homme Profil pro
    Benevole
    Inscrit en
    Mai 2004
    Messages
    1 708
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Benevole
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 708
    Points : 956
    Points
    956
    Par défaut
    [QUOTE=philouZ;12041382]Ton URL est fausse, elle devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://overpass-api.de/api/interpreter?data=[out:json];node['name'='[%saNomVille%]']['place'~'city|town'];out body;
    L'url exécuter dans la barre d'adresse me donne un résultat ! donne elle n'est pas fausse.

    Citation Envoyé par philouZ Voir le message
    Pour récupérer tes infos tu peux faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    monJson est JSON = AppelAPI("Abidjan")
     
    // On affiche coordonnées de toutes les résultats
    POUR TOUT unElement DE monJson.elements
    	Trace(`[%unElement.tags."name:fr"%] --> latitude : [%unElement.lat%] - longitude : [%unElement.lon%]`)
    FIN
    Je vais tester ce code pour vérifier

    merci

  20. #20
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 999
    Points : 2 099
    Points
    2 099
    Par défaut
    [QUOTE=devalender;12041411]
    Citation Envoyé par philouZ Voir le message
    L'url exécuter dans la barre d'adresse me donne un résultat ! donne elle n'est pas fausse.
    Si elle est fausse car tu as mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="https://overpass-api.de/api/interpreter?data=" target="_blank">https://overpass-api.de/api/interpreter?data=</a>[out:json];node['name'='%1']['place'~'city|town'];out body;
    <a href=" ne doit pas faire partie de l'url.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

Discussions similaires

  1. Récupérer les données d'une API météo
    Par nass985 dans le forum Langage
    Réponses: 0
    Dernier message: 30/04/2020, 17h01
  2. [Python 3.X] Python et API (json) : Organiser et exploiter les données d'une API
    Par SulFat dans le forum Général Python
    Réponses: 1
    Dernier message: 23/08/2019, 18h39
  3. Quel language pour récupérer de manière continue les données d'une api
    Par Scottbass dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 11/03/2019, 10h10
  4. exploiter les données d'une api
    Par albator59 dans le forum Langage
    Réponses: 13
    Dernier message: 05/11/2013, 10h43
  5. Réponses: 20
    Dernier message: 18/10/2006, 17h09

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