undertexter 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- undertexterse (0.0.1)
4
+ undertexter (0.0.3)
5
5
  nokogiri
6
6
  rest-client
7
7
 
@@ -29,4 +29,4 @@ DEPENDENCIES
29
29
  nokogiri
30
30
  rest-client
31
31
  rspec
32
- undertexterse!
32
+ undertexter!
data/README.markdown ADDED
@@ -0,0 +1,71 @@
1
+ What is Undertexter?
2
+ ===============
3
+
4
+ Undertexter provides a basic search client that makes it possible to search for swedish and english subtitles on [Undertexter.se](http://undertexter.se)
5
+
6
+ How to use
7
+ ===============
8
+
9
+ The find methods takes any string, including an IMDB id.
10
+ This is how to use it in irb.
11
+
12
+ $ require 'undertexter'
13
+ # => true
14
+ $ subtite = Undertexter.find("tt0840361").first
15
+ => #<Subtitle:0x1020fff98 @downloads=8328, @movie_title="The Town", @title="The.Town.2010....BRRip", @url="http://www.undertexter.se/?p=undertext&id=23711", @cds=1>
16
+ $ subtitle.downloads
17
+ => 8328
18
+ $ subtitle.movie_title
19
+ => "The Town"
20
+ $ subtitle.title
21
+ => "The.Town.2010.EXTENDED.480p.BRRip.XviD-NYDIC"
22
+ $ subtitle.url
23
+ = "http://www.undertexter.se/utext.php?id=23711"
24
+ $ subtitle.details
25
+ => "http://www.undertexter.se/?p=undertext&id=23711"
26
+ $ Undertexter.find("die hard").count
27
+ => 41
28
+
29
+ You can also provide an language option.
30
+
31
+ $ Undertexter.find("tt0840361", :language => :english).count
32
+ => 48
33
+ $ Undertexter.find("tt0840361", :language => :swedish).count
34
+ => 8
35
+
36
+ If no language option is being passed to find, it will fall back to swedish
37
+
38
+ What is being returned from the find method?
39
+ ===============
40
+
41
+ The find method returns an `Array` with zero or more subtitles. Every subtitle provides some basic accessors.
42
+
43
+ - `movie_title` (String) The official name of the movie.
44
+ - `cds` (Integer) The amount of cds that the release should contain.
45
+ - `title` (String) The release name of the subtitle, should have the same name as the downloaded movie.
46
+ - `downloads` (Integer) The amount of downloads for this particular subtitle.
47
+ - `url` (String) A direct link to the subtitle file, a rar file for example
48
+ - `details` (String) A link to the details page for the subtitle
49
+
50
+ How to install
51
+ ===============
52
+
53
+ sudo gem install undertexter
54
+
55
+ How to use it in a rails 3 project
56
+ ===============
57
+
58
+ Add `gem 'undertexter'` to your Gemfile and run `bundle`.
59
+
60
+ How to help
61
+ ===============
62
+
63
+ - Start by copying the project or make your own branch.
64
+ - Navigate to the root path of the project and run `bundle`.
65
+ - Start by running all tests using rspec, `rspec spec/undertexter_spec.rb`.
66
+ - Implement your own code, write some tests, commit and do a pull request.
67
+
68
+ Requirements
69
+ ===============
70
+
71
+ Undertexter is tested in OS X 10.6.6 using Ruby 1.8.7.
data/lib/subtitle.rb CHANGED
@@ -1,6 +1,16 @@
1
1
  class Subtitle
2
- attr_accessor :url, :downloads, :cds, :title, :movie_title
2
+ attr_accessor :details, :downloads, :cds, :title, :movie_title, :url
3
+
3
4
  def initialize(args)
4
5
  args.keys.each { |name| instance_variable_set "@" + name.to_s, args[name] }
5
6
  end
7
+
8
+ def url
9
+ "http://www.undertexter.se/utext.php?id=#{id}"
10
+ end
11
+
12
+ private
13
+ def id
14
+ @details.match(/id=(\d+)/)[1]
15
+ end
6
16
  end
@@ -1,3 +1,3 @@
1
1
  module Undertexter
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/undertexter.rb CHANGED
@@ -3,15 +3,25 @@ require 'subtitle'
3
3
  require 'nokogiri'
4
4
 
5
5
  class Undertexter
6
- attr_accessor :raw_data, :base_url, :subtitles
6
+ attr_accessor :raw_data, :base_details, :subtitles
7
7
 
8
- def initialize
9
- @base_url = "http://www.undertexter.se/?p=soek&add=arkiv&str="
8
+ def initialize(options)
9
+ @options = {
10
+ :language => {
11
+ :swedish => 'soek',
12
+ :english => 'eng_search'
13
+ }
14
+ }
15
+
16
+ # If a non existing language is being used, swedish will be the default
17
+ lang = @options[:language][options[:language]] || @options[:language][:swedish]
18
+
19
+ @base_details = "http://www.undertexter.se/?p=#{lang}&add=arkiv&str="
10
20
  @subtitles = []
11
21
  end
12
22
 
13
- def self.find(search_string)
14
- this = self.new
23
+ def self.find(search_string, options = {:language => :swedish})
24
+ this = self.new(options)
15
25
 
16
26
  # Downloading the page
17
27
  this.get(search_string)
@@ -32,7 +42,7 @@ class Undertexter
32
42
  # Example output
33
43
  # [["(1 cd)", "Nedladdningar: 11891", "Avatar (2009) PROPER DVDSCR XviD-MAXSPEED", "http://www.undertexter.se/?p=undertext&id=19751"]]
34
44
 
35
- [15,12].each do |id|
45
+ [12,15].each do |id|
36
46
  @block = noko.css("table:nth-child(#{id}) td").to_a.reject do |inner|
37
47
  inner.content.empty? or ! inner.content.match(/Nedladdningar/i)
38
48
  end.map do |inner|
@@ -44,10 +54,12 @@ class Undertexter
44
54
  next if @block.nil?
45
55
 
46
56
  noko.css("table:nth-child(#{id}) a").to_a.reject do |inner|
47
- url = inner.attr('href')
48
- inner.content.empty? or url.nil? or ! url.match(/p=undertext&id=\d+/i)
57
+ details = inner.attr('href')
58
+ inner.content.empty? or details.nil? or ! details.match(/(p=undertext&id=\d+)|(p=subtitle&id=\d+)/i)
49
59
  end.map do |y|
50
60
  [y.attr('href'), y.content.strip]
61
+ end.reject do |list|
62
+ list.last.empty?
51
63
  end.each_with_index do |value, index|
52
64
  @block[index] << value.first
53
65
  @block[index] << value.last
@@ -66,13 +78,13 @@ class Undertexter
66
78
  :cds => movie[0].match(/\d+/)[0].to_i,
67
79
  :downloads => movie[1].match(/\d+$/)[0].to_i,
68
80
  :title => movie[2],
69
- :url => movie[3],
81
+ :details => movie[3],
70
82
  :movie_title => movie[4]
71
83
  })
72
84
  end
73
85
  end
74
86
 
75
87
  def get(search_string)
76
- @raw_data = RestClient.get(@base_url + CGI.escape(search_string), :timeout => 10) rescue nil
88
+ @raw_data = RestClient.get(@base_details + CGI.escape(search_string), :timeout => 10) rescue nil
77
89
  end
78
90
  end
@@ -33,8 +33,8 @@ describe Undertexter do
33
33
  @use.each {|subtitle| subtitle.title.should_not be_empty}
34
34
  end
35
35
 
36
- it "should contain the right urls" do
37
- @use.each {|subtitle| subtitle.url.should match(/^http:\/\/www\.undertexter\.se\/\?p=undertext&id=\d+$/)}
36
+ it "should contain the right detailss" do
37
+ @use.each {|subtitle| subtitle.details.should match(/^http:\/\/www\.undertexter\.se\/\?p=undertext&id=\d+$/)}
38
38
  end
39
39
  end
40
40
 
@@ -62,8 +62,8 @@ describe Undertexter, "trying to search for a movie using a title" do
62
62
  @use.each{|subtitle| subtitle.title.should match(/die.*hard/i)}
63
63
  end
64
64
 
65
- it "should contain the right urls, again" do
66
- @use.each {|subtitle| subtitle.url.should match(/^http:\/\/www\.undertexter\.se\/\?p=undertext&id=\d+$/i)}
65
+ it "should contain the right detailss, again" do
66
+ @use.each {|subtitle| subtitle.details.should match(/^http:\/\/www\.undertexter\.se\/\?p=undertext&id=\d+$/i)}
67
67
  end
68
68
 
69
69
  it "should have a movie title" do
@@ -77,4 +77,29 @@ describe Undertexter, "trying to search for a movie using a title" do
77
77
  it "should not contain movie title that starts or ends with whitespace" do
78
78
  @use.each {|subtitle| subtitle.movie_title.should_not match(/^\s+.+\s+$/)}
79
79
  end
80
+
81
+ it "should return a direct link to the subtitle" do
82
+ @use.each{|subtitle| subtitle.url.should match(/http:\/\/www\.undertexter\.se\/utext\.php\?id=\d+/i)}
83
+ end
84
+
85
+ it "should return the same id for every link" do
86
+ @use.each_with_index do |subtitle, index|
87
+ subtitle.url.match(/id=(\d+)/)[1].should eq(@use[index].details.match(/id=(\d+)/)[1])
88
+ end
89
+ end
90
+ end
91
+
92
+ describe Undertexter, "should work when trying to fetch some english subtitles" do
93
+ it "should return at least 48 subtitles" do
94
+ Undertexter.should have_at_least(48).find("tt0840361", {:language => :english})
95
+ end
96
+
97
+ it "should return at least 8 subtitles" do
98
+ Undertexter.should have_at_least(8).find("tt0840361", {:language => :swedish})
99
+ end
100
+
101
+ it "should return at least 8 subtitles" do
102
+ Undertexter.should have_at_least(8).find("tt0840361", {:language => :strange})
103
+ end
104
+ # http://www.undertexter.se/www.php?www=http://engsub.net/?p=subtitle&id=92097
80
105
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: undertexter
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Linus Oleander
@@ -74,7 +74,7 @@ files:
74
74
  - .rspec
75
75
  - Gemfile
76
76
  - Gemfile.lock
77
- - README
77
+ - README.markdown
78
78
  - Rakefile
79
79
  - lib/subtitle.rb
80
80
  - lib/undertexter.rb
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  requirements: []
113
113
 
114
114
  rubyforge_project: undertexter
115
- rubygems_version: 1.3.7
115
+ rubygems_version: 1.4.2
116
116
  signing_key:
117
117
  specification_version: 3
118
118
  summary: A subtitle search client for undertexter.se
data/README DELETED
File without changes