Page 2 sur 3
Re: API Sncf
Publié : 14 nov. 2016, 23:12
par papoo
pour connaitre les prochains trains entre deux villes et les éventuels retard, la requete ce compose comme ceci
Code : Tout sélectionner
https://{clé_d’authentification}@api.sncf.com/v1/coverage/sncf/journeys?from=admin:114172extern&to=admin:132348extern&datetime=20161114T23:08&datetime_represents=departure&min_nb_journeys=4
114172 etant la gare de Limoges
132348 étant la gare de Poitiers
Re: API Sncf
Publié : 18 nov. 2016, 21:30
par papoo
allez pour t'aider et vu qu'il n'y a pas grand chose à faire en reprenant un
script existant pour l'eedomus
Lancement par crontab
Ajouter les lignes suivantes pour une programmation toutes les 10 minutes de 7h à 9h et de 16h à 18h.
Code : Tout sélectionner
*/10 7,8 * * * /usr/bin/php /home/pi/domoticz/scripts/php/gare.php a
*/10 16,17 * * * /usr/bin/php /home/pi/domoticz/scripts/php/gare.php r
créer un fichier gare.php dans le répertoire /home/pi/domoticz/scripts/php/
et coller le code suivant puis renseignez les variables
Code : Tout sélectionner
<?php
/*************************************************************************************/
/* ### Report MAJ information train de la Gare SNCF ### */
/* Adaptation pour domoticz papoo */
/* Développement originel par eedomusbox@gmail.com */
/* */
/*************************************************************************************/
/*-------------------------------------------- */
/*------------ Variables à éditer ------------ */
/*-------------------------------------------- */
$IPdomoticz = "192.168.1.24:8080"; //<username:password@>domoticz-ip<:port>
$periph_id = '720';
// Identifiants de l'API SNCF https://data.sncf.com/api/fr/documentation
$NbJourneys ="2"; //Nb de trains minimum par jour à afficher
$api_sncf_user = 'TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT'';
$api_sncf_mdp = ''; // ne pas modifier
// Fin Identifiants de l'API SNCF
// Initialiation des variables
// Pour trouver l'id de la ville rechercher "id" dans la requete suivante https://api.sncf.com/v1/coverage/sncf/places?q=LIMOGES
$VilleDepart = 'admin:114172extern'; //LIMOGES
$VilleArrivee = 'admin:147559extern'; //ORLEANS
//$VilleArrivee = 'admin:132348extern'; //POITIERS
/*-------------------------------------------- */
/*--------- Fin Variables à éditer ----------- */
/*-------------------------------------------- */
$result = '';
// Récupération des paramètres de la requête : 2 methodes, une Web et une Raspberry
if (isset($_GET['trajet'])) {
$SensTrajet = $_GET['trajet'];
$rChariot = "<BR>"; //Retour à la ligne
} else {
$SensTrajet = $_SERVER['argv'][1];
$rChariot = "\n"; //Retour à la ligne
}
//******************************** Contruction du trajet *****************************/
switch ($SensTrajet) {
case 'a':
$gareDepart = $VilleDepart;
$gareArrive = $VilleArrivee;
break;
case 'r':
$gareDepart = $VilleArrivee;
$gareArrive = $VilleDepart;
break;
default:
$gareDepart = $VilleDepart;
$gareArrive = $VilleArrivee;
break;
}
//******************************** Date de heures d'exection *****************************/
date_default_timezone_set("Europe/Paris");
$date = date("Ymd\TH:i");
echo $rChariot."Date et heure d'execution: ".$date.$rChariot;
//******************************** Récupération des données *****************************/
$query = 'https://'.$api_sncf_user.'@api.sncf.com/v1/coverage/sncf/journeys?from='.$gareDepart.'&to='.$gareArrive.'&datetime='.$date.'&datetime_represents=departure&min_nb_journeys='.$NbJourneys;
echo $rChariot.'Requete: '.$query.$rChariot.$rChariot;
$response=file_get_contents($query);
$json = json_decode($response, true);
// Boucle sur les trajets
echo $rChariot."************TRAINS*************";
foreach($json['journeys'] as $trains) // Lecture des trajets
{
$dateDepart = $trains['departure_date_time']; echo $rChariot.'Heure de depart: '.$dateDepart; // Date de départ
$HeuredeDepart = substr($dateDepart,9,4); // Heure de départ
$dateArrive = $trains['arrival_date_time']; echo $rChariot."Heure d'arrive: ".$dateArrive; // Date d'arrivée
$heuredarrive = substr($dateArrive,9,4); // Heure d'arrivée
$numtrain = $trains['sections'][1]['display_informations']['headsign']; //Numero du train
echo $rChariot.'Numero de train: '.$numtrain;
if ( $trains['status'] != "" ) // Cas du train en retard
{ $retard = '';
$text = '';
echo $rChariot.'Statut du train: '.$trains['status'] ;
if ($trains['status'] == 'NO_SERVICE'){
echo $rChariot."************TRAINS*************";
continue; //Affichage du statut}
}
$numdisrup = $trains['sections'][1]['display_informations']['links'][0]['id']; //Affichage de l'ID de retard
echo $rChariot.'ID de retard: '.$numdisrup;
//Récupération des retards
$retards = $json['disruptions'];
//Recherche des retards
foreach($retards as $retard)
{ echo $rChariot.'ID de retard dans les retards: '.$retard['disruption_id'];
if ( $retard['disruption_id']== $numdisrup )
{ // Boucle sur l'ensemble des impacts du retard
foreach($retard['impacted_objects'][0]['impacted_stops'] as $impactStop)
{ if ( substr($impactStop['base_departure_time'],0,4) == $HeuredeDepart ) // Recherche du lieu que l'on veut
{
$updatetime = $impactStop['amended_departure_time']; // Nouvel Horaire
echo $rChariot.'Nouvelle heure de depart: '; echo substr($updatetime,0,2);echo substr($updatetime,2,2);
// Calcul du retard
$retard = ( substr($updatetime,0,2) * 60 + substr($updatetime,2,2) ) -
( substr($HeuredeDepart,0,2) * 60 + substr($HeuredeDepart,2,2) ); //En minutes
echo $rChariot.'Retard en mn: '.$retard; // Affichage du retard
$text = '-'.$retard.'mn, ';
break;
}
}
}
}
}
else
{ $text = ', ';} // Train est à l'heure
$result = $result.substr($HeuredeDepart,0,2).'h'.substr($HeuredeDepart,2,2).$text;
echo $rChariot."************TRAINS*************";
}
$result = substr($result,0,-2);; // Supprime les deux derniers caractères
echo $rChariot.$rChariot."Resultat: ".$result.$rChariot; // Affichage des résultats
$json_result = maj_periph($periph_id,$result); //Mise à jour Eedomus
// Fonction
function supprimer_accents($str, $encoding='ISO-8859-1')
{
// transformer les caractères accentués en entités HTML
$str = htmlentities($str, ENT_NOQUOTES, $encoding);
// remplacer les entités HTML pour avoir juste le premier caractères non accentués
// Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ...
$str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
// Remplacer les ligatures tel que : Œ, Æ ...
// Exemple "Å“" => "oe"
$str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
// Supprimer tout le reste
$str = preg_replace('#&[^;]+;#', '', $str);
// Supprimer les espaces
$str = preg_replace('/\s/', '-', $str);
return $str;
}
function maj_periph( $periphID, $val )
{
global $IPdomoticz;
global $rChariot;
// Remplacement des blancs par le code hexa
$val = str_replace(' ', '%20', $val);
// Remplacement des points virgules par le blanc
$val = str_replace(';','%20', $val);
// Remplacement des accents
$val = supprimer_accents($val);
$val = utf8_encode($val);
//Contruction de l'url Local
$url = "http://".$IPdomoticz."/json.htm?type=command";
$url .= "¶m=udevice";
$url .= "&idx=$periphID";
$url .= "&vnalue=0";
$url .= "&svalue=$val";
echo $rChariot."URL locale Mise à jour Domoticz: ".$url.$rChariot;
// Mis à jour du périphérique
$result = @file_get_contents($url);
$pos = strpos($result, '"OK"');
if ($pos === false)
{
echo $rChariot."Une erreur est survenue lors de la mise à jour [".$result."]".$rChariot;//}
}
return $result;
}
/*
/usr/bin/php /home/pi/domoticz/scripts/php/sncf.php a //pour l'aller
/usr/bin/php /home/pi/domoticz/scripts/php/sncf.php r //pour le retour
*/
?>
Re: API Sncf
Publié : 18 nov. 2016, 23:06
par minos
Hey Merci Papoo !! pour ce script....
j 'y suis presque .....;
voilà que je n'arrive pas à mettre à jour mon virtual Device.... tiens donc ...
Code : Tout sélectionner
root@Minas:/volume1/@appstore/domoticz/var/scripts/sncf# php gare.php a
Date et heure d'execution: 20161118T22:57
Requete: https://a733ef84-3e4èè7-4f35-b2e6-95ce08315ee9@api.sncf.com/v1/coverage/sncf/journeys?from=admin:2078971extern&to=admin:74090extern&datetime=20161118T22:57&datetime_represents=departure&min_nb_journeys=2
************TRAINS*************
Heure de depart: 20161119T060300
Heure d'arrive: 20161119T070000
Numero de train: 891432
************TRAINS*************
Heure de depart: 20161119T063200
Heure d'arrive: 20161119T071800
Numero de train: 17754
************TRAINS*************
Resultat: 06h03, 06h32
URL locale Mise ▒ jour Domoticz: http://<admin:bidule@>192.168.X.25<:8084>/json.htm?type=command¶m=udevice&idx=69&vnalue=0&svalue=06h03,%2006h32
Une erreur est survenue lors de la mise ▒ jour []
Au départ je pensais à un problème d’authentification avec domoticz ...mais en fait je sais pas trop ...?
j 'investigue...
Re: API Sncf
Publié : 18 nov. 2016, 23:51
par deennoo
Il te manque le port (:8080) dans ton adresse URL local
Re: API Sncf
Publié : 19 nov. 2016, 03:09
par minos
negatif Papoo,
domoticz tourne sur le 8084....

Re: RE: Re: API Sncf
Publié : 19 nov. 2016, 07:58
par deennoo
minos a écrit :
Code : Tout sélectionner
http://<admin:bidule@>192.168.X.25<:8084>/json.htm?type=command¶m=udevice&idx=69&vnalue=0&svalue=06h03,%2006h32
Que donne cette ligne dans ton navigateur?
Le <:8084> me semble bizzare
Re: API Sncf
Publié : 19 nov. 2016, 08:56
par minos
salut,
deennoo a écrit :Le <:8084> me semble bizzare
je suis sous syno , mon domoticz tourne sur le 8084
en enlevant le compte /motdepasse de domoticz

- secu.JPG (18.28 Kio) Consulté 10067 fois
j 'arrive à mettre à jour mon device trains:

- trains.JPG (17.51 Kio) Consulté 10067 fois
Bon le soucis , je pense est dans la forme de l'url pour passer le compte /mdp de domoticz ......?
parce que compte /mdp ==> obligatoire .....lol
Re: API Sncf
Publié : 19 nov. 2016, 09:08
par patrice
Bonjour
Pour le mot de passe obligatoire , tu peux dans "parametres" puis "reseau locaux" dire que tu ne veux pas de mdp pour les reseaux en local
Re: API Sncf
Publié : 19 nov. 2016, 13:03
par papoo
la syntaxe pour le login /mot de passe /url n'est pas
Code : Tout sélectionner
root@Minas:/volume1/@appstore/domoticz/var/scripts/sncf# php gare.php a
mais
Code : Tout sélectionner
root:Minas@/volume1/@appstore/domoticz/var/scripts/sncf# php gare.php a
en clair
monlogin
: monmotdepasse
@ url
: port
Re: API Sncf
Publié : 19 nov. 2016, 13:27
par minos
http://admin:test@192.168.0.25:8084/jso ... 9,%2016h42

- url.JPG (29.45 Kio) Consulté 10050 fois
@Papoo
c'est tout Bon Papoo !!!!
je pensais au départ qu'il fallait respecter les balises de l'exemple dans le script .....
et
patrice a écrit :Bonjour
Pour le mot de passe obligatoire , tu peux dans "parametres" puis "reseau locaux" dire que tu ne veux pas de mdp pour les reseaux en local
Je confirme ça marche aussi avec exclusion du réseau

...
Merci encore à vous ...
Pensez-vous que je peux utiliser un virtual device autre que Text ....

- TER.JPG (18.52 Kio) Consulté 10050 fois