Le blog de Genma
Vous êtes ici : Accueil » Lifehacking » Lifehack - Notification des horaires par SMS

Lifehack - Notification des horaires par SMS

D 25 septembre 2015     H 09:00     A Genma     C 6 messages   Flattr cet article Logo Tipee

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

 Les Tags - mots clefs de ce article

logo clef

 Vous aimez cet article? Soutenez le blog et partagez-le ;-)

Logo Tipee Flattr icon  Facebook icon  Twitter icon  Diapora icon   Licence Creative Commons

6 Messages

Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Conférences

Médiathèques vous recherchez un conférencier sur l’éducation populaire et l’hygiène numérique? Jetez un coup d’oeil à mon CV

Date des prochaines conférences?
Cliquer ici

Rechercher sur le blog

Liens

Logo Flattr Logo Gmail Logo Twitter
Logo RSS Logo Linkedin Logo GitHub
Logo Gitlab
Logo Diaspora

Soutenir ce blog?

Logo Tipee Logo Liberapay

Licence

Licence Creative Commons

Derniers articles

1.  Faire des vidéos sur Youtube ? Pas pour moi

2.  Réflexions sur le passage de génération

3.  Au revoir Twitter ?

4.  Lifehacking et la gestion des mails

5.  Super Street Fighter 4

6.  Le jeu 0 A.D. - Empires Ascendant

7.  Mon expérience de la borne d’arcade Neolegend

8.  Ton blog c’était mieux avant…

9.  Je suis en phase de minimalisme

10.  L’importance de sauvegarder son Keepass


Date de mise à jour :

Le 28 avril 2017