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

10 Messages

  • 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 ;-)


  • 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 ++


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


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


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


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


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


  • Bonsoir,
    merci beaucoup pour ce script, je l’ai un peu retouché pour mes besoins et ça marche impec depuis aujourd’hui :D


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 Mastodon
Logo Diaspora

Soutenir ce blog?

Logo Tipee Logo Liberapay

Licence

Licence Creative Commons

Derniers articles

1.  City Hunter - L’OST de l’anime

2.  Logiciel de gestion des tâches - Task Coach

3.  Ubuntu - Unity - Afficher les heures de plusieurs zones géographiques

4.  Mes études

5.  Faire passer des entretiens - mes quelques questions subjectives

6.  Your name - Explication de la scène du crépuscule

7.  Un Meetup Yunohost ? Appel pour aider ce projet

8.  Kimi no na wa - Your Name

9.  Conférence Du pseudonymat au pseudonyme

10.  Yunohost - Pourquoi les ports 80 et 25 sont ils toujours utilisés ?


Date de mise à jour :

Le 15 décembre 2017