Fetch info from web APIs. TODO : Print them on the screen
This commit is contained in:
parent
c34a90941a
commit
a04549836e
122
pivelib.py
Executable file
122
pivelib.py
Executable file
@ -0,0 +1,122 @@
|
|||||||
|
#! /usr/bin/env python3.3
|
||||||
|
|
||||||
|
# Auteur : Phyks (phyks@phyks.me)
|
||||||
|
# Site web : http://phyks.me
|
||||||
|
# Licence : BEERWARE
|
||||||
|
|
||||||
|
# Description :
|
||||||
|
# =============
|
||||||
|
# Récupérer et afficher la météo et le nombre de vélibs aux stations
|
||||||
|
# prédéfinies sur un écran LCD nokia 3310 (connecté via les pins GPIO)
|
||||||
|
# Plus d'informations sur le montage :
|
||||||
|
# http://blog.idleman.fr/raspberry-pi-11-relier-a-un-ecran-et-afficher-du-texte
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import urllib3
|
||||||
|
import xml.etree.ElementTree as ET
|
||||||
|
import datetime
|
||||||
|
import math
|
||||||
|
|
||||||
|
# ==========
|
||||||
|
# Paramètres
|
||||||
|
# ==========
|
||||||
|
|
||||||
|
if(len(sys.argv) == 1):
|
||||||
|
exit('Vous devez fournir au moins un numéro de station en argument.')
|
||||||
|
|
||||||
|
stations = []
|
||||||
|
for station in sys.argv[1:]:
|
||||||
|
stations.append(int(station))
|
||||||
|
|
||||||
|
base_url = ('http://www.velib.paris.fr/service/stationdetails/paris/')
|
||||||
|
|
||||||
|
PIN_SCE = 3
|
||||||
|
PIN_RESET = 4
|
||||||
|
PIN_DC = 5
|
||||||
|
PIN_SDIN = 6
|
||||||
|
PIN_SCLK = 7
|
||||||
|
|
||||||
|
LCD_C = "LOW"
|
||||||
|
LCD_D = "HIGH"
|
||||||
|
LCD_X = 84
|
||||||
|
|
||||||
|
LCD_Y = 48
|
||||||
|
|
||||||
|
# =============================
|
||||||
|
# Initialisation des librairies
|
||||||
|
# =============================
|
||||||
|
http = urllib3.PoolManager()
|
||||||
|
|
||||||
|
# ====
|
||||||
|
# Date
|
||||||
|
# ====
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
date = now.strftime('%d/%m/%Y')
|
||||||
|
time = now.strftime('%H:%M')
|
||||||
|
|
||||||
|
# =======================
|
||||||
|
# Requête sur l'API Vélib
|
||||||
|
# =======================
|
||||||
|
available = {}
|
||||||
|
free = {}
|
||||||
|
for station in stations:
|
||||||
|
r = http.request('GET', base_url+str(station))
|
||||||
|
|
||||||
|
if r.status == 200:
|
||||||
|
station_xml = ET.fromstring(r.data)
|
||||||
|
|
||||||
|
for child in station_xml.iter('available'):
|
||||||
|
available[station] = child.text
|
||||||
|
for child in station_xml.iter('free'):
|
||||||
|
free[station] = child.text
|
||||||
|
|
||||||
|
else:
|
||||||
|
available[station] = -1
|
||||||
|
free[station] = -1
|
||||||
|
|
||||||
|
# ==================================
|
||||||
|
# Requête pour les prédictions météo
|
||||||
|
# ==================================
|
||||||
|
url_weather = ('http://api.wunderground.com/api/bc48fae29b73e75a/' +
|
||||||
|
'hourly/lang:FR/q/zmw:00000.98.07150.xml')
|
||||||
|
r = http.request('GET', url_weather)
|
||||||
|
|
||||||
|
weather_now = ''
|
||||||
|
temp_now = -1
|
||||||
|
weather_5h = ''
|
||||||
|
temp_5h = -1
|
||||||
|
weather_10h = ''
|
||||||
|
temp_10h = -1
|
||||||
|
|
||||||
|
if r.status == 200:
|
||||||
|
weather_xml = ET.fromstring(r.data)
|
||||||
|
|
||||||
|
for child in weather_xml.iter('forecast'):
|
||||||
|
day = child.find('FCTTIME').find('mday')
|
||||||
|
|
||||||
|
# Garder uniquement les événements pour aujourd'hui et éventuellement
|
||||||
|
# demain
|
||||||
|
if (int(day.text) != int(now.strftime("%d")) and
|
||||||
|
int(day.text) != int(now.strftime("%d")) + 1):
|
||||||
|
continue
|
||||||
|
|
||||||
|
epoch = child.find('FCTTIME').find('epoch')
|
||||||
|
epoch = datetime.datetime.fromtimestamp(int(epoch.text))
|
||||||
|
|
||||||
|
# Météo maintenant
|
||||||
|
if (math.floor((epoch - now).seconds/3600) == 0 and
|
||||||
|
int(day.text) == int(now.strftime('%d'))):
|
||||||
|
weather_now = child.find('condition').text
|
||||||
|
temp_now = child.find('temp').find('metric').text
|
||||||
|
# Météo à 5h
|
||||||
|
elif math.floor((epoch - now).seconds/3600) == 5:
|
||||||
|
weather_5h = child.find('condition').text
|
||||||
|
temp_5h = child.find('temp').find('metric').text
|
||||||
|
# Météo à 10h
|
||||||
|
elif math.floor((epoch - now).seconds/3600) == 10:
|
||||||
|
weather_10h = child.find('condition').text
|
||||||
|
temp_10h = child.find('temp').find('metric').text
|
||||||
|
|
||||||
|
# ============================
|
||||||
|
# Afficher les infos à l'écran
|
||||||
|
# ============================
|
Loading…
Reference in New Issue
Block a user