Created
November 16, 2017 21:42
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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ê!