undertexter 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +11 -1
- data/README.markdown +33 -0
- data/lib/subtitle.rb +49 -0
- data/lib/undertexter.rb +1 -0
- data/lib/undertexter/array.rb +13 -0
- data/spec/array_spec.rb +33 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/subtitle_spec.rb +55 -0
- data/undertexter.gemspec +3 -1
- metadata +37 -12
data/Gemfile.lock
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
undertexter (0.0
|
4
|
+
undertexter (0.1.0)
|
5
|
+
levenshteinish
|
6
|
+
mimer_plus
|
5
7
|
nokogiri
|
6
8
|
rest-client
|
7
9
|
|
@@ -9,7 +11,11 @@ GEM
|
|
9
11
|
remote: http://rubygems.org/
|
10
12
|
specs:
|
11
13
|
diff-lcs (1.1.2)
|
14
|
+
hintable_levenshtein (0.0.3)
|
15
|
+
levenshteinish (0.0.1)
|
16
|
+
hintable_levenshtein
|
12
17
|
mime-types (1.16)
|
18
|
+
mimer_plus (0.0.4)
|
13
19
|
nokogiri (1.4.4)
|
14
20
|
rest-client (1.6.1)
|
15
21
|
mime-types (>= 1.16)
|
@@ -26,5 +32,9 @@ PLATFORMS
|
|
26
32
|
ruby
|
27
33
|
|
28
34
|
DEPENDENCIES
|
35
|
+
levenshteinish
|
36
|
+
mimer_plus
|
37
|
+
nokogiri
|
38
|
+
rest-client
|
29
39
|
rspec
|
30
40
|
undertexter!
|
data/README.markdown
CHANGED
@@ -33,6 +33,39 @@ You can also provide an language option.
|
|
33
33
|
$ Undertexter.find("tt0840361", :language => :swedish).count
|
34
34
|
=> 8
|
35
35
|
|
36
|
+
Download the subtitle to disk
|
37
|
+
|
38
|
+
$ Undertexter.find("tt0840361").first.download!
|
39
|
+
=> "/tmp/The.Town.2010.EXTENDED.480p.BRRip.XviD-NYDIC.rar"
|
40
|
+
$ File.exists?("/tmp/The.Town.2010.EXTENDED.480p.BRRip.XviD-NYDIC.rar")
|
41
|
+
=> true
|
42
|
+
|
43
|
+
You can also specify a destination folder to download the file, both relative and absolute
|
44
|
+
|
45
|
+
$ Undertexter.find("tt0840361").first.download!(:to => /some/dir)
|
46
|
+
=> "/some/dir/The.Town.2010.EXTENDED.480p.BRRip.XviD-NYDIC.rar"
|
47
|
+
|
48
|
+
$ Dir.pwd
|
49
|
+
=> /Users/linus/Downloads
|
50
|
+
$ Undertexter.find("tt0840361").first.download!(:to => 'my_dir')
|
51
|
+
=> "/Users/linus/Downloads/my_dir/The.Town.2010.EXTENDED.480p.BRRip.XviD-NYDIC.rar"
|
52
|
+
|
53
|
+
Find the right subtitle based on the release name of the movie
|
54
|
+
|
55
|
+
$ Undertexter.find("tt0840361").based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS")
|
56
|
+
=> #<Subtitle:0x00000101b739d0 @cds=1, @downloads=1644, @title="The.Town.EXTENDED.2010.480p.BRRip.XviD.AC3-FLAWL3SS", @details="http://www.undertexter.se/?p=undertext&id=23752", @movie_title="The Town", @language=:swedish>
|
57
|
+
|
58
|
+
Specify how sensitive the `based_on` method should be, where `0` is a perfect match and `1` is dont care. Default is 0.4
|
59
|
+
|
60
|
+
$ Undertexter.find("tt0840361").based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS", limit: 0)
|
61
|
+
=> nil
|
62
|
+
|
63
|
+
$ Undertexter.find("tt0840361").based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS", limit: 0.4)
|
64
|
+
=> #<Subtitle:0x00000101b8d808 @cds=1, @downloads=1644, @title="The.Town.EXTENDED.2010.480p.BRRip.XviD.AC3-FLAWL3SS", @details="http://www.undertexter.se/?p=undertext&id=23752", @movie_title="The Town", @language=:swedish>
|
65
|
+
|
66
|
+
$ Undertexter.find("tt0840361").based_on("The.Town.EXTENDED.2010.480p.BRRip.XviD.AC3-FLAWL3SS", limit: 0.0)
|
67
|
+
=> #<Subtitle:0x00000101b8d718 @cds=1, @downloads=1644, @title="The.Town.EXTENDED.2010.480p.BRRip.XviD.AC3-FLAWL3SS", @details="http://www.undertexter.se/?p=undertext&id=23752", @movie_title="The Town", @language=:swedish>
|
68
|
+
|
36
69
|
If no language option is being passed to find, it will fall back to swedish
|
37
70
|
|
38
71
|
What is being returned from the find method?
|
data/lib/subtitle.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'mimer_plus'
|
3
|
+
|
1
4
|
class Subtitle
|
2
5
|
attr_accessor :details, :downloads, :cds, :title, :movie_title, :url
|
3
6
|
|
@@ -9,8 +12,54 @@ class Subtitle
|
|
9
12
|
@language == :english ? "http://eng.undertexter.se/subtitle.php?id=#{id}" : "http://www.undertexter.se/utext.php?id=#{id}"
|
10
13
|
end
|
11
14
|
|
15
|
+
# Downloading the file and saves it disk
|
16
|
+
def download!(args = {})
|
17
|
+
if args[:to].nil?
|
18
|
+
dir = "/tmp"
|
19
|
+
file_name = "#{dir}/#{generate_file_name}"
|
20
|
+
else
|
21
|
+
dir = generate_custom_file_path(args)
|
22
|
+
file_name = "#{dir}/#{generate_file_name}"
|
23
|
+
end
|
24
|
+
|
25
|
+
data = RestClient.get(self.url, :timeout => 10) rescue nil
|
26
|
+
file = File.new(file_name, 'w')
|
27
|
+
file.write(data)
|
28
|
+
file.close
|
29
|
+
|
30
|
+
type = Mimer.identify(file_name)
|
31
|
+
|
32
|
+
if type.zip?
|
33
|
+
file_ending = ".zip"
|
34
|
+
elsif type.rar?
|
35
|
+
file_ending = ".rar"
|
36
|
+
else
|
37
|
+
file_ending = ""
|
38
|
+
end
|
39
|
+
|
40
|
+
new_file_name = "#{dir}/#{title.gsub(/\s+/, '.')}#{file_ending}"
|
41
|
+
|
42
|
+
# Changing the name on the file
|
43
|
+
FileUtils.mv(file_name, new_file_name)
|
44
|
+
|
45
|
+
# I like return :)
|
46
|
+
return new_file_name
|
47
|
+
end
|
48
|
+
|
12
49
|
private
|
13
50
|
def id
|
14
51
|
@details.match(/id=(\d+)/)[1]
|
15
52
|
end
|
53
|
+
|
54
|
+
def generate_file_name
|
55
|
+
(0...30).map{65.+(rand(25)).chr}.join.downcase
|
56
|
+
end
|
57
|
+
|
58
|
+
def generate_custom_file_path(args)
|
59
|
+
# If the path is relative
|
60
|
+
args[:to] = File.expand_path(args[:to]) unless args[:to].match(/^\//)
|
61
|
+
|
62
|
+
# Makes sure that every directory structure looks the same
|
63
|
+
Dir.new(args[:to]).path
|
64
|
+
end
|
16
65
|
end
|
data/lib/undertexter.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'levenshteinish'
|
2
|
+
|
3
|
+
class Array
|
4
|
+
def based_on(string, args = {})
|
5
|
+
self.any? ? self.map do|s|
|
6
|
+
[Levenshtein.distance(s.title, string, args[:limit] || 0.4), s]
|
7
|
+
end.reject do |value|
|
8
|
+
value.first.nil?
|
9
|
+
end.sort_by do |value|
|
10
|
+
value.first
|
11
|
+
end.map(&:last).first : nil
|
12
|
+
end
|
13
|
+
end
|
data/spec/array_spec.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
before(:each) do
|
5
|
+
@subtitles = Undertexter.find("tt0840361")
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should have a based_on method" do
|
9
|
+
lambda{
|
10
|
+
@subtitles.based_on("some args")
|
11
|
+
}.should_not raise_error(NoMethodError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return the right one" do
|
15
|
+
@subtitles.based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS").details.should match(/id=23752/)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should not return anything if the limit is set to low" do
|
19
|
+
@subtitles.based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS", :limit => 0).should be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should not return the right movie if to litle info i passed" do
|
23
|
+
@subtitles.based_on("The Town").should be_nil
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should return the right instance" do
|
27
|
+
@subtitles.based_on("The Town EXTENDED 2010 480p BRRip XviD AC3 FLAWL3SS").should be_instance_of(Subtitle)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return nil if trying to fetch an non existing imdb id" do
|
31
|
+
Undertexter.find("tt123456789").based_on("some random argument").should be_nil
|
32
|
+
end
|
33
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe Subtitle do
|
3
|
+
before(:each) do
|
4
|
+
@title = "127 Hours 2010 DVDSCR XViD-MC8"
|
5
|
+
@new_file = "/tmp/#{@title.gsub(/\s+/, '.')}.zip"
|
6
|
+
|
7
|
+
@subtitle = Subtitle.new({
|
8
|
+
:details => "http://www.undertexter.se/?p=undertext&id=23984",
|
9
|
+
:downloads => 100,
|
10
|
+
:cds => 1,
|
11
|
+
:title => @title,
|
12
|
+
:movie_title => "127 Hours (127 Timmar)",
|
13
|
+
:language => :swedish
|
14
|
+
})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should be an instance of subtitle" do
|
18
|
+
@subtitle.should be_instance_of(Subtitle)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should have the right accessors" do
|
22
|
+
@subtitle.details.should eq("http://www.undertexter.se/?p=undertext&id=23984")
|
23
|
+
@subtitle.downloads.should eq(100)
|
24
|
+
@subtitle.cds.should eq(1)
|
25
|
+
@subtitle.title.should eq("127 Hours 2010 DVDSCR XViD-MC8")
|
26
|
+
@subtitle.movie_title.should eq("127 Hours (127 Timmar)")
|
27
|
+
@subtitle.url.should eq("http://www.undertexter.se/utext.php?id=23984")
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to download the subtitle" do
|
31
|
+
@subtitle.download!.should eq(@new_file)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should have created an existing file" do
|
35
|
+
FileUtils.rm(@new_file)
|
36
|
+
@subtitle.download!
|
37
|
+
File.exists?(@new_file).should be_true
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should be able to download the file to a specific absolute directory" do
|
41
|
+
%x{rm -r /tmp/new_dir; mkdir /tmp/new_dir}
|
42
|
+
@subtitle.download!(:to => '/tmp/new_dir')
|
43
|
+
%x{ls /tmp/new_dir}.should_not be_empty
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should be able to download the file to a specific relative directory" do
|
47
|
+
folder = "#{Dir.pwd}/spec/data"
|
48
|
+
|
49
|
+
@subtitle.download!(:to => 'spec/data')
|
50
|
+
|
51
|
+
%x{ls #{folder}}.should_not be_empty
|
52
|
+
|
53
|
+
%x{cd #{folder} && rm 127.Hours.2010.DVDSCR.XViD-MC8.zip}
|
54
|
+
end
|
55
|
+
end
|
data/undertexter.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "undertexter"
|
6
|
-
s.version = "0.0
|
6
|
+
s.version = "0.1.0"
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Linus Oleander"]
|
9
9
|
s.email = ["linus@oleander.nu"]
|
@@ -20,5 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
|
21
21
|
s.add_dependency('rest-client')
|
22
22
|
s.add_dependency('nokogiri')
|
23
|
+
s.add_dependency('mimer_plus')
|
24
|
+
s.add_dependency('levenshteinish')
|
23
25
|
s.add_development_dependency('rspec')
|
24
26
|
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: undertexter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
7
|
+
- 1
|
8
8
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.7
|
9
|
+
version: 0.1.0
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Linus Oleander
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
version: "0"
|
@@ -40,26 +38,50 @@ dependencies:
|
|
40
38
|
requirements:
|
41
39
|
- - ">="
|
42
40
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 3
|
44
41
|
segments:
|
45
42
|
- 0
|
46
43
|
version: "0"
|
47
44
|
type: :runtime
|
48
45
|
version_requirements: *id002
|
49
46
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
47
|
+
name: mimer_plus
|
51
48
|
prerelease: false
|
52
49
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
50
|
none: false
|
54
51
|
requirements:
|
55
52
|
- - ">="
|
56
53
|
- !ruby/object:Gem::Version
|
57
|
-
hash: 3
|
58
54
|
segments:
|
59
55
|
- 0
|
60
56
|
version: "0"
|
61
|
-
type: :
|
57
|
+
type: :runtime
|
62
58
|
version_requirements: *id003
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: levenshteinish
|
61
|
+
prerelease: false
|
62
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
segments:
|
68
|
+
- 0
|
69
|
+
version: "0"
|
70
|
+
type: :runtime
|
71
|
+
version_requirements: *id004
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: rspec
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
version: "0"
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id005
|
63
85
|
description: A subtitle search client to search for swedish subtitles on undertexter.se
|
64
86
|
email:
|
65
87
|
- linus@oleander.nu
|
@@ -78,7 +100,10 @@ files:
|
|
78
100
|
- Rakefile
|
79
101
|
- lib/subtitle.rb
|
80
102
|
- lib/undertexter.rb
|
103
|
+
- lib/undertexter/array.rb
|
104
|
+
- spec/array_spec.rb
|
81
105
|
- spec/spec_helper.rb
|
106
|
+
- spec/subtitle_spec.rb
|
82
107
|
- spec/undertexter_spec.rb
|
83
108
|
- undertexter.gemspec
|
84
109
|
has_rdoc: true
|
@@ -95,7 +120,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
120
|
requirements:
|
96
121
|
- - ">="
|
97
122
|
- !ruby/object:Gem::Version
|
98
|
-
hash: 3
|
99
123
|
segments:
|
100
124
|
- 0
|
101
125
|
version: "0"
|
@@ -104,17 +128,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
104
128
|
requirements:
|
105
129
|
- - ">="
|
106
130
|
- !ruby/object:Gem::Version
|
107
|
-
hash: 3
|
108
131
|
segments:
|
109
132
|
- 0
|
110
133
|
version: "0"
|
111
134
|
requirements: []
|
112
135
|
|
113
136
|
rubyforge_project: undertexter
|
114
|
-
rubygems_version: 1.
|
137
|
+
rubygems_version: 1.3.7
|
115
138
|
signing_key:
|
116
139
|
specification_version: 3
|
117
140
|
summary: A subtitle search client for undertexter.se
|
118
141
|
test_files:
|
142
|
+
- spec/array_spec.rb
|
119
143
|
- spec/spec_helper.rb
|
144
|
+
- spec/subtitle_spec.rb
|
120
145
|
- spec/undertexter_spec.rb
|