Aller au contenu
Sakkhho

Info Trafic & Horaires Rer/metro Parisiens

Recommended Posts

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Je sais mais j'ai cela lorsque j'essaye de débuger

[ERROR] 22:22:33: line 20: malformed number near '3A'

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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"
            },

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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:P

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Le HTTPS, il faut le faire dans une scène....

Partager ce message


Lien à poster
Partager sur d’autres sites

Hum. Tu m en dit plus ou un exemple quelque part ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Le début :

local httpClient = net.HTTPClient()
httpClient:request("https://url", {
...

Il y a pas mal d'exemples sur le forum de cette fonction.

 

Partager ce message


Lien à poster
Partager sur d’autres sites
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par MAM78
  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :-)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

attention de bien reprendre le dernier code que j'ai déposé. j'ai corrigé quelques erreurs

Partager ce message


Lien à poster
Partager sur d’autres sites

 

c'est tout bon, j'avance.

 

@minos, @MAM78 est surement ton homme..

Modifié par Sakkhho

Partager ce message


Lien à poster
Partager sur d’autres sites

×