gares 2.0.0.pre.dev2 → 2.0.0.pre.dev3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a2068a77f7242decc42538c4b351e9f7310ae98
4
- data.tar.gz: 75bea0e0b426c6bc6a690d15277b1c97dbb34e9f
3
+ metadata.gz: a13a56ca07337138e8c27caaeef89cd4ef6f4bf5
4
+ data.tar.gz: 0f0bd8cc2897185e17a06d0612df95dcb600db40
5
5
  SHA512:
6
- metadata.gz: b9b23cdf24b6cf1c8479f677ebc209f16247fb4842d7cb4c992c6198e809cbda2729c791397e200b065d4136c42d985299b08f1ace78e4543ec54aebcc6724a8
7
- data.tar.gz: 2222356832680a874edfaa2708ee832ecb6d3c04392a0262d55d4c0797e30827aca3639cf9c51209379079b336c1f1341c2f6409a2c833c08479de7e73d30ee1
6
+ metadata.gz: 8e552311ca4763dd804e95504c6e07876a51937e535afaf103424025ffee1b18d4a9f43b2c45aad32ffe2cc19a4bf1686642979097937d0b4b93cb56d49171b0
7
+ data.tar.gz: a91a6217481c551191637c6d38c0d8dd8b9304eaa8a57d1ab2422bbe0499e9deefa322f81269887802557ec5ff8f666218db0608a9f7e98afeb63b5ff1fe59ea
data/Guardfile CHANGED
@@ -1,6 +1,6 @@
1
1
  group 'gem' do
2
2
  guard 'rspec', :cmd => "bundle exec rspec", :all_on_start => false, :all_after_pass => false, :failed_mode => :focus do
3
3
  watch(%r{^spec/.+_spec\.rb$})
4
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/gares/#{m[1]}_spec.rb" }
4
+ watch(%r{^lib/gares/(.+)\.rb$}) { |m| "spec/gares/#{m[1]}_spec.rb" }
5
5
  end
6
6
  end
data/lib/gares/train.rb CHANGED
@@ -42,19 +42,41 @@ module Gares
42
42
 
43
43
  private
44
44
 
45
+ def itinerary_available?
46
+ document.css('ul.itinerary-details').size > 0
47
+ end
48
+
45
49
  # Returns a new Nokogiri document for parsing.
46
50
  def document
47
- @document ||= Nokogiri::HTML(self.class.request_sncf(@number, @date))
51
+ if !@document
52
+ @document = Nokogiri::HTML(self.class.request_sncf(@number, @date))
53
+ if !itinerary_available?
54
+ @document = Nokogiri::HTML(self.class.request_sncf_itinerary(0))
55
+ end
56
+ end
57
+ @document
48
58
  end
49
59
 
50
60
  def self.request_sncf(number, date)
51
61
  uri = URI.parse("http://www.sncf.com/sncf/train")
52
62
  response = Net::HTTP.post_form(uri, {"numeroTrain" => number, "date" => date.strftime("%d/%m/%Y")})
53
- cookies = response.get_fields('Set-Cookie').map { |cookie| cookie.split(";").first }.join(";")
63
+ @cookies = response.get_fields('Set-Cookie').map { |cookie| cookie.split(";").first }.join(";")
54
64
 
55
65
  uri = URI.parse("http://www.sncf.com/en/horaires-info-trafic/train/resultats")
56
66
  req = Net::HTTP::Get.new(uri.path)
57
- req.add_field("Cookie", cookies)
67
+ req.add_field("Cookie", @cookies)
68
+ Net::HTTP.new(uri.host, uri.port).start { |http| http.request(req) }.body
69
+ end
70
+
71
+ def self.request_sncf_itinerary(index)
72
+ uri = URI.parse("http://www.sncf.com/sncf/train/displayDetailTrain?idItineraire=#{index}")
73
+ req = Net::HTTP::Get.new(uri)
74
+ req.add_field("Cookie", @cookies) if @cookies
75
+ Net::HTTP.new(uri.host, uri.port).start { |http| http.request(req) }.body
76
+
77
+ uri = URI.parse("http://www.sncf.com/en/horaires-info-trafic/train/resultats?#{index}")
78
+ req = Net::HTTP::Get.new(uri)
79
+ req.add_field("Cookie", @cookies) if @cookies
58
80
  Net::HTTP.new(uri.host, uri.port).start { |http| http.request(req) }.body
59
81
  end
60
82
 
@@ -74,22 +74,22 @@ module Gares
74
74
  raw_name = node.at('td.stations div.station').inner_html.strip
75
75
  stations = Station.search(raw_name)
76
76
  @station = if stations.size > 1
77
- raw_name.gsub!(/[ -]/, '.')
77
+ raw_name.gsub!(/[ -]/, '.*')
78
78
  exact_match = /^#{raw_name}$/i
79
79
  begin_match = /^#{raw_name}/i
80
80
  end_match = /#{raw_name}$/
81
81
  middle_match = /#{raw_name}/i
82
82
  stations.find do |station|
83
- station.name.match(exact_match)
83
+ station.name.to_ascii.match(exact_match)
84
84
  end ||
85
85
  stations.find do |station|
86
- station.name.match(begin_match)
86
+ station.name.to_ascii.match(begin_match)
87
87
  end ||
88
88
  stations.find do |station|
89
- station.name.match(end_match)
89
+ station.name.to_ascii.match(end_match)
90
90
  end ||
91
91
  stations.find do |station|
92
- station.name.match(middle_match)
92
+ station.name.to_ascii.match(middle_match)
93
93
  end
94
94
  else
95
95
  stations.first
data/lib/gares/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Gares
2
- VERSION = '2.0.0-dev2'
2
+ VERSION = '2.0.0-dev3'
3
3
  end
@@ -1,8 +1,8 @@
1
1
  HTTP/1.1 200 OK
2
2
  Content-Type: text/html;charset=UTF-8
3
3
  X-UA-Compatible: IE=edge
4
- Date: Sat, 25 Apr 2015 18:27:40 GMT
5
- Content-Length: 21750
4
+ Date: Sun, 26 Apr 2015 20:19:36 GMT
5
+ Content-Length: 21606
6
6
  Connection: keep-alive
7
7
  Set-Cookie: SNC_city=SDN_PRD6; path=/; domain=.sncf.com
8
8
 
@@ -151,10 +151,10 @@ Modify your search </a>
151
151
  <li class="itinerary-content ">
152
152
  <input type="hidden" name="heure-depart" value="1429971360000" />
153
153
  <input type="hidden" name="nb-correspondance" value="0" />
154
- <input type="hidden" name="duree-trajet" value="386" />
154
+ <input type="hidden" name="duree-trajet" value="381" />
155
155
  <ul>
156
156
  <li class="itinerary-abstract">
157
- <div class="cell duration">Duration <strong>6h26</strong></div>
157
+ <div class="cell duration">Duration <strong>6h21</strong></div>
158
158
  <div class="cell connection">
159
159
  Direct journey </div>
160
160
  <div class="cell itinerary-message ">
@@ -190,11 +190,11 @@ Timetables </th>
190
190
  <div class="train-number">no.<strong>6815</strong></div>
191
191
  </td>
192
192
 
193
- <td class="info separator " >
193
+ <td class="info center " rowspan="2">
194
194
  <span class="titre">
195
195
  On time
196
196
  </span>
197
- <hr/>
197
+
198
198
  </td>
199
199
  </tr>
200
200
  <tr class="itinerary-end last ">
@@ -204,11 +204,6 @@ Timetables </th>
204
204
  <td class="stations">
205
205
  <div class="station">NICE VILLE</div>
206
206
  </td>
207
- <td class="info disruption">
208
- <span class="titre">
209
- Delayed arrival 5MIN
210
- </span>
211
- </td>
212
207
  </tr>
213
208
  </table>
214
209
  <a href="/sncf/train/displayDetailTrain?idItineraire=0" class="plus" action="train/displayDetailTrain?idItineraire=0">+</a>
Binary file