API Sncf

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
minos
Messages : 72
Inscription : 30 oct. 2016, 18:40

API Sncf

Message par minos »

Coucou,

alors là je me lance dans un projet que je ne maîtrise pas du tout ... le terme est faible :shock:

l 'idée m 'est venue de ce post viewtopic.php?f=10&t=1991&hilit=pluie
(au passage qui fonctionne très bien ....merci )

Tous les matins avant de partir de chez moi, je dois vérifier si mon train est à l'heure , pas supprimer, grèves ...bref vous avez compris ... :D

en fait , est-il possible de récupérer via APi scnf , le trafic en temps réel, si pas suppression/retard de TER puis d'alimenter une sonde ou des sondes virtuelles dans Domoticz ?

merci de vos avis ....
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: API Sncf

Message par ganq »

Mon ami google "api sncf" répond très vite à ta demande :
Sur le réseau transilien : https://ressources.data.sncf.com/explor ... ransilien/
Sur le reste : pfffff...

après si tu as une page http fixe qui donne l'infos du train en temps réel, on devrait pouvoir extraire les données
domoticien amateur option bidouille
minos
Messages : 72
Inscription : 30 oct. 2016, 18:40

Re: API Sncf

Message par minos »

ganq a écrit :Mon ami google "api sncf" répond très vite à ta demande :
Oui c 'est l'ami de tous , mais pas toujours ... :lol:
j 'avais dejà vu les api sncf , j ai aussi crée un token au passage
ganq a écrit :ur le réseau transilien : https://ressources.data.sncf.com/explor ... ransilien/
sauf que je suis de Bourgogne et le Trafic transilien me passe au dessus des oreilles .... :lol:
ganq a écrit :après si tu as une page http fixe qui donne l'infos du train en temps réel, on devrait pouvoir extraire les données
sans doute ...
stephdes
Messages : 285
Inscription : 06 oct. 2016, 20:50

Re: API Sncf

Message par stephdes »

Ça m'intéressait fortement d'apprendre à extraire les données d'une page internet.

Si tu peux me donner des infos sur ce sujet Ganq, je suis preneur!

Merci ;)
MiniPC W10 + RFXCom 433e + RFLINK
Elec : Téléinfo
Alexa + Alhau
MQTT...
(merci easydomoticz !)
minos
Messages : 72
Inscription : 30 oct. 2016, 18:40

Re: API Sncf

Message par minos »

Sur le site sncf , il y a ça http://www.sncf.com/fr/geolocalisation

c 'est pas mal fait la geolocalisation...
minos
Messages : 72
Inscription : 30 oct. 2016, 18:40

Re: API Sncf

Message par minos »

Bon j ai trouvé une mine d'or :shock:


{"tickets":[],"links":[{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/journeys?to=admin%3A120965extern&from=admin%3A7444extern&datetime_represents=departure&datetime=20161114T184101","type":"next","rel":"next","templated":false},{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/journeys?to=admin%3A120965extern&from=admin%3A7444extern&datetime_represents=arrival&datetime=20161114T204359","type":"prev","rel":"prev","templated":false},{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/journeys?to=admin%3A120965extern&from=admin%3A7444extern&datetime_represents=departure&datetime=20161114T000000","type":"first","rel":"first","templated":false},{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/journeys?to=admin%3A120965extern&from=admin%3A7444extern&datetime_represents=arrival&datetime=20161114T235959","type":"last","rel":"last","templated":false},{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/stop_points\/{stop_point.id}","type":"stop_point","rel":"stop_points","templated":true},{"href":"https:\/\/api.sncf.com\/v1\/coverage\/sncf\/stop_areas\/{stop_area.id}","type":"stop_area","rel":"stop_areas","templated":true}],"journeys":[{"fare":{"found":false,"total":{"currency":"","value":"0.0"},"links":[]},"status":"","tags":["walking","ecologic"],"nb_transfers":0,"durations":{"walking":0,"total":7380},"arrival_date_time":"20161114T204400","calendars":[{"exceptions":[{"type":"remove","datetime":"20161111"}],"active_periods":[{"begin":"20161101","end":"20170102"}],"week_pattern":{"monday":true,"tuesday":true,"friday":true,"wednesday":true,"thursday":true,"sunday":true,"saturday":false}}],"departure_date_time":"20161114T184100","requested_date_time":"20161114T180830","sections":[{"from":{"embedded_type":"administrative_region","quality":0,"administrative_region":{"insee":"75056","name":"Paris","level":8,"coord":{"lat":"48.856491","lon":"2.352156"},"label":"Paris (75001-75116)","id":"admin:7444extern","zip_code":"75001;75116"},"id":"admin:7444extern","name":"Paris (75001-75116)"},"links":[],"arrival_date_time":"20161114T184100","co2_emission":{"value":0.0,"unit":""},"to":{"embedded_type":"stop_point","stop_point":{"name":"Paris-Gare-de-Lyon","links":[],"coord":{"lat":"48.844924","lon":"2.373481"},"label":"Paris-Gare-de-Lyon (Paris)","equipments":[],"administrative_regions":[{"insee":"75112","name":"Paris 12e Arrondissement","level":9,"coord":{"lat":"48.839615","lon":"2.395751"},"label":"Paris 12e Arrondissement (75012)","id":"admin:9525extern","zip_code":"75012"},{"insee":"75056","name":"Paris","level":8,"coord":{"lat":"48.856491","lon":"2.352156"},"label":"Paris (75001-75116)","id":"admin:7444extern","zip_code":"75001;75116"}],"id":"stop_point:OCE:SP:TGV-87686006","stop_area":{"codes":[{"type":"CR-CI-CH","value":"0087-686006-BV"}],"name":"Paris-Gare-de-Lyon","links":[],"coord":{"lat":"48.844924","lon":"2.373481"},"label":"Paris-Gare-de-Lyon (Paris)","timezone":"Europe\/Paris","id":"stop_area:OCE:SA:87686006"}},"quality":0,"id":"stop_point:OCE:SP:TGV-87686006","name":"Paris-Gare-de-Lyon (Paris)"},"departure_date_time":"20161114T184100","duration":0,"type":"crow_fly","id":"section_0_0","mode":"walking"},{"from":{"embedded_type":"stop_point","stop_point":{"name":"Paris-Gare-de-Lyon","links":[],"coord":{"lat":"48.844924","lon":"2.373481"},"label":"Paris-Gare-de-Lyon (Paris)","equipments":[],"administrative_regions":[{"insee":"75112","name":"Paris 12e Arrondissement","level":9,"coord":{"lat":"48.839615","lon":"2.395751"},"label":"Paris 12e Arrondissement (75012)","id":"admin:9525extern","zip_code":"75012"},{"insee":"75056","name":"Paris","level":8,"coord":{"lat":"48.856491","lon":"2.352156"},"label":"Paris (75001-75116)","id":"admin:7444extern","zip_code":"75001;75116"}],"id":"stop_point:OCE:SP:TGV-87686006","stop_area":{"codes":[{"type":"CR-CI-CH","value":"0087-686006-BV"}],"name":"Paris-Gare-de-Lyon","links":[],"coord":{"lat":"48.844924","lon":"2.373481"},"label":"Paris-Gare-de-Lyon (Paris)","timezone":"Europe\/Paris","id":"stop_area:OCE:SA:87686006"}},"quality":0,"id":"stop_point:OCE:SP:TGV-87686006","name":"Paris-Gare-de-Lyon (Paris)"},"links":[{"type":"vehicle_journey","id":"vehicle_journey:OCE:SN006665F01002"},{"type":"line","id":"line:OCE:138"},{"type":"route","id":"route:OCE:138-TGV-87686006-87722025"},{"type":"commercial_mode","id":"commercial_mode:tgv"},{"type":"physical_mode","id":"physical_mode:LongDistanceTrain"},{"type":"network","id":"network:sncf"}],"arrival_date_time":"20161114T204400","additional_informations":["regular"],"co2_emission":{"value":1329.0736,"unit":"gEC"},"display_informations":{"direction":"Lyon-Perrache (Lyon)","code":"","description":"","links":[],"color":"000000","physical_mode":"Train grande vitesse","headsign":"6665","commercial_mode":"TGV","equipments":[],"label":"Paris <> Lyon <> Saint Etienne","text_color":"","network":"SNCF"},"to":{"embedded_type":"stop_point","stop_point":{"name":"Lyon-Part-Dieu","links":[],"coord":{"lat":"45.76058","lon":"4.859438"},"label":"Lyon-Part-Dieu (Lyon)","equipments":[],"administrative_regions":[{"insee":"69383","name":"Lyon 3e Arrondissement","level":9,"coord":{"lat":"45.759933","lon":"4.849389"},"label":"Lyon 3e Arrondissement (69003)","id":"admin:120967extern","zip_code":"69003"},{"insee":"69123","name":"Lyon","level":8,"coord":{"lat":"45.757526","lon":"4.83248"},"label":"Lyon (69001-69009)","id":"admin:120965extern","zip_code":"69001;69009"}],"id":"stop_point:OCE:SP:TGV-87723197","stop_area":{"codes":[{"type":"CR-CI-CH","value":"0087-723197-BV"}],"name":"Lyon-Part-Dieu","links":[],"coord":{"lat":"45.76058","lon":"4.859438"},"label":"Lyon-Part-Dieu (Lyon)","timezone":"Europe\/Paris","id":"stop_area:OCE:SA:87723197"}},"quality":0,"id":"stop_point:OCE:SP:TGV-87723197","name":"Lyon-Part-Dieu (Lyon)"},"base_arrival_date_time":"20161114T204400","base_departure_date_time":"20161114T184100","departure_date_time":"20161114T184100","geojson":{"type":"LineString","properties":[{"length":390904}],"coordinates":[[2.373481,48.844924],[4.859438,45.76058]]},"duration":7380,"type":"public_transport","id":"section_1_0","stop_date_times":[{"stop_point":{"name":"Paris-Gare-de-Lyon","links":[],"coord":{"lat":"48.844924","lon":"2.373481"},"label":"Paris-Gare-de-Lyon (Paris)","equipments":[],"id":"stop_point:OCE:SP:TGV-87686006"},"links":[],"arrival_date_time":"20161114T184100","additional_informations":[],"departure_date_time":"20161114T184100","base_arrival_date_time":"20161114T184100","base_departure_date_time":"20161114T184100"},{"stop_point":{"name":"Lyon-Part-Dieu","links":[],"coord":{"lat":"45.76058","lon":"4.859438"},"label":"Lyon-Part-Dieu (Lyon)","equipments":[],"id":"stop_point:OCE:SP:TGV-87723197"},"links":[],"arrival_date_time":"20161114T204400","additional_informations":[],"departure_date_time":"20161114T204900","base_arrival_date_time":"20161114T204400","base_departure_date_time":"20161114T204900"}]},{"from":{"embedded_type":"stop_point","stop_point":{"name":"Lyon-Part-Dieu","links":[],"coord":{"lat":"45.76058","lon":"4.859438"},"label":"Lyon-Part-Dieu (Lyon)","equipments":[],"administrative_regions":[{"insee":"69383","name":"Lyon 3e Arrondissement","level":9,"coord":{"lat":"45.759933","lon":"4.849389"},"label":"Lyon 3e Arrondissement (69003)","id":"admin:120967extern","zip_code":"69003"},{"insee":"69123","name":"Lyon","level":8,"coord":{"lat":"45.757526","lon":"4.83248"},"label":"Lyon (69001-69009)","id":"admin:120965extern","zip_code":"69001;69009"}],"id":"stop_point:OCE:SP:TGV-87723197","stop_area":{"codes":[{"type":"CR-CI-CH","value":"0087-723197-BV"}],"name":"Lyon-Part-Dieu","links":[],"coord":{"lat":"45.76058","lon":"4.859438"},"label":"Lyon-Part-Dieu (Lyon)","timezone":"Europe\/Paris","id":"stop_area:OCE:SA:87723197"}},"quality":0,"id":"stop_point:OCE:SP:TGV-87723197","name":"Lyon-Part-Dieu (Lyon)"},"links":[],"arrival_date_time":"20161114T204400","co2_emission":{"value":0.0,"unit":""},"to":{"embedded_type":"administrative_region","quality":0,"administrative_region":{"insee":"69123","name":"Lyon","level":8,"coord":{"lat":"45.757526","lon":"4.83248"},"label":"Lyon (69001-69009)","id":"admin:120965extern","zip_code":"69001;69009"},"id":"admin:120965extern","name":"Lyon (69001-69009)"},"departure_date_time":"20161114T204400","duration":0,"type":"crow_fly","id":"section_2_0","mode":"walking"}],"co2_emission":{"value":1329.0736,"unit":"gEC"},"duration":7380,"type":"best"}],"disruptions":[],"notes":[],"feed_publishers":[],"context":{"car_direct_path":{"co2_emission":{"value":97403.246962703,"unit":"gEC"}}},"exceptions":[]}

Bon ça doit être jouable ....mais faut mettre les mains dedans ....les bras ...tout quoi ....

La nuit porte conseille ....

en plus y a la super MOON ....
images.jpg
images.jpg (5.19 Kio) Consulté 9441 fois
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: API Sncf

Message par papoo »

dans ce fourbi, quelle est l'information que tu souhaites récupérer? c'est extrait de quelle api?
il existe apparemment une appli mobile qui permet la creation d'alertes c'est la source de ces données qu'il faudrait trouver
http://cdn.ter.sncf.com/medias/PDF/bour ... -12006.pdf
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
minos
Messages : 72
Inscription : 30 oct. 2016, 18:40

Re: API Sncf

Message par minos »

En fait c 'est ici :https://data.sncf.com/api

une démo:

et l api https://api.sncf.com/v1/coverage/sncf/j ... 114T220100

en fait ce qui m’intéresse surtout c 'est de trouver mon train du matin ( je prends souvent le même ) et de savoir s'il est à l'heure dans un premier temps... si oui tant mieux
si en retard ... de combien de temps ...

Bon des fois ils sont supprimés ... merci la sncf....

l 'appli android je l'a connait ... je ne reçois pas toujours les alertes ....



bon faut pas s'emballer ....
mais surtout dans le dashboard domoticz ça devrait claquer ..... ;)
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: API Sncf

Message par papoo »

ok ça c'est l'exemple donné lors de l'inscription.
pour créer un script permettant de trouver son train, il faut
1) trouver la requête api qui remontera ce type d'information
2)trouver l'id de la région (regionID) j'ai pas trouvé de tableau de région, juste un tableau des gares
3) l'id du train?
une fois la requete construite, les infos concernant uniquement ton train seront beaucoup plus simple à remonter
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: API Sncf

Message par ganq »

stephdes a écrit :Ça m'intéressait fortement d'apprendre à extraire les données d'une page internet.

Si tu peux me donner des infos sur ce sujet Ganq, je suis preneur!

Merci ;)
si c'est du json, il y a quelques exemples sur le site et j'en ai aussi quelqu'un en lua :

Code : Tout sélectionner

commandArray = {}

-- configuration des variables
	-- variable debog : affiche les print si debog vaut 1

	ip='192.168.0.20:8080'
	debog=0
	idx=170
	nom_idx='Nébulosité'
	lat=49.4938,0.10767
	auth='-- mettre son token ici 
		
-- fin de la configuration
		
	
		jour = os.date('%Y-%m-%d')
		json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
		--  adresse du capteur
		url='http://www.infoclimat.fr/public-api/gfs/json?_ll='..lat..'&_auth='..auth

		-- lecture fichier Json
		local config=assert(io.popen("curl  -s  --max-time 8 --connect-timeout 8 '"..url.."'"))
		local location = config:read('*all')
		config:close()
		local jsonLocation = json:decode(location)

		end
		if (location~='') then
			
			etat=jsonLocation.request_state
		    -- neb1=jsonLocation['2016-11-08_22:00:00'].nebulosite.totale
			date1=jour..' 04:00:00'

			
			
			if (jsonLocation[date1]~=nil) then
				neb1=jsonLocation[date1].nebulosite.totale	end

			print('nebulosite 1: '..neb1)

			
		end 
Si c'est depuis un site, il faut essayer de comprendre la structure du site, repérer les "bons mots" ou balise et extraire l'info interessante. Je ne suis pas un expert, des experts me corrigeront certainement (et tant mieux) mais celui ci fonctionne :

Code : Tout sélectionner

#!/bin/bash

# nuages.sh récupère l'information nuageuse à 8h sur le site accuweather pour les nuages de 9h à 16 h
# envoie les données sous la forme nombre espace nombre dans l'idx dummy texte 25
# cron : 6 8 * * * sudo /home/pi/domoticz/scripts/nuages.sh

cd /var/tmp
curl "http://www.accuweather.com/fr/fr/le-havre/133478/hourly-weather-forecast/133478?hour=9" > meteo.txt #récupère le fichier météo du jour de 9h à 16h 
sed "/DOC/,/Couv/d" meteo.txt > meteo1.txt # supprime tout avant Couverture nuagageuse
sed "/Hum/,/html/d" meteo1.txt > meteo3.txt # supprime tout après les données
sed "/tr/d" meteo3.txt > meteo4.txt # supprime la ligne tr
grep -o '>.*%' meteo4.txt > meteo5.txt # garde les chiffres entre > et %
sed "s/>//g;s/%//g" meteo5.txt > meteo6.txt # supprime les > et %
sed ':z;N;s/\n/%20/;bz' meteo6.txt >meteo7.txt # convertis les sauts de ligne en %20
var='http://192.168.0.20:8080/json.htm?type=command&param=udevice&idx=25&svalue='
var2=$(cat meteo7.txt)
curl -s $var$var2
domoticien amateur option bidouille
Répondre