Mapeando a mobilidade urbana! Nesta atividade, construí um mapa interativo com as paradas de uma linha de ônibus e a posição em tempo real dos veículos.
import requestsimport foliumimport osfrom dotenv import load_dotenvload_dotenv()TOKEN = os.getenv("TOKEN_SPTRANS")URL_BASE ="https://api.olhovivo.sptrans.com.br/v2.1"ifnot TOKEN:raiseValueError("❌ Token SPTrans não encontrado.")# Cria uma sessão persistentesess = requests.Session()# 1️⃣ Autenticaçãologin_url =f"{URL_BASE}/Login/Autenticar?token={TOKEN}"auth = sess.post(login_url)if auth.status_code !=200or auth.json() isnotTrue:raiseException(f"❌ Falha na autenticação ({auth.status_code}): {auth.text}")print("✅ Autenticação bem-sucedida!")# 2️⃣ Buscar a linhanumero_linha ="875A-10"busca_linha_url =f"{URL_BASE}/Linha/Buscar?termosBusca={numero_linha}"resp_linha = sess.get(busca_linha_url)if resp_linha.status_code !=200ornot resp_linha.json():raiseException(f"❌ Linha não encontrada. Status: {resp_linha.status_code}")linha = resp_linha.json()[0]codigo_linha = linha["cl"]nome_linha =f"{linha['lt']} - {linha['tp']}"print(f"🚍 Linha encontrada: {nome_linha} (Código {codigo_linha})")# 3️⃣ Buscar paradasparadas_url =f"{URL_BASE}/Parada/BuscarParadasPorLinha?codigoLinha={codigo_linha}"resp_paradas = sess.get(paradas_url)paradas = resp_paradas.json()print(f"📍 {len(paradas)} paradas encontradas.")lats = [p["py"] for p in paradas]lons = [p["px"] for p in paradas]centro = (sum(lats)/len(lats), sum(lons)/len(lons))mapa = folium.Map(location=centro, zoom_start=12)for p in paradas: folium.Marker( location=(p["py"], p["px"]), popup=p["np"], icon=folium.Icon(color="blue") ).add_to(mapa)# 4️⃣ Posições em tempo realposicao_url =f"{URL_BASE}/Posicao/Linha?codigoLinha={codigo_linha}"resp_posicao = sess.get(posicao_url)dados = resp_posicao.json()veiculos = dados.get("vs", [])print(f"🚦 {len(veiculos)} veículos em tempo real.")for v in veiculos: folium.Marker( location=(v["py"], v["px"]), popup=f"Veículo: {v['p']}", icon=folium.Icon(color="red") ).add_to(mapa)mapa.save("mapa_875A10.html")print("🗺️ Mapa salvo como mapa_875A10.html")
✅ Autenticação bem-sucedida!
🚍 Linha encontrada: 875A - PERDIZES (Código 609)
📍 7 paradas encontradas.
🚦 0 veículos em tempo real.
🗺️ Mapa salvo como mapa_875A10.html