Skip to content

cabelotaina/floripabybus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pegar onibus em floripa é dificil. Se o sistema online ao menos fosse bom...
Sendo assim resolvi me dedicar a aprender algo de R e de raspagem de site por meio da biblioteca XML 
e da biblioteca XPath.

Atualmente tenho quase todas as informações. Falta apenas uma, os dados de legenda, por exemplo quando um onibus é meia viagem, ou vai recolher, se ele possui assento para cadeirante, ou cego com cão guia e por ai vai.

Para ver o material usando o R:

Instale o R na sua maquina "debian-like" ou outras e em seguida instale a biblioteca XML:
ps.: você pode encontrar o R nós repositórios do CRAN, assim como infos para outras distros.

# em algum sh faça

sudo apt-get install r-base # instale o R

# rode o R na pasta horarios, ali esta o workspace

install.packages("XML") # instale a libXML
library(XML) #carregue a libXML

# Agora carregue os dois algoritimos de raspagem dos arquivos

source("scrap_bus_fields.R")
source("scrap_bus_list.R")

# os dois algoritimos recebem um xpath, o primeiro retorna uma lista com informação de um onibus em cada linha, o segundo retorna uma lista de listas com cada lista representando por exemplo horarios.

Com as linhas abaixo consigo obter a maior parte das informações do onibus menos, horario itinerario e referencias:

linhas = scrap_fields("//td[2]/h1/text()")
tarifa_cartao = scrap_fields("//div[4]/table[1]/tr[2]/td[2]/text()")
tarifa_dinheiro = scrap_fields("//tr[2]/td[4]/text()")
tempo_medio_ida = scrap_fields("//tr[3]/td[2]/text()")
tempo_medio_volta = scrap_fields("//tr[3]/td[4]/text()")
extensao_ida = scrap_fields("//tr[4]/td[2]/text()")
extensao_volta = scrap_fields("//tr[4]/td[4]/text()")
notas_da_linha = scrap_fields("//tr[5]/td[2]/text()")

Essas consigo por meio do outro algoritimo que tem uma diferreça minima:

dia_da_semana.A = scrap_fields("//table[3]/tr[1]/td[1]/h1/text()")
horarios.A = scrap_list("//table[4]/tr[*]/td[*]/p/text()")

Isso é feito ate a letra F (6 horarios - mais ou menos - seg-sex, sab, dom) 
Para tal basta fazer 6 iterações com um incremento de table[n+2]

#########################################################################################
For install new gems:

* bundle install --path vendor/bundle

List of commands to generate new models:

* rails g model place name:string
* install gem acts_as_list
* rails g migration AddPositionToPlace position:integer
* rails g model reference
* rails g model route
* set up the 3 new models accordly of page https://github.com/swanandp/acts_as_list

See help for gem acts_as_list 

* https://github.com/swanandp/acts_as_list/blob/master/lib/acts_as_list/active_record/acts/list.rb

About

App for bus time of florianopolis

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published