Utiliser l'API Géo avec 4D

Quelqu’un utilise t’il déjà cette https://api.gouv.fr/api/api-geo.htmlAPI> (api.gou.fr) avec 4D ? Si oui, un code d’exemple :?: avant de réinventer la roue :pray:

J’aimerais un code simple pour retrouver la region en fonction du code postal. (Pour remplacer ma vielle méthode locale :-))

cool

C’est bon, tu me ponds ça pour lundi merci :mrgreen:

: Manuel PIQUET

C’est bon, tu me ponds ça pour lundi merci :mrgreen:
la prochaine je ne dit plus cool mais poule ?

Non, sans rigoler, ça ferait une très bonne NT il me semble… dit le mec qui cherche à ce qu’on fasse le travail pour lui :lol:

Je viens d’écrire ma première requête, fastoche avec la doc qui est très bien faite. Si tu sais copier coller tu sais coder :mrgreen:

Me relance pas avec le http://forums.4d.com/Post/FR/27654409/4/27683050#27683050copier-coller> (http://forums.4d.com/Post/FR/27579137/0/0/et là>), actuellement c’est vraiment pas le moment… :twisted:

La demande de Manuel, c’est un exemple de code ; si c’est si facile, aides-nous stp !

: Bernard ESCAICH

La demande de Manuel, c’est un exemple de code ; si c’est si facile,
aides-nous stp !
??

Sur le site de l’API j’ai fait ce copier:

<code 4D>
$T_URL:=“https://geo.api.gouv.fr/communes?codePostal=59200&fields=nom,code,codesPostaux,codeDepartement,codeRegion,population&format=json&geometry=centre

$T_Content:=""
$T_Response:=""

$Code:=HTTP Get($T_URL;$T_Response)
$O:=JSON Parse($T_Response)
</code 4D>

Merci Bertrand, c’est en effet particulièrement simple !

Pour la simplicité, merci surtout à 4D et au gouv pour le format json de l’API… :wink:

J’ajoute que c’est utile d’avoir un exemple simple et qui fonctionne.

Ce n’est pas le cas du premier exemple de la doc de http://doc.4d.com/4Dv17R2/4D/17-R2.1720/HTTP-Get.301-3856767.fe.htmlHTTP Get >qui retourne une erreur de type.
C’est probablement dû à la disparition de l’image mais c’est gênant quand on débute…

Merci à tous pour vos contributions utiles et intéressantes.

Cela étant, je souhaiterais être rassuré, pour :

  • connaître le code postal d’une ville, ou l’inverse
  • trouver la région d’une ville
    vous n’utilisez tout de même pas cette API ?

Pour connaître le cours d’une devise, là oui.
Et encore, avec une fréquence de rafraichissement à convenir !

Pour les codes postaux, les communes, les régions… je vais descendre les informations nécessaires dans des tables 4D. Les modifications seront très occasionnelles.

Bref, dans tous ces cas, je lirai les informations à partir de tables 4D.
Pour les initialiser, ou pour les maintenir, j’utiliserai volontiers ce type d’API…

: Jean-Jacques BLEU

Cela étant, je souhaiterais être rassuré, pour :

Idéalement on fait la requête et on stocke le résultat. Ce qui n’est jamais demandé n’alourdit pas le data

: Bertrand SOUBEYRAND

Idéalement on fait la requête et on stocke le résultat. Ce qui n’est
jamais demandé n’alourdit pas le data
Ah bah, non alors, ça ne sera pas mon idéal !

Même si j’entends ton point de vue, je préfère rapatrier (périodiquement, ou à la demande) tous les codes postaux, les avoir sous la main (dans le data) puis dans le format qui me convient (requête unitaire, tableaux, ou autres maintenant)

Une requête ne répond pas sur tel code postal, telle commune ou pas la bonne région, cela ne me gêne pas, pas du tout, pas plus que le poids des ces données dans le data ou les sauvegardes.
Il faudra juste trouver le bon réglage pour la période de rafraichissement.

L’indépendance par rapport au service de l’API (ou non service à n’importe quel niveau) est totale.
En réalité, la principale raison de mon choix est bien de ne pas dépendre de nombre de technologies pour disposer de ce genre d’informations.
4D est ma BDD préférée, pourquoi l’utiliser avec parcimonie ? Pourquoi aller chercher la région ou le code postal d’une commune en passant le plus souvent par internet et un service, etc ?
Aussi fiables soient toutes les couches à traverser pour atteindre cette information banale, qui ne varie que rarement, je préfère les obtenir avec un trivial CHERCHER.
Après le re-découpage des régions, ok, il est question du rattachement de la Loire-Atlantique à la Bretagne (cf supra : à la demande)
Enfin, le code à gérer devrait être bien plus court, plus simple et plus fiable aussi.

Question: Bertrand t’as testé ta solution ?

avec ton URL j’obtiens une erreur sur le JSON Parse ? les arguments sont incompatibles :-?

Le problème semble que la réponse soit une collection ou un tableau d’objet JSON…

Ok, c’est bon, c’est le nom choisi pour ta variable ($O) qui m’a induit en erreur le résultat de ton JSON PARSE est une collection et non pas un objet… :wink:

Fait le test avec le code postal 57660 => 18 communes !!! :roll: qui dit mieux

Salut Manuel,

tu peux même exploser le retour de toutes ces communes :wink:

Le Code Postal est contenu dans ‘Form.CP’

<code 4D>
$T_URL:=“https://geo.api.gouv.fr/communes?codePostal="+Form.CP+"&fields=nom,code,codesPostaux,codeDepartement,codeRegion,population&format=json&geometry=centre
// $T_URL:=“https://geo.api.gouv.fr/communes?nom=paris&fields=nom,code,codesPostaux,codeDepartement,codeRegion,population&format=json&geometry=centre

$T_Content:=""
$T_Response:=""

$Code:=HTTP Get($T_URL;$T_Response)
$O:=JSON Parse($T_Response)
ARRAY TEXT(TbVille;0x0000)
ARRAY TEXT($TbCodeDep;0x0000)
ARRAY TEXT($tbCP;0x0000)
COLLECTION TO ARRAY($O;TbVille;"nom";$TbCodeDep;"codeDepartement";$tbCP;"codesPostaux")

If (Size of array(TbVille)=1)
	Form.Ville:=Uppercase(TbVille{1})
	
Else 
	OBJECT SET VISIBLE(*;"lb_suggest";True) // Listbox qui permet de choisir la ville
	
End if 

</code 4D>

Ma demande initiale était uniquement sur la région, puis maintenant cela dérive grave… :lol:
C’était justement ce que je m’apprêtais à faire vu la simplicité de mise en œuvre.
Néanmoins, je souhaite laisser le choix à l’utilisateur final de l’orthographe et de l’apparence du résultat qu’il souhaite au final (je ne veux pas imposer un format qui ne lui convienne pas).
Je vais donc lui proposer le choix (s’il y en a un) mais en lui laissant le dernier mot.

Ben vu les infos que tu peux récupérer, à toi de voir ce que tu mets dans la listbox :wink: