Skip to content

Repository files navigation

🏠🚇 CercaCasa Torino

Trova casa lungo la Linea 1 della metropolitana di Torino — ricerca automatizzata su immobiliare.it, arricchita con parcheggi in tempo reale e indicatori di zona, con tanto di mappa interattiva.

Python Piattaforma Città Uso Manutenzione


📌 Indice


Cosa fa 🧭

Cercare casa vicino alla metro di Torino a mano è lento: bisogna aprire la mappa, controllare a occhio la distanza da ogni fermata, e ripetere la ricerca su immobiliare.it decine di volte. Questo progetto lo fa in automatico:

🔎 Interroga l'API di immobiliare.it una volta per ognuna delle 21 fermate della Linea 1
📏 Calcola la distanza reale (formula haversine) dalla fermata più vicina per ogni annuncio
🧹 Elimina i duplicati tra fermate vicine e applica i tuoi filtri (piano, ascensore, cantina, riscaldamento, aste...)
🅿️ Arricchisce ogni annuncio con parcheggi in tempo reale, servizi e locali di zona
🗺️ Genera una mappa interattiva con filtri, ordinamento e collegamento diretto all'annuncio

Nessuna API key, nessun account, nessun servizio a pagamento: solo endpoint pubblici già usati dai rispettivi siti web.

Come funziona ⚙️

flowchart TD
    subgraph Fonti["Fonti dati pubbliche"]
        IMM[("immobiliare.it<br/>api-next/search-list")]
        OSM[("OpenStreetMap<br/>Overpass API")]
        GTT[("Comune di Torino / 5T<br/>parcheggi live")]
    end

    MS["metro_stations.py<br/>21 fermate Linea 1"] --> CC
    IMM --> IC["immobiliare_client.py"] --> CC["cerca_casa.py<br/>ricerca · dedup · filtri"]
    OSM --> ZI["zone_info.py"]
    GTT --> ZI
    ZI --> CC

    CC --> CSV[("risultati.csv")]
    CC --> MH["mappa_html.py"] --> HTML[("mappa.html<br/>mappa interattiva")]
Loading
  1. metro_stations.py — le 21 fermate della Linea 1, coordinate reali da OpenStreetMap.
  2. immobiliare_client.py — interroga l'API pubblica di immobiliare.it passando centro=lat,lon e raggio=metri (lo stesso parametro di ricerca per prossimità usato dal sito), più i filtri reali disponibili (ascensore, cantina, piano, riscaldamento, stato).
  3. zone_info.py — arricchisce ogni annuncio con parcheggi in struttura (dati live) e indicatori di zona da OpenStreetMap.
  4. cerca_casa.py — orchestratore: unisce i risultati di tutte le fermate, deduplica, applica i filtri lato client (piano esatto, aste, riscaldamento/esposizione dedotti dal testo) e ordina.
  5. mappa_html.py — genera la mappa interattiva autonoma.

Avvio rapido 🚀

pip install -r requirements.txt
python cerca_casa.py

Alla fine dell'esecuzione trovi:

  • i primi 20 risultati stampati a schermo;
  • l'elenco completo in risultati.csv;
  • una mappa interattiva in mappa.html, che si apre da sola nel browser.

Configurazione 🛠️

Tutti i parametri si modificano nel dizionario CONFIG in cima a cerca_casa.py.

Parametro Cosa fa
contratto "vendita" oppure "affitto"
raggio_metri Distanza massima da una fermata metro
prezzo_max / prezzo_min Range di prezzo
locali_min Numero minimo di locali
superficie_min Superficie minima in m²
ascensore / cantina Filtri reali dell'API di immobiliare.it
escludi_aste Esclude le aste giudiziarie, che compaiono occasionalmente anche in una ricerca "vendita" normale (~1 ogni 250 annunci)
piano_min / piano_max L'API espone solo categorie larghe (terra / intermedi / ultimo): lo script pre-filtra con quelle e poi calcola il piano esatto leggendo il testo dell'annuncio (gestisce formati come "3", "da 3 a 4", "interrato (-3), 3")
richiedi_doppia_esposizione La doppia esposizione non è un filtro reale, viene dedotta dal testo — di default è solo informativa (colonna nel CSV), perché è esplicitata solo in una minoranza di annunci
richiedi_riscaldamento_autonomo_o_valvole Riscaldamento autonomo (filtro reale) oppure menzione di "valvole termostatiche" nel testo
preferisci_ristrutturato Non esclude nulla: porta in cima gli annunci "in buone condizioni", riconoscendo anche sinonimi/gergo di settore ("ottimo stato", "rinnovato", "rimesso a nuovo"...), non solo la parola "ristrutturato"
analizza_zona Attiva gli indicatori di parcheggio/zona (vedi sotto). False per una ricerca più veloce
output_csv / output_html Nomi dei file generati
apri_mappa_nel_browser Apre mappa.html in automatico a fine ricerca

💡 Ogni filtro "non reale dell'API" nel codice è documentato con un commento che spiega come viene dedotto e perché ha quel comportamento di default — utile prima di cambiarlo.

Mappa interattiva 🗺️

mappa.html è una pagina autonoma (mappa Leaflet/OpenStreetMap a sinistra, elenco a destra): non serve un server, si apre con un doppio click e i dati sono incorporati direttamente nel file.

  • 🚇 Le fermate della metro sono badge rossi con la "M", nome sempre visibile.
  • 🖱️ Passare il mouse su una scheda della lista centra la mappa sulla casa corrispondente e ne apre il popup.
  • 🔗 Cliccare su una scheda apre direttamente l'annuncio in una nuova scheda (link <a target="_blank"> reale — mai bloccato dal blocco popup del browser).
  • 📍 Cliccare su un marker apre un popup con le info principali e un pulsante "Apri annuncio".

Filtri e ordinamento, tutti lato client

Filtro Ordinamento
Zona Distanza dalla metro
Prezzo massimo Prezzo
Superficie minima Superficie
Distanza massima dalla metro Rilevanza della zona 🆕
Locali minimi
Solo in buone condizioni
Solo riscaldamento autonomo
Solo doppia esposizione
Solo con parcheggio in struttura vicino

I filtri si applicano sia alla lista sia ai marker sulla mappa (i risultati esclusi vengono nascosti), e la vista si adatta automaticamente. L'ordinamento per rilevanza zona usa un punteggio proxy calcolato combinando servizi diurni, parcheggi e vicinanza alla metro entro 300m (formula trasparente in mappa_html.py, funzione punteggioZona — non è una recensione reale, vedi sotto).

Parcheggi e indicatori di zona 🅿️

Indicatore Fonte Tipo
Parcheggio in struttura più vicino + posti liberi Comune di Torino / 5T (opendata.5t.torino.it), aggiornato ogni ~5 minuti ✅ Dato reale e live
Parcheggi pubblici entro 300m OpenStreetMap (Overpass API) ✅ Dato reale
Locali notturni entro 300m OpenStreetMap ⚠️ Indicatore proxy
Servizi diurni entro 300m OpenStreetMap ⚠️ Indicatore proxy
Distanza dalla polizia/carabinieri più vicina OpenStreetMap ⚠️ Indicatore proxy

⚠️ Nota importante: non esiste una fonte pubblica affidabile di recensioni per quartiere a Torino (niente equivalente italiano di un "Niceareas"). Gli indicatori di zona sopra i "dati reali" sono proxy, non un giudizio di sicurezza: molti locali notturni vicini può voler dire zona viva ma potenzialmente rumorosa la sera; molti servizi diurni indica comodità quotidiana; la distanza dalla polizia è solo una distanza, non un indice di criminalità.

I punti OpenStreetMap vengono scaricati una volta e tenuti in cache locale (zone_cache.json) per 7 giorni, per non sovraccaricare il servizio gratuito. Cancella il file per forzare un aggiornamento.

Altri portali (casa.it, idealista.it) 🌐

Non inclusi nell'automazione, per motivi tecnici e non:

  • casa.it — nessuna API JSON pubblica richiamabile direttamente (risultati renderizzati lato server) ed è protetto da DataDome (anti-bot).
  • idealista.it — storicamente molto aggressiva a livello legale contro lo scraping automatizzato dei propri annunci.

Lo script stampa comunque due link generici a questi portali da controllare manualmente come doppio controllo.

Uso responsabile delle API ⚖️

Questo progetto chiama solo endpoint pubblici già usati dai rispettivi siti (lo stesso traffico che genereresti navigando normalmente), con pause tra le richieste paginate. È pensato per uso personale e non intensivo:

  • non ridurre le pause tra le richieste;
  • non lanciare lo script troppo di frequente;
  • rispetta i Termini di Servizio dei siti coinvolti.

Struttura del progetto 📂

CercaCasa/
├── cerca_casa.py         # orchestratore: ricerca, filtri, dedup, output
├── immobiliare_client.py # client per l'API di immobiliare.it
├── metro_stations.py     # 21 fermate della Linea 1 (coordinate OSM)
├── zone_info.py          # parcheggi live + indicatori di zona (OSM/5T)
├── geo_utils.py          # haversine e utility geografiche condivise
├── mappa_html.py         # generatore della mappa interattiva
├── requirements.txt
└── README.md

Disclaimer ⚠️

Progetto personale, non affiliato con immobiliare.it, casa.it, idealista.it, Comune di Torino o 5T. Usa endpoint pubblici reverse-engineered a scopo di ricerca personale della casa: nessuna garanzia di stabilità nel tempo (i siti possono cambiare le proprie API senza preavviso).

About

Trova casa lungo la Linea 1 della metro di Torino: ricerca automatizzata su immobiliare.it con parcheggi live e indicatori di zona, mappa interattiva inclusa.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages