Projet: Faire un script qui annonce la météo que l’on peut mettre dans la crontab.
1.Installer les paquets nécessaires:
1 |
sudo apt-get install sox python-bs4 libttspico-utils python-lxml |
2.Créer le script:
1 2 3 |
sudo mkdir /etc/rfr sudo nano /etc/rfr/meteo.py sudo chmod 755 /etc/rfr/meteo.py |
Ajouter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import unicode_literals import sys reload(sys) sys.setdefaultencoding('utf-8') import os import urllib from bs4 import BeautifulSoup import cStringIO StringIO = cStringIO from datetime import datetime #********Variables à adapter************** metar="LFST" start_wav = "" #fichier wav de début start_mess = "o o o o o o o o o o o o Relais France Radio Météo." #message en text de début end_wav = "" #fichier wav de fin alsadevice = "dmix:CARD=GWloop,DEV=0" dire_time = datetime.now().strftime('%H:%M') #**************************************** def find_between( s, first, last ): try: start = s.index( first ) + len( first ) end = s.index( last, start ) return s[(start - len(first)):end] except ValueError: return "" def play_line_pico(text): text = text.replace('km/h', 'kilomètre par heure') text = text.replace(',', 'et') text = text.replace('/', ' ') text = text.replace('-', ' ') if dire_time != "": text = str(dire_time + '\n\n' + text) if start_mess != "": text = str(start_mess + '\n\n' + text) os.system("pico2wave -l fr-FR -w /dev/shm/test.wav '" + text + "';") if os.path.isfile(start_wav): os.system("play "+start_wav) os.system("sox /dev/shm/test.wav -G -b 16 -e signed-integer -c 1 -r 48k -t raw - gain +2 dither | aplay -B 500000 -q -N -f S16_LE -r 48000 -c 1 -D "+alsadevice+" - ") #os.system("aplay --device="+alsadevice+" /dev/shm/test.wav ") if os.path.isfile(end_wav): os.system("play "+end_wav) url = "http://fr.allmetsat.com/metar-taf/france.php?icao="+metar data = urllib.urlencode({'vent' : 'kmh', 'tempe' : 'C', 'nuage' : 'm', 'press' : 'hpa', 'visi' : 'km', 'preci' : 'mm', 'alti' : 'm'}) html = urllib.urlopen(url, data).read() html = html.replace('<b>', ' ') html = html.replace('</b>', ' ') html = html.replace('</div>', '.\n</div>') soup = BeautifulSoup(html, "lxml") thediv = soup.find("div", {"class": "c1b"}) meteostring = thediv.get_text() meteostring = find_between( meteostring, "Vent", "Changer" ).encode('utf8') print(meteostring) play_line_pico(meteostring) |
N’oubliez pas le :
1 |
chmod 755 /etc/rfr/meteo.py |
3.Configurer le code
Il y a des variables que vous pouvez/devez modifier:
metar= »LFST »
=>voir sur le site http://fr.allmetsat.com/metar-taf/france.php?icao=LFST
start_wav = « /etc/rfr/meteo.wav »
=>fichier wav de début
start_mess = « o o o o o o o o o o o o Relais France Radio Météo. »
=>message en text de début
end_wav = « /etc/rfr/cw_beep.wav »
=>fichier wav de fin
alsadevice = « plughw:0,0 »
=>Voir aplay -L
4.Ajouter le dans la crontable d’un utilisateur:
1 |
crontab -e |
Ajouter:
Toutes les 10 minutes
1 |
*/10 * * * * /etc/rfr/meteo.py & |
Toutes les 30 minutes
1 |
*/30 * * * * /etc/rfr/meteo.py & |