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

IGN API Géoportail Discussion :

Utilisation du service de geocodage ?


Sujet :

IGN API Géoportail

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Utilisation du service de geocodage ?
    [Edit : je viens de trouver le lien http://api.ign.fr/geoportail/api/doc...ur/geodrm.html et je vais donc regarder si je peux débugger ça un peu plus : note aux concepteurs du site : l'apparence des liens est TRES discrète ...]

    Bonjour,

    J'utilise l'API geoportal (v1.1) avec un contrat gratuit et j'essaie d'utiliser le serveur OLS via Geoportal.Layer.OpenLS.Core.LocationUtilityService.

    En gros, la partie de code pour la localisation :

    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
    var geocoder = new Geoportal.Layer.OpenLS.Core.LocationUtilityService(
                 "ADDRESSES.CROSSINGS:OPENLS", { formatOptions:{ version: '1.1' } });
    
    var a = new Geoportal.OLS.Address('FR');
    var s = new Geoportal.OLS.Street({'name' : 'une adresse' });
    var sa = new Geoportal.OLS.StreetAddress();
    sa.addStreet(s);
    a.streetAddress = sa;
    
    var p = new Geoportal.OLS.Place({'classification':'Municipality', 'name': 'une ville' });
    a.addPlace(p);
    a.postalCode = new Geoportal.OLS.PostalCode({'name': 'un code postal'})
    
    geocoder.GEOCODE([a], {onSuccess: onLocateSuccess, onFailure : onLocateFailure, scopeOn : window});
    J'obtiens bien une requête du type "jeton-api.ign.fr/getToken?key=...&output=json&callback=Geoportal.GeoRMHandler....callback&gppkey=...&", qui me renvoie un json contenant la clef (de ce que j'ai compris).

    Par contre, la requête "wxs.ign.fr/geoportail/ols/OpenLSPOST?gppkey=..." a pour statut 403 Forbidden...

    J'ai vérifié le body, il est a priori correct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xls:XLS xmlns:xls="http://www.opengis.net/xls" version="1.1"><xls:RequestHeader sessionID=""/><xls:Request methodName="GeocodeRequest" version="1.1" requestID="" maximumResponses="50"><xls:GeocodeRequest><xls:Address countryCode="FR"><xls:StreetAddress><xls:Street>une adresse</xls:Street></xls:StreetAddress><xls:Place type="Municipality">une ville</xls:Place><xls:PostalCode>un code postal</xls:PostalCode></xls:Address></xls:GeocodeRequest></xls:Request></xls:XLS>
    Je ne comprends pas ... tout simple indiquer que ces serveurs sont "ouverts" (Cf. http://api.ign.fr/geoportail/api/doc...ur/search.html), ou du moins, je n'ai rien trouvé mentionnant les conditions d'accès à ces serveurs : l'accès à ce service est-il temporairement fermé, ou accessible qu'aux contrats commerciaux ?

    Ou est-ce plutôt une erreur de ma part ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Proxy?
    Le service marche toujours pareil (cf les nombreux fils).
    Une demande avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      POST='<xls:XLS xmlns:xls="http://www.opengis.net/xls" version="1.1"><xls:RequestHeader sessionID=""/><xls:Request methodName="GeocodeRequest" version="1.1" requestID="" maximumResponses="50"><xls:GeocodeRequest><xls:Address countryCode="FR"><xls:StreetAddress><xls:Street>Verger</xls:Street></xls:StreetAddress><xls:Place type="Municipality">Rennes</xls:Place><xls:PostalCode>35000</xls:PostalCode></xls:Address></xls:GeocodeRequest></xls:Request></xls:XLS>'
    fournit 3 réponses:
    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
    <xls:XLS xmlns:xls="http://www.opengis.net/xls" version="1.000000" xmlns:gml="http://www.opengis.net/gml"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/xls /WEBS/ign/interop-gazetteer.ign.fr/docs/lbs_p/gen/data/openls/LocationUtilityService.xsd">
    
      <ResponseHeader xmlns="http://www.opengis.net/xls"/>
    
      <Response xmlns="http://www.opengis.net/xls" requestID="" version="1.0">
        <GeocodeResponse>
          <GeocodeResponseList numberOfGeocodedAddresses="3">
            <GeocodedAddress>
              <Point xmlns="http://www.opengis.net/gml">
                <pos dimension="2">48.113497 -1.675699</pos>
              </Point>
              <Address countryCode="FR">
                <StreetAddress>
                  <Street></Street>
                </StreetAddress>
                <Place type="Municipality">rennes</Place>
                <PostalCode>Préfecture de région</PostalCode>
              </Address>
              <GeocodeMatchCode accuracy="1" matchType="City"/>
            </GeocodedAddress>
            <GeocodedAddress>
              <Point xmlns="http://www.opengis.net/gml">
                <pos dimension="2">47.767376 0.543562</pos>
              </Point>
              <Address countryCode="FR">
                <StreetAddress>
                  <Street></Street>
                </StreetAddress>
                <Place type="Municipality">rennes</Place>
                <PostalCode>Lieu-dit habité</PostalCode>
              </Address>
              <GeocodeMatchCode accuracy="1" matchType="City"/>
            </GeocodedAddress>
            <GeocodedAddress>
              <Point xmlns="http://www.opengis.net/gml">
                <pos dimension="2">44.194058 0.886431</pos>
              </Point>
              <Address countryCode="FR">
                <StreetAddress>
                  <Street></Street>
                </StreetAddress>
                <Place type="Municipality">rennes</Place>
                <PostalCode>Lieu-dit habité</PostalCode>
              </Address>
              <GeocodeMatchCode accuracy="1" matchType="City"/>
            </GeocodedAddress>
          </GeocodeResponseList>
        </GeocodeResponse>
      </Response>
    
    </xls:XLS>
    La bataille est probablement au niveau du proxy et des referrer

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut ok..
    Merci pour la réponse, je sais désormais que ça doit marcher.

    Au niveau referer, je pense être correct ; au début j'étais sur un serveur privé (non visibile depuis l'extérieur) , j'ai vérifié avec un serveur public et même histoire. Le truc c'est que le reste de l'API (affichage de la carte, ... etc.) fonctionne. Si ma clef/referer n'était pas reconnue, j'imagine que ça bloquerait avant...

    Je vais essayer de mettre en place un proxy mais je ne comprends pas trop l'utilité de ce paramétrage, en effet, le navigateur effectue bien la requête mais c'est le serveur distant qui renvoie un 403 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <html><head><title>Apache Tomcat/5.5 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource () has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5</h3></body></html>

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut Méthode de vérification
    Pour tester le fonctionnement j'utilise un petit script bash (sous Windows/MinGW):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      CLEF=6767854512754535096;	REFERER=atlasnw.free.fr
      printf 'gppkey=' > gppkey.txt
      curl -e ${REFERER} http://jeton-api.ign.fr/getToken?key=${CLEF}\&output=raw>>gppkey.txt
      . gppkey.txt
      POST='<xls:XLS xmlns:xls="http://www.opengis.net/xls" version="1.0"><xls:RequestHeader sessionID=""/><xls:Request methodName="GeocodeRequest" version="1.0" requestID="" maximumResponses="50"><xls:GeocodeRequest><xls:Address countryCode="FR"><xls:freeFormAddress>Tatoux</xls:freeFormAddress></xls:Address></xls:GeocodeRequest></xls:Request></xls:XLS>'
      curl --dump-header h1.txt --trace trace1.txt -d "$POST" -H "Content-Type: text/xml" -e ${REFERER} http://wxs.ign.fr/geoportail/gazetteer/OpenLSPOST?gppkey=$gppkey

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut En tête referer inexistant
    Bon, après examen plus approfondi de la requête OPENLSPOST, il s'avère que l'entête referer n'est pas renseigné, d'où l'erreur : en forgeant la requête et en forçant le referer, j'arrive effectivement à interroger le serveur et obtenir une réponse.

    Je dois probablement mal utiliser l'API pour arriver dans ce cas. Voici les entêtes générées ; pas encore regardé pourquoi/comment ça ne le fait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Host=wxs.ign.fr
    User-Agent=Mozilla/5.0 (Windows; U; Windows NT 6.1; fr; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
    Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language=fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding=gzip,deflate
    Accept-Charset=ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive=115
    Connection=keep-alive
    Origin=http://...
    Access-Control-Request-Method=POST
    En attendant de voir ça plus en profondeur et bien que, de ma compréhension, je n'aurais pas besoin de proxy, je vais effectivement en mettre un en place pour forcer le referer ...

    Merci.

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par lexsimonrbs Voir le message
    ..., le navigateur effectue bien la requête mais c'est le serveur distant qui renvoie un 403 ...
    Quels sont les en-têtes de la réponse (il doit y avoir un en-tête geodrm suivi d'un numéro d'erreur) ?

    Le contrat utilisé comprends bien les adresses ?

    Le proxy est obligatoire, c'est un appel à un service retournant du XML, service qui ne se trouve pas dans le même domaine que le script javascript l'appelant. Le proxy DOIT passer le REFERRER au service ...

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Same Origin Policy
    @dgrichard : OK, je me suis renseigné un peu sur la Same Origin Policy et son impact sur l'objet XMLHttpRequest . En fait, même si open "devrait" directement lever une exception, depuis Firefox 3.5+, le navigateur fait la requête et en fonction des entêtes de réponse du serveur, on peut ou non faire quelque chose avec le résultat.

    Au final donc, pour les navigateurs modernes, le service d'IGN pourrait faire ce qu'il faut pour une exploitation sans proxy en validant au préalable que Origin correspond à l'URL du contrat.

    D'ailleurs, sur le proxy, il faut faire attention à ne pas permettre n'importe quoi : si on utilise les exemples donnés tels quels (au moins JSP et PHP, les autres je n'ai pas regardé), n'importe qui peut faire une requête HTTP vers n'importe quel serveur en se servant de la passerelle en question. A minima, pour mon cas (PHP), je vais modifier le script pour :
    • N'accepter que les Referer choisis,
    • Ne relayer que les requêtes vers les adresses des services que je sais que la/les pages utilisent


    Merci à tous pour vous réponses.

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par lexsimonrbs Voir le message
    @dgrichard : OK, je me suis renseigné un peu sur la Same Origin Policy et son impact sur l'objet XMLHttpRequest . En fait, même si open "devrait" directement lever une exception, depuis Firefox 3.5+, le navigateur fait la requête et en fonction des entêtes de réponse du serveur, on peut ou non faire quelque chose avec le résultat.
    IE=+95% des utilisateurs, pas sûr qu'IE respecte cela ...


    Citation Envoyé par lexsimonrbs Voir le message
    Au final donc, pour les navigateurs modernes, le service d'IGN pourrait faire ce qu'il faut pour une exploitation sans proxy en validant au préalable que Origin correspond à l'URL du contrat.
    C'est fait depuis longtemps, un crossdomain.xml autorise les accès de n'importe où ... pour les applications qui comprennent !
    les URLs touchées sont : wxs.ign.fr et jeton-api.ign.fr

    Citation Envoyé par lexsimonrbs Voir le message
    D'ailleurs, sur le proxy, il faut faire attention à ne pas permettre n'importe quoi : si on utilise les exemples donnés tels quels (au moins JSP et PHP, les autres je n'ai pas regardé), n'importe qui peut faire une requête HTTP vers n'importe quel serveur en se servant de la passerelle en question. A minima, pour mon cas (PHP), je vais modifier le script pour :
    • N'accepter que les Referer choisis,
    • Ne relayer que les requêtes vers les adresses des services que je sais que la/les pages utilisent


    Merci à tous pour vous réponses.
    Tout à fait, les proxys en question sont là en guise d'exemples (comme la plupart des codes que l'on trouve sur internet), à chacun de les sécuriser

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    IE=+95% des utilisateurs, pas sûr qu'IE respecte cela ...
    D'après l'article donné : Internet Explorer 8+, Firefox 3.5+, Safari 4+, et Chrome supportent la chose.

    Citation Envoyé par dgrichard Voir le message
    C'est fait depuis longtemps, un crossdomain.xml autorise les accès de n'importe où ... pour les applications qui comprennent !
    les URLs touchées sont : wxs.ign.fr et jeton-api.ign.fr
    C'est bon à savoir, connaissais pas. A priori ça concerne Flash et Silverlight. Mais pour les navigateurs et XMLHttpRequest ce serait plus http://www.w3.org/TR/access-control/, basé sur les entêtes de requête d'une part (Origin) et de réponse (Access-Control-Allow-Origin) d'autre part.

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par lexsimonrbs Voir le message
    D'après l'article donné : Internet Explorer 8+, Firefox 3.5+, Safari 4+, et Chrome supportent la chose.
    Soit 35% de nos utilisateurs ...

    Citation Envoyé par lexsimonrbs Voir le message
    C'est bon à savoir, connaissais pas. A priori ça concerne Flash et Silverlight. Mais pour les navigateurs et XMLHttpRequest ce serait plus http://www.w3.org/TR/access-control/, basé sur les entêtes de requête d'une part (Origin) et de réponse (Access-Control-Allow-Origin) d'autre part.
    Effectivement, mon clavier est allé plus lentement que mon cerveau, pour la partie purement API, l'opération http://jeton-api.ign.fr/getToken retourne un en-tête HTTP "Access-Control-Allow-Origin" à "*".
    La récupération de l'API Javascript via http://api.ign.fr/geoportail/api en fait autant.

Discussions similaires

  1. Utiliser le service d'indexation windows
    Par GeYinho dans le forum ASP.NET
    Réponses: 6
    Dernier message: 21/06/2007, 16h39
  2. Utilisation de services C++ importés
    Par Cheb09 dans le forum Delphi
    Réponses: 8
    Dernier message: 18/06/2007, 21h59
  3. utiliser un service de windows
    Par anisj1m dans le forum Windows
    Réponses: 3
    Dernier message: 21/02/2007, 15h22
  4. Utiliser un service web dans une page ASP
    Par REMACC1 dans le forum ASP
    Réponses: 2
    Dernier message: 30/08/2006, 10h17
  5. utilisation integration services MSSS05
    Par Cape31 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/05/2006, 17h37

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