undertexter 0.1.6 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +6 -0
- data/lib/undertexter/error.rb +20 -0
- data/lib/undertexter.rb +25 -17
- data/spec/fixtures/error.html +4252 -0
- data/spec/spec_helper.rb +7 -3
- data/spec/undertexter_spec.rb +15 -0
- data/undertexter.gemspec +3 -1
- metadata +20 -3
data/Gemfile.lock
CHANGED
@@ -10,6 +10,8 @@ PATH
|
|
10
10
|
GEM
|
11
11
|
remote: http://rubygems.org/
|
12
12
|
specs:
|
13
|
+
addressable (2.2.4)
|
14
|
+
crack (0.1.8)
|
13
15
|
diff-lcs (1.1.2)
|
14
16
|
hintable_levenshtein (0.0.3)
|
15
17
|
levenshteinish (0.0.1)
|
@@ -27,6 +29,9 @@ GEM
|
|
27
29
|
rspec-expectations (2.4.0)
|
28
30
|
diff-lcs (~> 1.1.2)
|
29
31
|
rspec-mocks (2.4.0)
|
32
|
+
webmock (1.6.2)
|
33
|
+
addressable (>= 2.2.2)
|
34
|
+
crack (>= 0.1.7)
|
30
35
|
|
31
36
|
PLATFORMS
|
32
37
|
ruby
|
@@ -34,3 +39,4 @@ PLATFORMS
|
|
34
39
|
DEPENDENCIES
|
35
40
|
rspec (= 2.4.0)
|
36
41
|
undertexter!
|
42
|
+
webmock
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class SourceHasBeenChangedError < StandardError
|
2
|
+
def initialize(error, url)
|
3
|
+
super <<-END_RUBY
|
4
|
+
\nHi,
|
5
|
+
|
6
|
+
It looks like an error has occurred.
|
7
|
+
|
8
|
+
Please report it on the Github issue tracker (link below).
|
9
|
+
https://github.com/oleander/Undertexter/issues
|
10
|
+
|
11
|
+
Here is the error:
|
12
|
+
|
13
|
+
\t #{error.message}
|
14
|
+
\t #{error.backtrace.first}
|
15
|
+
\t #{url}
|
16
|
+
|
17
|
+
Thanks for using Undertexter!\n
|
18
|
+
END_RUBY
|
19
|
+
end
|
20
|
+
end
|
data/lib/undertexter.rb
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
3
|
+
require "rest-client"
|
4
|
+
require "subtitle"
|
5
|
+
require "nokogiri"
|
6
|
+
require "iconv"
|
7
|
+
require "undertexter/error"
|
8
|
+
require "undertexter/array"
|
8
9
|
|
9
10
|
class Undertexter
|
10
|
-
attr_accessor :raw_data, :base_details, :subtitles
|
11
|
+
attr_accessor :raw_data, :base_details, :subtitles, :search_string
|
11
12
|
|
12
13
|
def initialize(options)
|
13
14
|
@options = {
|
14
15
|
:language => {
|
15
|
-
:swedish =>
|
16
|
-
:english =>
|
16
|
+
:swedish => "soek",
|
17
|
+
:english => "eng_search"
|
17
18
|
},
|
18
19
|
:preferred_language => options[:language]
|
19
20
|
}
|
@@ -27,9 +28,10 @@ class Undertexter
|
|
27
28
|
|
28
29
|
def self.find(search_string, options = {:language => :swedish})
|
29
30
|
this = self.new(options)
|
31
|
+
this.search_string = search_string
|
30
32
|
|
31
33
|
# Downloading the page
|
32
|
-
this.get
|
34
|
+
this.get!
|
33
35
|
|
34
36
|
# If something went wrong, like a timeout, {raw_data} could be nil
|
35
37
|
return [] if this.raw_data.nil?
|
@@ -49,9 +51,9 @@ class Undertexter
|
|
49
51
|
@block = []
|
50
52
|
|
51
53
|
tbody = doc.css("table").to_a.reject do |i|
|
52
|
-
! i.content.match(/Nedladdningar/i) or i.css(
|
54
|
+
! i.content.match(/Nedladdningar/i) or i.css("table").any?
|
53
55
|
end.sort_by do |inner|
|
54
|
-
inner.css(
|
56
|
+
inner.css("table").count
|
55
57
|
end.first
|
56
58
|
|
57
59
|
return if tbody.nil?
|
@@ -62,15 +64,17 @@ class Undertexter
|
|
62
64
|
length = @block.length
|
63
65
|
@block[length] = [] if @block[length].nil?
|
64
66
|
line = last.content.split(/\n/).map(&:strip)
|
65
|
-
value = first.at_css(
|
67
|
+
value = first.at_css("a")
|
66
68
|
|
67
69
|
@block[length] << line[1] # (cd 1)
|
68
70
|
@block[length] << line[3] # Nedladdningar: 11891
|
69
71
|
@block[length] << line[4] # "Avatar (2009) PROPER DVDSCR XviD-MAXSPEED"
|
70
|
-
@block[length] << value.attr(
|
71
|
-
@block[length] << value.attr(
|
72
|
+
@block[length] << value.attr("href") # http://www.undertexter.se/?p=undertext&id=19751
|
73
|
+
@block[length] << value.attr("title") # Avatar
|
72
74
|
@block[length].map!(&:strip)
|
73
75
|
end
|
76
|
+
rescue StandardError => error
|
77
|
+
raise SourceHasBeenChangedError.new(error, url)
|
74
78
|
end
|
75
79
|
|
76
80
|
def build!
|
@@ -87,8 +91,12 @@ class Undertexter
|
|
87
91
|
end
|
88
92
|
end
|
89
93
|
|
90
|
-
def get
|
91
|
-
@raw_data = RestClient.get(
|
92
|
-
@raw_data = Iconv.conv(
|
94
|
+
def get!
|
95
|
+
@raw_data = RestClient.get(url, :timeout => 10) rescue nil
|
96
|
+
@raw_data = Iconv.conv("utf-8","ISO-8859-1", @raw_data)
|
97
|
+
end
|
98
|
+
|
99
|
+
def url
|
100
|
+
@base_details + CGI.escape(search_string)
|
93
101
|
end
|
94
102
|
end
|