Sebbrunie1 Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Bonsoir, j'essaye d'adapter ce très interessant VD avec le tramways et je rentre ca local LineTram3a = jsonTable.response.Tramways[3A].line local EtatTram3a = jsonTable.response.Tramways[3A].title Mais le A ne vas pas.. Comment faire pour avoir les infos..... Merci Sébastien
Sakkhho Posté(e) le 27 janvier 2016 Auteur Signaler Posté(e) le 27 janvier 2016 Pourtant ca marche bien si tu lances l'api http://api-ratp.pierre-grimaud.fr/v2/traffic/tramways/3A EDIT effectivement je viens de tester et j'ai [ERROR] 22:20:55: line 56: malformed number near '3A' heu je sais pas quoi dire du coup ...
Sebbrunie1 Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Je sais mais j'ai cela lorsque j'essaye de débuger [ERROR] 22:22:33: line 20: malformed number near '3A'
Sebbrunie1 Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 comme ca ca marche local LineTram3a = jsonTable.response.tramways[3].line local EtatTram3a = jsonTable.response.tramways[3].title Par contre pour la boucle, ou je trouve l'intitulé de la destination. C'est mon arret?
Sebbrunie1 Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 c'est juste pour mon deuxième RER? for j=1, MaxB do --while ProchainRer == 0 do if jsonTableB.responseB.schedules[j].destination == "Châtelet" then ProchainRerB = jsonTableB.responseB.schedules[i].message break elseif jsonTableB.responseB.schedules[j].destination == "Châtelet" then ProchainRerB = jsonTable.responseB.schedules[i].message break else ProchainRerB = 0 end end
Sakkhho Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 tu en es ou ? pour la boucle pour connaitre l'horaire du prochain train il faut que tu modifies deja l'appel de l'api local response ,status, err = TRAFIC:GET("/v2/rers/a/stations/grande+arche+la+defense?destination=st+germain+en+laye+poissy+cergy") avec la bonne ligne et les bonnes destinations que tu trouves la par exemple http://api-ratp.pierre-grimaud.fr/v2/rers et pour le nom de l'arret http://api-ratp.pierre-grimaud.fr/v2/rers/a/stations donc pour toi : chatelet-les-halles
Sebbrunie1 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 En fait je veux suivre 2 RERs différents et j'ai fait ça: local response ,status, err = TRAFIC:GET("/v2/rers/a/stations/fontenay+sous+bois?destination=boissy+st+leger+marne+la+vallee") local jsonTable = json.decode(response) local ProchainRer = 0 local Max = 5 for i=1, Max do --while ProchainRer == 0 do if jsonTable.response.schedules[i].destination == "Boissy" then ProchainRer = jsonTable.response.schedules[i].message break elseif jsonTable.response.schedules[i].destination == "Boissy" then ProchainRer = jsonTable.response.schedules[i].message break else ProchainRer = 0 end end local responseB ,statusB, errB = TRAFIC:GET("/v2/rers/a/stations/41?destination=4") local jsonTableB = json.decode(responseB) local ProchainRerB = 0 local MaxB = 5 for j=1, MaxB do --while ProchainRer == 0 do if jsonTableB.responseB.schedules[j].destination == "Châtelet" then ProchainRerB = jsonTableB.responseB.schedules[i].message break elseif jsonTableB.responseB.schedules[j].destination == "Châtelet" then ProchainRerB = jsonTable.responseB.schedules[i].message break else ProchainRerB = 0 end end
Sakkhho Posté(e) le 31 janvier 2016 Auteur Signaler Posté(e) le 31 janvier 2016 dans la boucle tu es pas obligé de mettre le elseif, si le train à une destination unique j'avais fait ca car dans mon cas, je peux prendre une destination ou une autre, ma gare étant desservie par les 2 branches. si tu as qu'une possibilité supprime le elseif en revanche ca doit pas marcher car les noms des stations n'est pas ok "id": "3", "name": "Boissy Saint Leger", "slug": "boissy+saint+leger" }, "id": "8", "name": "Châtelet-Les-Halles", "slug": "chatelet-les-halles" },
Sebbrunie1 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 j'ai mis ça maintenant mais rien ne remonte local response ,status, err = TRAFIC:GET("/v2/rers/a/stations/chatelet-les-halles?destination=boissy+st+leger+marne+la+vallee")local jsonTable = json.decode(response) local ProchainRer = 0 local Max = 5 for i=1, Max do --while ProchainRer == 0 do if jsonTable.response.schedules[i].destination == "boissy+saint+leger" then ProchainRer = jsonTable.response.schedules[i].message break elseif jsonTable.response.schedules[i].destination == "Marne+la+Vallee-Chessy" then ProchainRer = jsonTable.response.schedules[i].message break else ProchainRer = 0 end end local responseB ,statusB, errB = TRAFIC:GET("/v2/rers/b/stations/41?destination=4") local jsonTableB = json.decode(responseB) local ProchainRerB = 0 local MaxB = 5 for j=1, MaxB do --while ProchainRer == 0 do if jsonTableB.responseB.schedules[j].destination == "Aeroport Ch.De Gaulle 2" then ProchainRerB = jsonTableB.responseB.schedules[i].message break elseif jsonTableB.responseB.schedules[j].destination == "Mitry-Claye" then ProchainRerB = jsonTable.responseB.schedules[i].message break else ProchainRerB = 0 end faut il que je change le nom des variable locale par ma deuxième boucle?
Sakkhho Posté(e) le 31 janvier 2016 Auteur Signaler Posté(e) le 31 janvier 2016 ca devrait marcher ca local response ,status, err = TRAFIC:GET("/v2/rers/a/stations/chatelet-les-halles?destination=boissy+st+leger+marne+la+vallee") local jsonTable = json.decode(response) local ProchainRer = "" local Max = 5 for i=1, Max do if jsonTable.response.schedules[i].destination ~= nil then if jsonTable.response.schedules[i].destination == "Marne la Vallee-Chessy" then ProchainRer = jsonTable.response.schedules[i].message break elseif jsonTable.response.schedules[i].destination == "Boissy Saint Leger" then ProchainRer = jsonTable.response.schedules[i].message break else ProchainRer = "" end end end local response ,status, err = TRAFIC:GET("/v2/rers/b/stations/chatelet?destination=charles+de+gaulle+mitry+claye") local jsonTable = json.decode(response) local ProchainRerB = "" for j=1, Max do if jsonTable.response.schedules[i].destination ~= nil then if jsonTable.response.schedules[j].destination == "Aeroport Ch.De Gaulle 2" then ProchainRerB = jsonTable.response.schedules[i].message break elseif jsonTable.response.schedules[j].destination == "Mitry-Claye" then ProchainRerB = jsonTable.response.schedules[i].message break else ProchainRerB = "" end end end après bien sur il faut de rajouter un label pour afficher le rerb
Sebbrunie1 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 J'ai ca en debug [DEBUG] 16:41:39: A [DEBUG] 16:41:39: Travaux [DEBUG] 16:41:39: 1 [DEBUG] 16:41:39: Trafic normal [ERROR] 16:41:40: line 75: attempt to index field '?' (a nil value) pour la ligne if jsonTable.response.schedules[i].destination ~= nil then
Sebbrunie1 Posté(e) le 31 janvier 2016 Signaler Posté(e) le 31 janvier 2016 c bon merci. des i trainait a la place de j. ça marche
minos Posté(e) le 13 mars 2017 Signaler Posté(e) le 13 mars 2017 Bonsoir , je viens déterrer le sujet... y aurait-il la même chose pour les TER... je suis de la bourgogne et pratique la sncf tous les jours ...avec ses grêves, ses pannes , ses retards de trains ... vous l'aurez compris que du bonheur.... donc si je pouvais avoir une piste pour adapter .. ce serait cool... Merci
Sakkhho Posté(e) le 6 juillet 2017 Auteur Signaler Posté(e) le 6 juillet 2017 Hello j'ai vu que récemment l'api est passé en V3 sauf que c'est du HTTPS me semble il maintenant https://api-ratp.pierre-grimaud.fr/v3/traffic?format=json alors qu'avant on était en http http://api-ratp.pierre-grimaud.fr/v2/traffic?format=json du coup j'ai tenté la modif local TRAFIC = Net.FHttp("api-ratp.pierre-grimaud.fr",443) local selfId = fibaro:getSelfId() local response ,status, err = TRAFIC:GET("/v3/traffic?format=json") mais ca marche pas Je crois que HTTPS ne se fait avec la fibaro si ?
Lazer Posté(e) le 6 juillet 2017 Signaler Posté(e) le 6 juillet 2017 Le HTTPS, il faut le faire dans une scène....
Sakkhho Posté(e) le 6 juillet 2017 Auteur Signaler Posté(e) le 6 juillet 2017 Hum. Tu m en dit plus ou un exemple quelque part ?
Lazer Posté(e) le 6 juillet 2017 Signaler Posté(e) le 6 juillet 2017 Le début : local httpClient = net.HTTPClient() httpClient:request("https://url", { ... Il y a pas mal d'exemples sur le forum de cette fonction.
Sakkhho Posté(e) le 6 juillet 2017 Auteur Signaler Posté(e) le 6 juillet 2017 Merci. Je corrige ce week-end alors
minos Posté(e) le 7 juillet 2017 Signaler Posté(e) le 7 juillet 2017 Il y a 7 heures, Sakkhho a dit : Merci. Je corrige ce week-end alors Salut Sakkhho tu crois que c'est jouable de l'adapter avec l'API sncf ter ? , par exemple : GET https://api.sncf.com/v1/coverage/sncf/stop_areas/stop_area:OCE:SA:87391003/departures?datetime=20170222T211300 bonne journée
Sakkhho Posté(e) le 8 juillet 2017 Auteur Signaler Posté(e) le 8 juillet 2017 (modifié) messieurs, besoin d'aide ... car je suis perdu le json https://api-ratp.pierre-grimaud.fr/v3/traffic?format=json j'ai tenté ceci --[[ %% autostart %% properties %% globals --]] -- User variables local URL = "https://api-ratp.pierre-grimaud.fr/v3" local httpClient = net.HTTPClient() ---- Appel Api --- httpClient:request(URL .. "/traffic?format=json", {options = { method = 'GET'}, success = function(result) local jsonTable = json.decode(result) local LineRer = jsonTable.result.rers[1].line local EtatRer = jsonTable.result.rers[1].title local EtatLongRer = jsonTable.result.rers[1].message local LineMetro = jsonTable.result.metros[1].line local EtatMetro = jsonTable.result.metros[1].title fibaro:debug("OK") end, error = function(err) fibaro:debug("Error: " ..err) end }) --local dateTag = os.date("%H:%M", os.time()) --fibaro:call(selfId, "setProperty", "ui.Date.value", dateTag) --fibaro:call(selfId, "setProperty", "ui.LineRer.value", LineRer .. " ") --fibaro:call(selfId, "setProperty", "ui.EtatRer.value", EtatRer .. " ") --fibaro:call(selfId, "setProperty", "ui.LineMetro.value", LineMetro .. " ") --fibaro:call(selfId, "setProperty", "ui.EtatMetro.value", EtatMetro .. " ") -- Gestion des icônes et mise à jour de la variable --if EtatRer == "Trafic normal" then -- fibaro:call(selfId , "setProperty", "currentIcon", TraficOk) -- fibaro:setGlobal("EtatTrafic", "OK") --else -- fibaro:call(selfId , "setProperty", "currentIcon", TraficNok) -- fibaro:setGlobal("EtatTrafic", EtatLongRer) print(LineRer) print(EtatRer) print(LineMetro) print(EtatMetro) print(EtatRer) mais j'obtiens [DEBUG] 14:12:24: nil [DEBUG] 14:12:24: nil [DEBUG] 14:12:24: nil [DEBUG] 14:12:24: nil [DEBUG] 14:12:24: nil [DEBUG] 14:12:24: [1;31m2017-07-08 14:12:24.534764 [ fatal] LUA error: /usr/share/lua/5.2/json/decode.lua:74: bad argument #1 to 'match' (string expected, got table) pouvez vous me guider un peu plus ? merci Modifié le 8 juillet 2017 par Sakkhho
MAM78 Posté(e) le 8 juillet 2017 Signaler Posté(e) le 8 juillet 2017 (modifié) Hello @Sakkhho Voici ton code corrigé avec une traitement des erreurs potentielles --[[ %% autostart %% properties %% globals --]] -- User variables function GetData() local URL = "https://api-ratp.pierre-grimaud.fr" local Parameter = "/v3/traffic?format=json" local Query = URL .. Parameter local http = net.HTTPClient() local ok = pcall(function() http:request(Query, { options = { method = 'GET', headers = {["Content-Type"] = "application/json"}, data = body }, success = function(response) if response.status == 200 then local status, data = pcall(json.decode, response.data) if (status and data) then LineRer = data.result.rers[1].line EtatRer = data.result.rers[1].title EtatLongRer = data.result.rers[1].message LineMetro = data.result.metros[1].line EtatMetro = data.result.metros[1].title fibaro:debug(LineRer) fibaro:debug(EtatRer) fibaro:debug(LineMetro) fibaro:debug(EtatMetro) fibaro:debug(EtatRer) end else if response.status == 500 or response.status == 503 then fibaro:debug("Erreur d'indisponibilité du serveur") else fibaro:debug("Erreur requête serveur, response.status = "..response.status) end end end, error = function(err) fibaro:debug("Erreur de reception de données, Erreur = ".. err) end }) end) if not(ok) then Debug("red","Erreur dans l'exécution de fhttp:request(Query") end end GetData() Modifié le 8 juillet 2017 par MAM78 2
minos Posté(e) le 8 juillet 2017 Signaler Posté(e) le 8 juillet 2017 comment je pourrai adapter avec l'api de la sncf pour les ter ?: https://api.sncf.com/v1/ Une idée ....?
Sakkhho Posté(e) le 8 juillet 2017 Auteur Signaler Posté(e) le 8 juillet 2017 merci @MAM78 , c'était bien au dessus de mes possibilités lol j'adore ce forum je continue donc pour remettre le VD focntionnel le plus gros est fait tu me diras :-)
MAM78 Posté(e) le 8 juillet 2017 Signaler Posté(e) le 8 juillet 2017 attention de bien reprendre le dernier code que j'ai déposé. j'ai corrigé quelques erreurs
Sakkhho Posté(e) le 8 juillet 2017 Auteur Signaler Posté(e) le 8 juillet 2017 (modifié) c'est tout bon, j'avance. @minos, @MAM78 est surement ton homme.. Modifié le 8 juillet 2017 par Sakkhho
Messages recommandés