Aller au contenu

Aide récupération distance json


Sebbrunie1

Recommended Posts

Bonjour,

 

autant l'annoncer tout de suite "je suis nul", à quoi sert de le cacher, ca va se voir !!!

 

j'essayer à partir de mapquest récuperer la distance d'un parcourt défini:

 

l'adresse de l'api est: https://www.mapquestapi.com/directions/v2/route?key=pEKtQ21opd7YxXXXXXXXXX&from=48.8469154,2.4396014&to=48.84,2.4430214&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false

 

j'ai mis dans mon VD:

HC2 = Net.FHttp("www.mapquestapi.com",80);
 
local response, status, errorCode = HC2:GET("/directions/v2/route?key=pEKtQ21opd7YxBQW&from=48.84691,2.439&to=48.8,2.443021499&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")
 
jsonTable = json.decode(response);
fibaro:debug("distance : " .. jsonTable.distance .. " m - ");
fibaro:debug(jsonTable.time .. " : min : " .. jsonTable.time);
 
Distance = fibaro:getGlobalValue("jsonTable.distance").. " m"
local Distance = (" distance : " ..jsonTable.distance .."m" ..jsonTable.distance);
 
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", Distance);
fibaro:log(Distance)

ca me remonte rien même j'ai comme message d'erreur: 

 

[ERROR] 10:42:58: line 7: attempt to concatenate field 'distance' (a nil value)

Merci de votre aide

 

Sébastien

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Essaie juste cela :

 

HC2 = Net.FHttp("www.mapquestapi.com",80);
 
local response, status, errorCode = HC2:GET("/directions/v2/route?key=pEKtQ21opd7YxBQW&from=48.84691,2.439&to=48.8,2.443021499&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")
if tonumber(status) == 200 then
    local jsonTable = json.decode(response)
    fibaro:debug("distance : " .. jsonTable.distance .. " m - ")
    fibaro:debug(jsonTable.time .. " : min : " .. jsonTable.time)
else
    fibaro:debug("Status:" .. status .. " err: " .. errorCode )
end

 

Quelle est ta ligne 7 ?

A mon avis tu confonds avec tes getGlobalValue et setglobal et tes declarations de variable

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

merci. J'ai le même message d'erreur.

 

Par contre quand je mets l'url sur internet j'ai come retour: et comme j'ai "distance" je pensais que c'était ca que je devait mettre pour récupérer cette variable

 

{"route":{"hasTollRoad":false,"hasBridge":false,"computedWaypoints":[],"fuelUsed":0.01,"hasTunnel":false,"hasUnpaved":false,"hasHighway":false,"realTime":-1,"boundingBox":{"ul":{"lng":2.43998,"lat":48.847942},"lr":{"lng":2.444597,"lat":48.846908}},"distance":0.275,"time":46............

 

Ma ligne 7 est

 

fibaro:debug("distance : " .. jsonTable.distance .. " m - ");

 

Lien vers le commentaire
Partager sur d’autres sites

C'est ce que j'ai fait....

 

et j'ai 

 

[ERROR] 10:42:58: line 6: attempt to concatenate field 'distance' (a nil value)

avec le code:

 

HC2 = Net.FHttp("www.mapquestapi.com",80);
 
local response, status, errorCode = HC2:GET("/directions/v2/route?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&from=48.846915499999994,2.4396014999999998&to=48.847921,2.4430214999999995&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")
if tonumber(status) == 200 then
    local jsonTable = json.decode(response)
    fibaro:debug("distance : " .. jsonTable.distance .. " m - ")
    fibaro:debug(jsonTable.time .. " : min : " .. jsonTable.time)
else
    fibaro:debug("Status:" .. status .. " err: " .. errorCode )
end

 

Lien vers le commentaire
Partager sur d’autres sites

ah ok, pardon.

Mets en forme ton json pour etre sur en ajoutant dans ton navigateur un module type json viewer, ca rend "plus" lisible le json en le formatant.

 

Donc tu te connectes bien à l'API, pas de souci de ce côté là.

C'est peut-etre  : jsonTable.route.distance

Lien vers le commentaire
Partager sur d’autres sites

Voila la mise en forme. Je n'ai pas tout mis.....

 

{
route: 
{
hasTollRoad: false,
hasBridge: false,
computedWaypoints: [ ],
fuelUsed: 0,
hasTunnel: false,
hasUnpaved: false,
hasHighway: false,
realTime: -1,
boundingBox: 
{
ul: 
{
lng: 2.4396,
lat: 48.847942
},
lr: 
{
lng: 2.44302,
lat: 48.846908
}
},
distance: 0.221,
    • LE "jsonTable.route.distance je le met ou sur mon url?
    Merci encore
Lien vers le commentaire
Partager sur d’autres sites

T'as une distance de 0,2 m ?
,-)

 

Essaie comme ceci, sans certitude ;-)


 

HC2 = Net.FHttp("www.mapquestapi.com",80);
 
local response, status, errorCode = HC2:GET("/directions/v2/route?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&from=48.846915499999994,2.4396014999999998&to=48.847921,2.4430214999999995&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")
if tonumber(status) == 200 then
    local jsonTable = json.decode(response)
    fibaro:debug("Connexion OK")
    fibaro:debug("Distance : " .. jsonTable.route.distance)
else
    fibaro:debug("Status:" .. status .. " err: " .. errorCode )

end

 

Lien vers le commentaire
Partager sur d’autres sites

super, c'est ca..... j'ai un retour...

 

Qu'as tu fait......?

 

Il me reste plus qu'a avoir ma current location (sans passé par HC2 pour avoir un plan B.....) :)

 

Merci beaucoup

Lien vers le commentaire
Partager sur d’autres sites

Moi rien, c'est toi en mettant en forme le json ;-)

tu peux voir :

{ -- debut du json

route : -- 1ere entree du json (cest peut-etre pas le bon terme technique..)

{ -- debut des sous-entrees derriere "route"

....

...

distance :

time...

 

Donc pour recuperer la valeur de distance :

tu as ecris :

local  jsonTable = json.decode(response)

pour descendre dans "l'arborescence" du json :

jsonTable.route.distance

jsonTable.route.time...

 

Essaie cela alors

 

HC2 = Net.FHttp("www.mapquestapi.com",80);
 
local response, status, errorCode = HC2:GET("/directions/v2/route?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&from=48.846915499999994,2.4396014999999998&to=48.847921,2.4430214999999995&outFormat=json&ambiguities=ignore&routeType=fastest&doReverseGeocode=false&enhancedNarrative=false&avoidTimedConditions=false")

if tonumber(status) == 200 then
    local jsonTable = json.decode(response)
    fibaro:debug("Connexion OK")
    fibaro:debug("Distance : " .. jsonTable.route.distance.. " m")
    fibaro:debug("Temps : " .. jsonTable.route.time.. " mins ")
else
    fibaro:debug("Status:" .. status .. " err: " .. errorCode )
end

 

Modifié par pepite
Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Re bonjour,

 

grrr je tombe sur un noeud.... je n'arrive pas à retrouver la street en json decode

 

le json:

 

{

  • "info": { },
  • "options": {
    • "maxResults": 1,
    • "thumbMaps": true,
    • "ignoreLatLngInput": false
    },
  • "results": [
    • {
      • "providedLocation": {
        • "latLng": {
          • "lat": 48.847633,
          • "lng": 2.452675
          }
        },
      • "locations": [
        • {
          • "street": "Rue de l'Industrie",
          • "adminArea6": "",
          • "adminArea6Type": "Neighborhood",
          • "adminArea5": "Vincennes",
          • "adminArea5Type": "City",
          • "adminArea4": "",

et je mets 

fibaro:debug(jsonTable3.results.locations.street)

et ca ne marche pas (message d'erreur

[ERROR] 15:25:37: line 11: attempt to index field 'locations' (a nil value)

Merci

 

Sébastien

Lien vers le commentaire
Partager sur d’autres sites

Non je n'ai rien avec la ligne que tu me donne.

 

Voici le code:

HC2 = Net.FHttp("www.mapquestapi.com",80);
local EmplacementDEPART = "48.847633,2.452675"
local EmplacementARRIVEE = "48.8103843,2.343642100000011"
local URL3 = "/geocoding/v1/reverse?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&location=" ..EmplacementDEPART.."&includeRoadMetadata=true&includeNearestIntersection=true"
fibaro:debug(URL3);
local response3, status3, errorCode3 = HC2:GET(URL3)
if tonumber(status3) == 200 then
    local jsonTable3 = json.decode(response3)
    fibaro:debug("Connexion OK")
     fibaro:debug("Street Depart : " .. jsonTable3.results.providedLocation.latLng.lat)
    fibaro:debug("Ville Depart : " .. jsonTable3.results.locations.adminArea5)
  fibaro:debug("Pays Depart : " .. jsonTable3.results.locations.adminArea1)
  fibaro:debug("Departement Depart : " .. jsonTable3.results.locations.adminArea3)
  fibaro:debug("Code Postal Depart : " .. jsonTable3.results.locations.postalCode)
else
    fibaro:debug("Status adresse:" .. status3 .. " err: " .. errorCode3 )
end

 

Lien vers le commentaire
Partager sur d’autres sites

et voici le log:

[DEBUG] 16:45:35: /geocoding/v1/reverse?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&location=48.847633,2.452675&includeRoadMetadata=true&includeNearestIntersection=true
[DEBUG] 16:45:35: Connexion OK
[ERROR] 16:45:35: line 10: attempt to index field 'providedLocation' (a nil value)

 

Lien vers le commentaire
Partager sur d’autres sites

c'est pas le même lien... L'a c'est pour décoder latitude et longitude en adresse....

 

le json complet:

 

{

}

Lien vers le commentaire
Partager sur d’autres sites

je n'avais pas vu sur mon tel, mais ça vient des [crochets] après results ;-) 

 

et ben là, je ne sais pas encore comment faire pour passer la marche ;-) , je cherche

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir @Sebbrunie1,

 

J'ai reconnecté mes neurones ;-)

 

Pour la syntaxe : 

 - [] : tableau

 - {} : objets

 - " " : elements. 

 

En fait pour rentrer dans un tableau, il faut les crochets dans lequel on et le numéro du tableau

 

A tester bien sur, mais c'est ok chez moi ;-) 

 

 

HC2 = Net.FHttp("www.mapquestapi.com",80);
local EmplacementDEPART = "48.847633,2.452675"
local EmplacementARRIVEE = "48.8103843,2.343642100000011"
local URL3 = "/geocoding/v1/reverse?key=pEKtQ21opd7YxBQWCsTCMVCehFzJmo4N&location=" ..EmplacementDEPART.."&includeRoadMetadata=true&includeNearestIntersection=true"
fibaro:debug(URL3);
local response3, status3, errorCode3 = HC2:GET(URL3)
if tonumber(status3) == 200 then
    local jsonTable3 = json.decode(response3)
    fibaro:debug("Connexion OK")
     fibaro:debug("Street Depart : " .. jsonTable3.results[1].locations[1].street)
   fibaro:debug("Ville Depart : " .. jsonTable3.results[1].locations[1].adminArea5)
  fibaro:debug("Pays Depart : " .. jsonTable3.results[1].locations[1].adminArea1)
  fibaro:debug("Departement Depart : " .. jsonTable3.results[1].locations[1].adminArea3)
  fibaro:debug("Code Postal Depart : " .. jsonTable3.results[1].locations[1].postalCode)
else
    fibaro:debug("Status adresse:" .. status3 .. " err: " .. errorCode3 )
end

 

Lien vers le commentaire
Partager sur d’autres sites

Hello,

 

impeccable ca marche. C'est super sympa de m'avoir aidé. Par contre je ne comprends pas pourquoi je n'ai eu besoin de le faire pour l'autre json?

 

C'est parce que ce que le tableau était a une seule entrée?

 

Merci en tout cas

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...