Skip to content

Instantly share code, notes, and snippets.

@danilolc
Created November 16, 2017 21:42
Show Gist options
  • Save danilolc/e194bb7eebd9dc479da6d7475bab2cbf to your computer and use it in GitHub Desktop.
Save danilolc/e194bb7eebd9dc479da6d7475bab2cbf to your computer and use it in GitHub Desktop.
Este código recebe uma linha de ônibus de Belo Horizonte e retorna as estações e as previsões de chegada em cada estação.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Danilo Lemos - 2017
#bhbusget.py
#---------------------
#Este código é livre para ser compartilhado ou alterado, sem nenhuma restrição.
#Ele pega os dados usados no aplicativo de horário de ônibus da prefeitura de Belo Horizonte.
#Ele aceita como entrada o número de uma linha de ônibus e ordena o horário em cada estação.
#---------------------
#ex:
# $ py bhbusget.py 68
# $
# $ Estacao Vilarinho
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
# $ ESTACAO CRISTIANO GUIMARAES
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
# $ ESTACAO PLANALTO
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
# $ ESTACAO SAO JOAO BATISTA
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
# $ ESTACAO LAGOA DO NADO
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
# $ ESTACAO MONTESE
# $ 68 - SAÍDA: 19:33;
# $ 68 - SAÍDA: 19:53;
import requests
import json
from collections import namedtuple
import sys
#Transforma o json recebido em namedtruple
def decode(data):
return json.loads(data, object_hook=lambda d: namedtuple('X', d.keys())(*d.values()))
#Procura o código da linha solicitada na lista de linhas
def getlcode(linha):
data = requests.get('http://mobile-l.sitbus.com.br:6060/siumobile-ws-v01/rest/ws/buscarLinhas/retornoJSONListaLinhas')
data = data.content.replace('retornoJSONListaLinhas(', '')[:-1]
data = data.replace('["', '[')
data = data.replace('"]', ']')
data = data.replace("'", '"')
data = decode(data)
for x in range(0, len(data[0])):
if data[0][x].sgl==str(linha):
return data[0][x].cod
return 0
#Retorna as previsões de uma dada estação
def previsoes(cod):
prev = requests.get('http://mobile-l.sitbus.com.br:6060/siumobile-ws-v01/rest/ws/buscarPrevisoes/'+str(cod)+'/0/retornoJSON')
prev = prev.content.replace('retornoJSON(', '')[:-1]
prev = decode(prev)
return prev.previsoes
#Retorna a lista de estações de uma linha
def estacoes(linha):
cod = getlcode(linha)
data = requests.get('http://mobile-l.sitbus.com.br:6060/siumobile-ws-v01/rest/ws/buscarParadasPorLinha/'+str(cod)+'/0/retornoJSON')
data = data.content.replace('retornoJSON(', '')[:-1]
data = decode(data)
return data[0]
#Lista as previsões de cada estação da linha
def list(linha):
est = estacoes(linha)
for x in range(0, len(est)):
print(est[x].end)
prev_est = previsoes(est[x].cod)
for y in range(0, len(prev_est)):
if prev_est[y].sgLin==str(linha):
print(prev_est[y].sgLin + ' - '+ prev_est[y].prev + '; ')
if __name__ == '__main__':
list(sys.argv[1])
@guilhermerodrigues680
Copy link

Muito obrigado por ter disponibilizado!!
Eu vou implementar utilizando o Node.js e o Angular em um estudo pessoal.
Qualquer novidade eu compartilharei com você!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment