Risolutore di POD (Point of Delivery) tramite servizi GSE diretti
GSE POD Resolver Γ¨ uno strumento per risolvere i codici POD (Point of Delivery) italiani utilizzando direttamente le API GSE (Gestore Servizi Energetici). Il sistema fornisce informazioni complete su:
- Cabina Primaria (Area Convenzionale)
- Fornitore del servizio
- Regioni e Province coinvolte
- Comuni serviti dall'area
- β API Dirette GSE: Nessun scraping, solo chiamate API ufficiali
- β Dual Interface: Modulo Python + Interfaccia Web standalone
- β Dati ISTAT Completi: Mappature complete regioni/province italiane
- β Query Spaziali: Utilizzo di geometrie per identificare comuni
- β
Zero Dependencies Esterne: Solo
requests
per HTTP - β Context Manager: Gestione automatica delle risorse
- β Logging Completo: Tracciamento dettagliato delle operazioni
- Python 3.8+
- Accesso internet per le API GSE
# Clone del repository
git clone https://github.com/username/gse-pod-resolver.git
cd gse-pod-resolver
# Creazione virtual environment
python -m venv venv
# Attivazione (Windows)
venv\Scripts\activate
# Attivazione (Linux/Mac)
source venv/bin/activate
# Installazione dipendenze
pip install -r requirements.txt
from gse_pod_resolver import GSEPodResolver, PODResult
# Metodo 1: Utilizzo diretto
resolver = GSEPodResolver(timeout=45)
result = resolver.resolve_pod("IT001E12345678")
print(f"Fornitore: {result.fornitore}")
resolver.close()
# Metodo 2: Context manager (raccomandato)
with GSEPodResolver() as resolver:
result = resolver.resolve_pod("IT001E12345678")
print(f"Regioni: {result.regioni}")
print(f"Province: {result.province}")
print(f"Comuni: {result.comuni}")
# Metodo 3: Accesso diretto alle mappe ISTAT
resolver = GSEPodResolver()
print(f"Regione 5: {resolver.regioni_map[5]}") # "Veneto"
print(f"Provincia 27: {resolver.province_map[27]}") # "Venezia"
resolver.close()
- Apri
pod_resolver_web.html
in qualsiasi browser moderno - Inserisci il codice POD (es:
IT001E12345678
) - Clicca "Risolvi POD"
- Visualizza i risultati in tempo reale
# Test singolo POD
python gse_pod_resolver.py IT001E12345678
# Output di esempio
π GSE POD Resolver - Test
==================================================
π Test POD: IT001E12345678
------------------------------
β
POD: IT001E12345678
β
Cabina Primaria: AC001E00001
β
Fornitore: Fornitore Esempio S.p.A.
β
Regioni: Regione Esempio
β
Province: Provincia Esempio 1, Provincia Esempio 2
β
Comuni: Comune Esempio 1, Comune Esempio 2, Comune Esempio 3
- Endpoint:
POD_AC/FeatureServer/12
- Scopo: Trova l'Area Convenzionale per un POD
- Campi:
COD_POD
,COD_AC
- Endpoint:
Aree_Convenzionali/FeatureServer/0
- Scopo: Ottiene geometria e informazioni AC
- Campi:
COD_AC
,RAG_SOC
(Fornitore),geometry
- Endpoint:
Comuni/FeatureServer/10
- Scopo: Trova comuni che intersecano l'AC
- Campi:
COD_REG
,COD_PROV
,COMUNE
,PRO_COM_T
@dataclass
class PODResult:
pod: str # Codice POD originale
cabina_primaria: str # Codice AC
fornitore: str # Nome fornitore
regioni: List[str] # Lista regioni
province: List[str] # Lista province
comuni: List[str] # Lista comuni
- regioni_map: Codice β Nome regione (20 regioni)
- province_map: Codice β Nome provincia (101 province)
POD | Cabina | Fornitore | Regione | Provincia | Comuni |
---|---|---|---|---|---|
IT001E12345678 |
AC001E00001 |
Fornitore Esempio 1 | Regione Esempio 1 | Provincia Esempio 1, Provincia Esempio 2 | 5 comuni |
IT002E98765432 |
AC002E00002 |
Fornitore Esempio 2 | Regione Esempio 2 | Provincia Esempio 3 | 3 comuni |
IT003E55556666 |
AC003E00003 |
Fornitore Esempio 3 | Regione Esempio 3 | Provincia Esempio 4, Provincia Esempio 5 | 7 comuni |
try:
with GSEPodResolver() as resolver:
result = resolver.resolve_pod("IT001E12345678")
print(f"β
POD: {result.pod}")
except ValueError as e:
print(f"β POD non valido: {e}")
except RuntimeError as e:
print(f"β Errore di risoluzione: {e}")
## π§ͺ Testing
```bash
# Test rapido
python gse_pod_resolver.py IT001E12345678
# Test multipli
python gse_pod_resolver.py IT002E98765432
python gse_pod_resolver.py IT003E55556666
gse-pod-resolver/
βββ gse_pod_resolver.py # π Modulo Python principale
βββ pod_resolver_web.html # π Interfaccia web standalone
βββ requirements.txt # π¦ Dipendenze Python
βββ README.md # π Documentazione
βββ LICENSE # βοΈ Licenza
βββ .gitignore # π« File da ignorare
βββ venv/ # π Virtual environment
- β Validazione Input: Regex per formato POD
- β Escape HTML: Prevenzione XSS
- β Timeout Configurabili: Protezione da hanging
- β Gestione Sessioni: Riutilizzo efficiente HTTP
L'interfaccia web Γ¨ ottimizzata per:
- π₯οΈ Desktop (1200px+)
- π± Tablet (768px-1199px)
- π± Mobile (<768px)
- Fork del repository
- Creazione branch feature (
git checkout -b feature/AmazingFeature
) - Commit delle modifiche (
git commit -m 'Add AmazingFeature'
) - Push del branch (
git push origin feature/AmazingFeature
) - Apertura Pull Request
Distribuito sotto licenza MIT. Vedi LICENSE
per maggiori informazioni.
- π Issues: GitHub Issues
- π§ Email: support@example.com
- π Wiki: Documentazione completa
- GSE per le API pubbliche
- ISTAT per i dati geografici
- ComunitΓ Python per le librerie
β Se questo progetto ti Γ¨ utile, considera di dargli una stella!