Lifehack - Notification des horaires par SMS
25 septembre 2015 09:00 11 messagesTAGS : Free, Freebox, Freemobile Lifehacking Planet Libre Python
Cela fait longtemps que je n’ai pas parlé de technique de Lifehacking. Dans cet article, je vais vous présenter une utilité que j’ai trouvé aux notifications par SMS disponible chez Freemobile. En partant le matin, je fais un trajet bus + train + marche à pied. En revenant le soir, je le trajet inverse marche à pied + train + bus. Ces trajets sont quasiment à heures fixes tous les jours. J’ai donc créer un script mis en tâche planifiée/crontab dans une machine qui tourne 24h sur 24h et qui est reliée à Internet. Ce script va récupérer les horaires de bus et RER et me les envoie par SMS sur mon trajet. Ainsi je sais si je dois me hâter ou ralentir, quel train ou bus j’aurais pour mon déplacement. Je peux réagir à des retards/suppressions qui viendraient perturber un rythme journalier bien rôdé.
Pourquoi par SMS et ne pas aller consulter les sites 3g ? Parce que je n’ai pas forcément la 3G sur le chemin, qu’il faut lancer un navigateur, ouvrir le raccourci/favori, que le site s’affiche... Le SMS lui arrive tout seul, à une heure fixe.
Les services fournis par les transporteurs
Pour une ligne RATP de bus donnée, on a une version WAP (plus légère du site et qui va à l’essentiel) de la forme :
http://wap.ratp.fr/siv/schedule?service=next&reseau=bus&lineid=BXXX&stationid=XXX_XXX
Cette URL, avec l’ID du bus et le numéro de station donne les horaires de prochain passage.
http://www.transilien.mobi/train/result?idOrigin=XXX&idDest=YYY
Pour la SNCF et les RER transilien, c’est cette URL avec la gare de départ et la gare d’arrivée, dont le code est sur 3 lettres.
Une fois que l’on a les bons liens d’intérêts (pour les différents trajets), on peut passer à la suite.
Le script en crontab
J’ai donc crée un un script Python (basé sur beautifulsoup), qui récupère la page, parse le HTML, en extrait un texte important (heure de passage, direction...) et formate un SMS qu’il envoie via l’API de notifications par SMS de Freemobile.
# -*-coding:Utf-8 -*
import urllib
import sys
import bs4 as BeautifulSoup
import re
from urllib.request import urlopen
from urllib.parse import quote
#------------------------------------------------------------
# En fonction de l'argument, on a les différentes URL
#------------------------------------------------------------
# A changer : remplacer XXX et YYY par le code des stations de départ/arrivée de transilien
#pageFile = urlopen("http://www.transilien.mobi/train/result?idOrigin=XXX&idDest=YYY")
# Cas d'une page d'horaires de BUS Ratp
#pageFile = urlopen("http://wap.ratp.fr/siv/schedule?service=next&reseau=bus&lineid=BXXX&stationid=XXX_XXX_XXX")
#--------------------------------------------
# Partie pour le parsing de la page SNCF
#--------------------------------------------
def parsingSNCF(pageHtml):
soup = BeautifulSoup.BeautifulSoup(pageHtml)
gDepart = soup.find_all('div',class_='GareDepart')
gArrivee = soup.find_all('div',class_='GareArrivee')
sAll = soup.find_all('li', class_=re.compile('resultat_gare*'))
nomGareDepart=((gDepart[0].find_all('a',class_='bluefont'))[0].get_text()).replace(" ","").strip()
nomGareArrivee=((gArrivee[0].find_all('a',class_='bluefont'))[0].get_text()).replace(" ","").strip()
trajet=nomGareDepart+' - '+nomGareArrivee+'\n'
texte=''
texte=texte+trajet
#print (sAll)
i=0
for var in sAll:
heure = var.find_all('span',class_='heure_train')
valHeure = heure[0].get_text()
destination = var.find_all('span',class_='garearrivee')
valdestination = destination[0].get_text()
nomTrain = var.find_all('span',class_='train_mission')
valNomTrain = nomTrain[0].get_text().replace("(","").replace(")","")
texte=texte+valHeure+' '+valNomTrain+'\n'
i += 1
if i>=4:
break
return texte
#Fin parsing page SNCF
#--------------------------------------------
# Partie pour le parsing de la page RATP
#--------------------------------------------
def parsingRATP(maPageHtml):
soup = BeautifulSoup.BeautifulSoup(maPageHtml)
texte=''
sDirection = soup.find_all('span',class_='direction')
for sDir in sDirection:
print(sDir.get_text())
sBWhite = soup.find_all('tbody')
for var in sBWhite:
sTh= var.find_all('td')
for th in sTh:
print(th.get_text())
return texte
#--------------------------------------
# Lecture de la page HTML
#--------------------------------------
#Si on parse une page SNCF
pageHtml = pageFile.read()
texte = parsingSNCF(pageHtml)
pageFile.close()
#Si on veut paser une page RATP
# pageHtml = pageFile.read()
# texte = parsingRATP(pageHtml)
# pageFile.close()
#--------------------------------------
# ENVOI SMS FREE
#--------------------------------------
user='identifiantFourniParFreeMobile' # A changer
pas='motDePasseEnvoiSMSViaFreeMobile' # A changer
#quote convertit en ascii la chaine utf8
texte = str(texte)
url = 'https://smsapi.free-mobile.fr/sendmsg?&user='+user+'&pass='+pas+'&msg='+ quote(texte)
reponse = urlopen(url)
#A faire : tester la réponse pour le cas où il y a une erreur
Ce mini-projet m’a permis de commencer à apprendre le Python. Cela me permet si besoin de recevoir SMS qui me préviennent au bon moment pour me dire quel seront les prochains bus et RER que je dois prendre pour rentrer chez moi, si je dois prévoir d’être en retard ou si je serai à l’heure...
A voir également Ma page de raccourcis d’horaires de bus/train où là c’est en mode "connexion en ligne sur les sites" avec utilisation des mêmes URL.
Dans la même rubrique
18 janvier 2021 – En 2021, comment je fais de la veille opensource
12 janvier 2021 – Lifehacking - Parlons un peu de mes usages de Markdown
6 janvier 2021 – Lifehacking - Création de tickets dans le Kanban Gitlab via l’API
15 mai 2020 – Lifehacking - L’application Gnome Pomodoro
3 décembre 2019 – Lifehacking - Giggity - l’application pour s’organiser lors d’un événement
11 Messages
Lifehack - Notification des horaires par SMS, Yax | 25 septembre 2015 - 12:03 1
J’aime beaucoup le concept du Lifehacking et l’idée que ce soit à la portée de tout le monde avec un peu de sueur. Ton exemple en est une belle illustration. Alors le langage Python c’est bon non ;-)
Lifehack - Notification des horaires par SMS, @gui | 26 septembre 2015 - 10:03 2
C’est vraiment très intelligent comme idée genma, pour un novices comme moi en informatique je vais demander de l’aide à un ami qui si connais pas mal en informatique.
Je vais voir si Bouygues tel aussi propose une API de notifications par SMS ...
Merci ++
Lifehack - Notification des horaires par SMS, lapineige | 27 septembre 2015 - 00:00 3
Genma je te bénie !
C’est génial comme truc ! Il suffisait d’y penser ^^
Par contre, l’envoi des SMS ne t’est pas facturé ? Où c’est compris avec l’abonnement Free ?
Tu connais une adresse pour les horaires de train "classiques" (= nationaux, on se tasse pas tous dans le RER :-P) ? Sinon je vais me l’adapter pour la page de la sncf, ça va bien me servir :-)
Tu vas voir, tout est bon dans l’Python ;-)
Non les SMS ne sont pas facturés, ca fait partie du forfait. Mais ils ne sont envoyés qu’à mon numéro perso (le code est lié au numéro. Si on veut envoyer à quelqu’un d’autre, qui est chez Freemobile il faut son code à lui. Je l’ai fait pour d’autres horaires pour Ryo-Oki ma compagne, elle ausi chez Freemobile).
Lifehack - Notification des horaires par SMS, lapineige | 27 septembre 2015 - 11:11 5
Ça me parait assez logique.
Je vais regarder du coté du site de la sncf, notamment des ters. Quand je l’aurai adapté je mettrai le lien içi, ça pourrait dépanner du monde :)
Lifehack - Notification des horaires par SMS, squal78 | 10 novembre 2015 - 21:56 6
Tres bon ! j’aime beaucoup ! je vais voir comment utiliser cela.
De mon coté, j’avais besoin de savoir si il restait des Velibs à ma station de rer et si il restait des emplacements libres pres de mon bureau. Pour cela, j’ai utilisé tasker et un acces aux APIs JC decaux.
Tasker effectue des get http via les API et me notifie en fonction de mon agenda du nb de velib dispo et des places libres.... super simple, rapide, sans fioriture...
il faudrait que je fasse un billet de cela.
Lifehack - Hébergement de script Python, Valnum | 19 juin 2017 - 17:04 7
Salut Genma,
Je fais des scripts Python. Peux-tu me donner des conseils pour héberger un script de la manière la plus simple possible.
Je dispose d’un hébergement type "mutualisé OVH".
Il y a la possibilité d’utiliser le CGI pour héberger ses scripts Python. Est-ce la manière que tu utilises ?
Merci de ton retour.
Valnum
J’avais hébergé ça sur une machine chez moi, sur laquelle j’avais un linux complet d’installé. Donc il faut voir ce que tu as comme possibilité sur ton serveur. C’est une vraie distribution ou juste un hébergement web (apache/php/mysql). Dans le 2ème cas, pas trop d’idée sinon de voir si on peut faire la même chose en PHP du coup...
Lifehack - Hébergement de script Python, Valnum | 22 juin 2017 - 12:44 9
Merci de ta réponse.
Sur le serveur il y a du PHP et du Python en CGI. J’ai déjà moi aussi des scripts Python qui interrogent la RATP (tout a commencé quand j’ai codé une appli en Python sur mon N900 pour avoir les horaires de mes itinéraires il y a quelques années :-) )
Je vais regarder pour héberger les scripts chez moi. J’ai un Rasp, je vais l’utiliser pour ça. Le truc "relou" c’est l’aspect sécurité, il y a pas mal de temps à passer sur le sujet pour mettre en ligne une config sécurisée qui ne mette pas en péril le réseau de ton domicile, et du temps je n’en ai pas beaucoup...
Lifehack - Notification des horaires par SMS, Ludo | 17 octobre 2017 - 22:32 10
Bonsoir,
merci beaucoup pour ce script, je l’ai un peu retouché pour mes besoins et ça marche impec depuis aujourd’hui :D
Lifehack - Notification des horaires par SMS, Ludo | 8 janvier 2019 - 20:13 11
hello
transilien.mobi ne fonctionne plus, il redirige vers transilien.com
Je regarderai pour voir si on peut toujours parser avec beautifulsoup