Skip to content

Latest commit

 

History

History
119 lines (84 loc) · 3.35 KB

File metadata and controls

119 lines (84 loc) · 3.35 KB

DB-API

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"

Vstupní data

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:

import requests

response = requests.get('http://some.uri.dev/')
print(response.content)

Zpracování XML

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

Zpracování času

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()) 

Unable to import requests

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()