diMLOrb 0.0.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.8.7@diMLOrb
data/Gemfile.lock ADDED
@@ -0,0 +1,30 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ git (1.2.5)
6
+ jeweler (1.5.2)
7
+ bundler (~> 1.0.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ nokogiri (1.5.0)
11
+ rake (0.9.2)
12
+ rcov (0.9.9)
13
+ rspec (2.3.0)
14
+ rspec-core (~> 2.3.0)
15
+ rspec-expectations (~> 2.3.0)
16
+ rspec-mocks (~> 2.3.0)
17
+ rspec-core (2.3.1)
18
+ rspec-expectations (2.3.0)
19
+ diff-lcs (~> 1.1.2)
20
+ rspec-mocks (2.3.0)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ bundler (~> 1.0.0)
27
+ jeweler (~> 1.5.2)
28
+ nokogiri
29
+ rcov
30
+ rspec (~> 2.3.0)
data/README.rdoc CHANGED
@@ -1,6 +1,23 @@
1
1
  = diMLOrb
2
2
 
3
- Description goes here.
3
+ *diMLOrb* is a gem that helps you programmatically grab the timetables of the Metro Ligero Oeste (MLO) in the Madrid Community.
4
+
5
+ *diMLOrb* is mainly web scraping the MLO official website (diMLO): http://www.dimlo.es/Informate/calc.aspx
6
+
7
+ I just did this little tool in order to have a single click app in my iphone to check the timetable of the train I have to get everyday. For that purpose I created http://dimloya.heroku.com/ which uses this gem.
8
+
9
+ Currently my little website _diMLOya_ supports only 2 stations of all the network. If someone is ever interested in having support for the whole nextwork I would be more than happy to finish the job, until then I'll leave it like that (I'm a lazy guy :P)
10
+
11
+ Note that this gems depends on the diMLO website which oftenly tends to be down or not responsive.
12
+
13
+
14
+ = Example of Usage
15
+ require 'diMLOrb'
16
+ #say I want to go from Pozuelo Oeste station to Colonia Jardín station
17
+ d = DiMLOrb::DiMLOrb.new(:PozueloOeste, :ColoniaJardin)
18
+ d.proximo # => (in minutes) amount of time first train will take to get to Pozuelo Oeste
19
+ d.siguiente # => (in minutes) amount of time second train will take to get to Pozuelo Oeste
20
+ d.duracion # => (in minutes) amount of time it will take the train to get from Pozuelo Oeste to Colonia Jardin
4
21
 
5
22
  == Contributing to diMLOrb
6
23
 
data/Rakefile CHANGED
@@ -16,7 +16,7 @@ Jeweler::Tasks.new do |gem|
16
16
  gem.homepage = "http://github.com/ariera/diMLOrb"
17
17
  gem.license = "MIT"
18
18
  gem.summary = %Q{Ruby API for the diMLO web timetable service}
19
- gem.description = %Q{This gem acts as an API to the MLO (Metro Ligero Oeste) public transportation of Madrid, allowing the user get ETA of the next 2 trains}
19
+ gem.description = %Q{This gem acts as an API to the MLO (Metro Ligero Oeste) public transportation of Madrid, allowing the user get ETAs of the next 2 trains}
20
20
  gem.email = "ariera@gmail.com"
21
21
  gem.authors = ["ariera"]
22
22
  # Include your dependencies below. Runtime dependencies are required when using your gem,
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.0
1
+ 0.1.1
data/diMLOrb.gemspec ADDED
@@ -0,0 +1,75 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{diMLOrb}
8
+ s.version = "0.1.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["ariera"]
12
+ s.date = %q{2011-07-17}
13
+ s.description = %q{This gem acts as an API to the MLO (Metro Ligero Oeste) public transportation of Madrid, allowing the user get ETAs of the next 2 trains}
14
+ s.email = %q{ariera@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ ".rvmrc",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "diMLOrb.gemspec",
30
+ "lib/diMLOrb.rb",
31
+ "lib/stations.rb",
32
+ "spec/diMLOrb_spec.rb",
33
+ "spec/spec_helper.rb"
34
+ ]
35
+ s.homepage = %q{http://github.com/ariera/diMLOrb}
36
+ s.licenses = ["MIT"]
37
+ s.require_paths = ["lib"]
38
+ s.rubygems_version = %q{1.6.2}
39
+ s.summary = %q{Ruby API for the diMLO web timetable service}
40
+ s.test_files = [
41
+ "spec/diMLOrb_spec.rb",
42
+ "spec/spec_helper.rb"
43
+ ]
44
+
45
+ if s.respond_to? :specification_version then
46
+ s.specification_version = 3
47
+
48
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
50
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
51
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
52
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
53
+ s.add_development_dependency(%q<rcov>, [">= 0"])
54
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
55
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
56
+ else
57
+ s.add_dependency(%q<nokogiri>, [">= 0"])
58
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
59
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
61
+ s.add_dependency(%q<rcov>, [">= 0"])
62
+ s.add_dependency(%q<nokogiri>, [">= 0"])
63
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
64
+ end
65
+ else
66
+ s.add_dependency(%q<nokogiri>, [">= 0"])
67
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
68
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
69
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
70
+ s.add_dependency(%q<rcov>, [">= 0"])
71
+ s.add_dependency(%q<nokogiri>, [">= 0"])
72
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
73
+ end
74
+ end
75
+
data/lib/diMLOrb.rb CHANGED
@@ -2,19 +2,28 @@
2
2
  require 'net/http'
3
3
  require 'uri'
4
4
  require 'nokogiri'
5
+ require 'stations'
5
6
 
6
7
  module DiMLOrb
7
8
  class DiMLOrb
8
- STATIONS = {:colonia_jardin => "Colonia Jardín|ECJ|ML2", :somosaguas_sur => "Somosaguas Sur|SSU|ML2"}
9
+ #STATIONS = {:colonia_jardin => "Colonia Jardín|ECJ|ML2", :somosaguas_sur => "Somosaguas Sur|SSU|ML2"}
9
10
  attr_accessor :uri, :http, :html, :viewstate, :eventvalidation, :proximo, :siguiente, :cookie, :data, :duracion, :from, :to
10
- def initialize(from = STATIONS[:colonia_jardin], to = STATIONS[:somosaguas_sur])
11
- @from, @to = from, to
11
+
12
+ # DiMLOrb.new receives the Metro Ligero Oeste station you are going from and your desired destination
13
+ # it returns you an object with mainly 3 attributes:
14
+ # => proximo = next train arrives in X minutes
15
+ # => siguiente = the following train arrives in Y minutes
16
+ # => duraction = how long should it take to go from one station to the other
17
+ def initialize(from = :ColoniaJardin, to = :SomosaguasSur)
18
+ @from, @to = STATIONS[from], STATIONS[to]
12
19
  @uri = URI.parse("http://www.dimlo.es/Informate/calc.aspx")
13
20
  @http = Net::HTTP.new(@uri.host, @uri.port)
14
21
  get_validations
15
22
  get_times
16
23
  end
17
-
24
+
25
+ # diMLO website uses cookies and token validations (aka protect from forgery) in its forms
26
+ # *get_validations* grabs this values, namely: cookie, viewstate and eventvalidation
18
27
  def get_validations
19
28
  resp = @http.get(@uri.path)
20
29
  raise "HTTP Error: #{resp.code}" if resp.code.to_i != 200
@@ -25,6 +34,8 @@ module DiMLOrb
25
34
  @eventvalidation = doc.css('#__EVENTVALIDATION').attr('value').value
26
35
  end
27
36
 
37
+ # *get_times* asks diMLO website for the next metro timetable and parses the html
38
+ # to grab the values of _proximo_, _siguiente_ and _duracion_
28
39
  def get_times
29
40
  #@html = Net::HTTP.post_form(@uri, options)
30
41
  req = Net::HTTP::Post.new(@uri.request_uri)
@@ -37,6 +48,9 @@ module DiMLOrb
37
48
  @duracion = doc.css('#DuracionTXT').inner_text
38
49
  end
39
50
 
51
+ protected
52
+
53
+ # options needed in the form to get the timetables
40
54
  def options
41
55
  {
42
56
  'origenDDL' => @from,
@@ -47,6 +61,8 @@ module DiMLOrb
47
61
  'btnCalcular.y' =>'5'
48
62
  }
49
63
  end
64
+
65
+ # headers with the validation tokens, etc, needed to ask for the timetables
50
66
  def headers
51
67
  {
52
68
  'Cookie' => @cookie,
@@ -61,16 +77,17 @@ module DiMLOrb
61
77
  'Referer' => 'http://www.dimlo.es/Informate/calc.aspx'}
62
78
  end
63
79
 
80
+ # debugging function
64
81
  def to_file(file_name = 'dimlo.html')
65
82
  f = File.new(file_name, "w+")
66
83
  f.puts @html
67
84
  `open #{file_name}`
68
85
  end
69
-
86
+ # debugging function
70
87
  def from
71
88
  @from.split("|").first
72
89
  end
73
-
90
+ # debugging function
74
91
  def to
75
92
  @to.split("|").first
76
93
  end
data/lib/stations.rb ADDED
@@ -0,0 +1,34 @@
1
+ module DiMLOrb
2
+
3
+ STATIONS = {
4
+ :ColoniaJardin=>"Colonia Jardín|ECJ|ML2",
5
+ :PradoDeLaVega=>"Prado de la Vega|PVE|ML2",
6
+ :ColoniaDeLosAngeles=>"Colonia de Los Ángeles|CLA|ML2",
7
+ :PradoDelRey=>"Prado del Rey|PRE|ML2",
8
+ :SomosaguasSur=>"Somosaguas Sur|SSU|ML2",
9
+ :SomosaguasCentro=>"Somosaguas Centro|SCE|ML2",
10
+ :PozueloOeste=>"Pozuelo Oeste|PZO|ML2",
11
+ :Belgica=>"Bélgica|BLG|ML2",
12
+ :DosCastillas=>"Dos Castillas|DCS|ML2",
13
+ :CampusDeSomosaguas=>"Campus de Somosaguas|CSO|ML2",
14
+ :AvenidaDeEuropa=>"Avenida de Europa|AEU|ML2",
15
+ :Berna=>"Berna|BRN|ML2",
16
+ :EstacionDeAravaca=>"Estación de Aravaca|EAV|ML2",
17
+ :PuertaDeBoadilla=>"Puerta de Boadilla|PBO|ML3",
18
+ :InfanteDonLuis=>"Infante Don Luis|IDL|ML3",
19
+ :SigloXXI=>"Siglo XXI|SIX|ML3",
20
+ :NuevoMundo=>"Nuevo Mundo|NVM|ML3",
21
+ :BoadillaCentro=>"Boadilla Centro|BOC|ML3",
22
+ :FerialDeBoadilla=>"Ferial de Boadilla|FBO|ML3",
23
+ :Cantabria=>"Cantabria|CTB|ML3",
24
+ :PradoDelEspino=>"Prado del Espino|PES|ML3",
25
+ :VentorroDelCano=>"Ventorro del Cano|VCA|ML3",
26
+ :Monteprincipe=>"Montepríncipe|MNT|ML3",
27
+ :Retamares=>"Retamares|RTM|ML3",
28
+ :Cocheras=>"Cocheras|MLO|ML3",
29
+ :CiudadDelCine=>"Ciudad del Cine|CCI|ML3",
30
+ :JoseIsbert=>"José Isbert|JIS|ML3",
31
+ :CiudadDeLaImagen=>"Ciudad de la Imagen|CIM|ML3"
32
+ }
33
+
34
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diMLOrb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
- - 0
10
- version: 0.0.0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - ariera
@@ -124,7 +124,7 @@ dependencies:
124
124
  version: 2.3.0
125
125
  name: rspec
126
126
  version_requirements: *id007
127
- description: This gem acts as an API to the MLO (Metro Ligero Oeste) public transportation of Madrid, allowing the user get ETA of the next 2 trains
127
+ description: This gem acts as an API to the MLO (Metro Ligero Oeste) public transportation of Madrid, allowing the user get ETAs of the next 2 trains
128
128
  email: ariera@gmail.com
129
129
  executables: []
130
130
 
@@ -136,12 +136,16 @@ extra_rdoc_files:
136
136
  files:
137
137
  - .document
138
138
  - .rspec
139
+ - .rvmrc
139
140
  - Gemfile
141
+ - Gemfile.lock
140
142
  - LICENSE.txt
141
143
  - README.rdoc
142
144
  - Rakefile
143
145
  - VERSION
146
+ - diMLOrb.gemspec
144
147
  - lib/diMLOrb.rb
148
+ - lib/stations.rb
145
149
  - spec/diMLOrb_spec.rb
146
150
  - spec/spec_helper.rb
147
151
  has_rdoc: true