spbus 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/example.rb +14 -18
- data/lib/spbus/bus.rb +2 -3
- data/lib/spbus/request.rb +31 -0
- data/lib/spbus/route.rb +6 -40
- data/lib/spbus/scrapers/locations.rb +48 -0
- data/lib/spbus/scrapers/route_details.rb +56 -0
- data/lib/spbus/scrapers/routes.rb +74 -0
- data/lib/spbus/version.rb +1 -1
- data/lib/spbus.rb +23 -5
- data/spbus.gemspec +1 -1
- data/spec/bus_spec.rb +12 -0
- data/spec/cassettes/auth_request.yml +278 -0
- data/spec/cassettes/{SpBus_Crawler/_fetch_routes/returns_all_bus_routes.yml → bus_routes.yml} +26269 -26401
- data/spec/cassettes/buses_locations.yml +276 -0
- data/spec/cassettes/invalid_route_detail.yml +276 -0
- data/spec/cassettes/normal_request.yml +136 -0
- data/spec/cassettes/normal_route_detail.yml +278 -0
- data/spec/cassettes/one_way_route_detail.yml +278 -0
- data/spec/request_spec.rb +39 -0
- data/spec/route_spec.rb +23 -32
- data/spec/scrapers/locations_scraper_spec.rb +24 -0
- data/spec/scrapers/route_details_scraper_spec.rb +68 -0
- data/spec/scrapers/routes_scraper_spec.rb +30 -0
- data/spec/spbus_spec.rb +40 -0
- data/spec/spec_helper.rb +1 -1
- metadata +35 -25
- data/lib/spbus/crawler.rb +0 -52
- data/lib/spbus/locations.rb +0 -37
- data/spec/cassettes/SpBus_Crawler/_fetch_routes/returns_creates_a_Route_object_for_every_found_route.yml +0 -32809
- data/spec/cassettes/SpBus_Locations/_fetch_locations/retrieves_all_buses_locations.yml +0 -34
- data/spec/cassettes/SpBus_Route/_fetch_details/sets_destination_attribute.yml +0 -36
- data/spec/cassettes/SpBus_Route/_fetch_details/sets_origin_attribute.yml +0 -36
- data/spec/cassettes/SpBus_Route/_fetch_details/sets_route_position_codes.yml +0 -36
- data/spec/cassettes/SpBus_Route/_to_h/returns_a_hash.yml +0 -36
- data/spec/crawler_spec.rb +0 -20
- data/spec/locations_spec.rb +0 -18
data/lib/spbus/crawler.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module SpBus
|
4
|
-
class Crawler
|
5
|
-
|
6
|
-
BUS_ROUTES_URL = "http://200.99.150.170/PlanOperWeb/linhaselecionada.asp"
|
7
|
-
RESPONSE_VALIDATOR = /Foram encontrados vários resultados para a sua busca/
|
8
|
-
ROUTE_NUMBER_MATCHER = /Linha: (?<number>[a-z0-9]+[-][0-9a-z]+)/iu
|
9
|
-
ROUTE_NUMBER_PATH = "#contentScroll ul li .linkLinha:first-child"
|
10
|
-
|
11
|
-
attr_reader :routes
|
12
|
-
|
13
|
-
def initialize
|
14
|
-
@routes = []
|
15
|
-
end
|
16
|
-
|
17
|
-
def fetch_routes
|
18
|
-
sptrans_request
|
19
|
-
|
20
|
-
raise InconsistentResponse unless valid_response?
|
21
|
-
|
22
|
-
@response.css(ROUTE_NUMBER_PATH).each do |el|
|
23
|
-
create_route_from_raw(el.content)
|
24
|
-
end
|
25
|
-
|
26
|
-
true
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def sptrans_request
|
32
|
-
@response = Nokogiri::HTML(RestClient.get(BUS_ROUTES_URL))
|
33
|
-
end
|
34
|
-
|
35
|
-
def valid_response?
|
36
|
-
@response.text =~ RESPONSE_VALIDATOR
|
37
|
-
end
|
38
|
-
|
39
|
-
def clean_raw_route(raw)
|
40
|
-
raw.strip.gsub("\u00A0", " ")
|
41
|
-
end
|
42
|
-
|
43
|
-
def create_route_from_raw(str)
|
44
|
-
match = ROUTE_NUMBER_MATCHER.match(clean_raw_route(str))
|
45
|
-
|
46
|
-
if match
|
47
|
-
@routes << Route.new(match[:number])
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
data/lib/spbus/locations.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module SpBus
|
2
|
-
class Locations
|
3
|
-
BUSES_LOCATIONS = "http://200.189.189.54/InternetServices/PosicaoLinha"
|
4
|
-
|
5
|
-
attr_reader :buses
|
6
|
-
|
7
|
-
def initialize(route)
|
8
|
-
@route = route
|
9
|
-
end
|
10
|
-
|
11
|
-
def fetch_locations
|
12
|
-
sptrans_request
|
13
|
-
|
14
|
-
raise InconsistentResponse unless valid_response?
|
15
|
-
|
16
|
-
@buses = @response[:vs].collect do |hash|
|
17
|
-
SpBus::Bus.new(lat: hash[:py], long: hash[:px])
|
18
|
-
end
|
19
|
-
|
20
|
-
true
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def sptrans_request
|
26
|
-
@response = JSON.parse(
|
27
|
-
RestClient.get(BUSES_LOCATIONS, params: { codigoLinha: @route }),
|
28
|
-
symbolize_names: true
|
29
|
-
)[:PosicaoLinhaResult]
|
30
|
-
end
|
31
|
-
|
32
|
-
def valid_response?
|
33
|
-
!@response.nil? && !@response[:hr].nil? && !@response[:hr].empty?
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|