Vytvořte skript, který bude stahovat letecká data o počasí a ukládat teplotu do relační databáze pro další zpracování.
Připravte druhý skript, který z té databáze přečte poslední teplotu a vypíše ji.
Jako relační databázi použijte sqlite.
Pro zjednodušení můžete uložit časovou značku jako UNIX timestamp.
import sqlite3
class TemperatureStorage:
def __init__(self, fname='temperatures.db'):
"""Temperature storage"""
self.db = sqlite3.connect(fname)
self._setup_tables()
def _setup_tables(self):
"""Create table when needed"""
query = """
CREATE TABLE IF NOT EXISTS notes(
timestamp int primary key,
value float
);"""
c = self.db.cursor()
c.execute(query)
self.db.commit()
def put_value(self, timestamp, value):
"put some measurement inside"
def get_value(self, timestamp):
"get some measurement inside"
def get_latest_values(self):
"return latest value"METAR je formát pro předávání informací o počasí v letectví. Na některých letištích se pravidelně zjištuje stav počasí a některé webové služby ho přes API poskytují.
Stav počasí do databáze můžete stáhnout přes HTTP z veřejného API.
Pro stažení použijte modul requests.
Odkazy:
- aviationweather.gov - veřejně dostupná služba poskytovaná NOAA
- LKTB - XML export z letiště v Brně-Tuřanech
import requests
response = requests.get('http://some.uri.dev/')
print(response.content)Data z NOAA jsou v XML formátu, vyberte z něho teplotu.
Pro rozparsování XML použijte např. modul ElementTree.
V XML dodávaném službou aviationweather.gov je několik měření.
import xml.etree.ElementTree as etree
tree = etree.fromstring(xml_string)
for element in tree.findall('.//data/METAR'):
temperature = element.find('./temp_c').text
Nástroje pro práci s časem jsou v module datetime.
from datetime import datetime
# zparsovat string na datetime
measured = datetime.strptime('2017-11-06T11:00:00Z', '%Y-%m-%dT%H:%M:%SZ')
print(measured)
# vypíše UNIX timestamp
print(measured.timestamp()) Pokud chybí modul requests, je možné použít alternativu urllib.request.
Na fakultních strojích by měl nicméně být modul requests přítomný.
from urllib.request import urlopen
url = urlopen('http://ifconfig.co/json')
response_body = url.read()