#!/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()