openlamb/stazioni.py

71 lines
2.4 KiB
Python
Executable File

#!/usr/bin/python3
import os.path
import tabulate
import pandas as pd
import requests
class SocrataClient:
def __init__(self, domain, app_token=None):
self.domain = domain
self.app_token = app_token
def get_data(self, resource_id, query=None, limit=None):
base_url = f"https://{self.domain}/resource/{resource_id}.json"
params = {'$limit': limit} if limit else {}
if query:
params['$query'] = query
headers = {}
if self.app_token:
headers['X-App-Token'] = self.app_token
response = requests.get(base_url, params=params, headers=headers)
if response.status_code == 200:
data = response.json()
return data
else:
print(f"Error {response.status_code}: {response.text}")
return []
def get_dataframe(self, resource_id, query=None, limit=None):
data = self.get_data(resource_id, query=query, limit=limit)
df = pd.DataFrame(data)
return df
def get_stazioni(offline=False):
if offline:
stazioni = pd.read_csv("stazioni.csv")
stazioni_df = pd.DataFrame.from_records(stazioni)
stazioni_df.drop(columns=["Storico", "Idstazione", "Utm_Nord", "UTM_Est", "lat", "lng", "location",
"Limiti amministrativi 2014 delle province di Regione Lombardia",
"Limiti amministrativi 2015 delle province di Regione Lombardia"], inplace=True)
stazioni_df.columns = [x.lower() for x in stazioni_df.columns]
else:
client = SocrataClient("www.dati.lombardia.it", None)
stazioni = client.get_data("ib47-atvt")
stazioni_df = pd.DataFrame.from_records(stazioni)
stazioni_df.drop(columns=[":@computed_region_6hky_swhk", ":@computed_region_ttgh_9sm5", "utm_est",
"utm_nord", "storico", "idstazione", "lat", "lng", "location"], inplace=True)
stazioni_df["datastart"] = pd.to_datetime(stazioni_df["datastart"])
stazioni_df["datastop"] = pd.to_datetime(stazioni_df["datastop"])
return stazioni_df
def print_stazioni():
pd.set_option('display.max_rows', None)
if os.path.exists("stazioni.csv"):
stazioni = get_stazioni(offline=True)
else:
stazioni = get_stazioni()
print(tabulate.tabulate(stazioni, headers='keys', tablefmt='simple'))
if __name__ == '__main__':
print_stazioni()