71 lines
2.4 KiB
Python
Executable File
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()
|