subtitulos_downloader 0.6.2 → 0.7.0

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.
@@ -1,5 +1,8 @@
1
1
  # encoding: utf-8
2
- require 'hpricot'
2
+ require 'nokogiri'
3
+ require 'uri'
4
+ require 'net/http'
5
+ require 'ensure/encoding'
3
6
 
4
7
  module SubtitulosDownloader
5
8
 
@@ -57,59 +60,57 @@ module SubtitulosDownloader
57
60
  protected
58
61
 
59
62
  def get_translators(show_sub)
60
- open(@provider_link,
63
+ ep_doc = Nokogiri::HTML(open(@provider_link,
61
64
  "User-Agent" => @user_agent,
62
- "Referer" => "#{@base_uri}/show/#{show_sub[:id_show]}" ) { |f|
63
-
64
- cont = f.read
65
-
66
- ep_doc = Hpricot(cont)
67
- split = @direct_link.split('/')
68
- sub_id = [split.pop, split.pop].reverse.join('/')
69
- ep_doc.search('span.descargar').each do |green|
70
- a = green.search('a').at(0)
71
- if a and a.attributes['href'] == @direct_link
72
- translated = green.next_sibling.next_sibling.next_sibling
73
- @translators = translated.search('a').count
74
- return @translators
75
-
76
- end
77
- # title = (episode_table/"tr/td[@colspan='5']/a").inner_html.force_encoding('utf-8')
78
- # episode_str = "%02d" % show_episode.episode
79
- # episode_number = "#{show_episode.season}x#{episode_str}"
80
- # if title =~ /#{episode_number}/i
81
- # ep_t = episode_table
82
- # break
83
- # end
65
+ "Referer" => "#{@base_uri}/show/#{show_sub[:id_show]}" ), nil, 'UTF-8')
66
+ ep_doc.encoding = 'utf-8'
67
+ split = @direct_link.split('/')
68
+ sub_id = [split.pop, split.pop].reverse.join('/')
69
+ ep_doc.css('span.descargar').each do |green|
70
+ a = green.css('a').first
71
+ if a and a['href'] == @direct_link
72
+ translated = green.xpath('following-sibling::span')[2]
73
+ @translators = translated.css('a').count
74
+ return @translators
84
75
  end
85
- @translators = -1
86
- }
76
+ # title = (episode_table/"tr/td[@colspan='5']/a").inner_html
77
+ # episode_str = "%02d" % show_episode.episode
78
+ # episode_number = "#{show_episode.season}x#{episode_str}"
79
+ # if title =~ /#{episode_number}/i
80
+ # ep_t = episode_table
81
+ # break
82
+ # end
83
+ end
84
+ @translators = -1
87
85
  end
88
86
 
89
87
  def get_subtitles(language, episode_table, show_sub)
90
- @provider_link = (episode_table/"td.NewsTitle/a").first.attributes['href']
88
+ @provider_link = episode_table.css("td.NewsTitle a").first['href']
91
89
 
92
90
  translation_unfinished = false
93
- (episode_table/"tr/td.language").each do |lang|
94
- language_sub = lang.inner_html.strip.force_encoding('utf-8')
91
+ episode_table.css("tr td.language").each do |lang|
92
+ language_sub = lang.text.strip
95
93
  if language_sub =~ /#{language}/i
96
- # puts "Language #{language} found"
97
- if not lang.next_sibling.inner_html =~ /[0-9]+\.?[0-9]*% Completado/i
94
+ # puts "Language #{language} found #{language_sub}"
95
+ completed = lang.parent.css('td:nth-child(6)')
96
+ if not completed.text.strip =~ /[0-9]+\.?[0-9]*% Completado/i
98
97
  # puts "Translation for language #{language} completed"
99
- subtitle_a = lang.parent.search("a").at(0)
100
- subtitle_url = subtitle_a.attributes['href']
98
+ subtitle_a = lang.parent.css("a").first
99
+ subtitle_url = subtitle_a['href']
101
100
  # puts "Fetching #{language} subtitle file"
102
101
  @provider_language = language_sub
103
102
  @direct_link = subtitle_url
104
103
  # @provider_link = "#{@base_uri}/show/#{show_sub[:id_show]}"
105
- translation_unfinished = false
106
- open(subtitle_url,
107
- "User-Agent" => @user_agent,
108
- "Referer" => "#{@base_uri}/show/#{show_sub[:id_show]}") { |f|
109
- # Save the response body
110
- subs= f.read
111
- return subs
112
- }
104
+ translation_unfinished = false
105
+
106
+ uri = URI.parse subtitle_url
107
+ http = Net::HTTP.new(uri.host, uri.port)
108
+ req = Net::HTTP::Get.new(uri.path, {"User-Agent" => @user_agent, "Referer" => "#{@base_uri}/show/#{show_sub[:id_show]}"})
109
+ response = http.request(req)
110
+ utf8_body = response.body.ensure_encoding('UTF-8', :external_encoding => 'ISO-8859-1', :invalid_characters => :transcode)
111
+
112
+ return utf8_body
113
+
113
114
  else
114
115
  translation_unfinished = true
115
116
  end
@@ -131,9 +132,9 @@ module SubtitulosDownloader
131
132
  show_episode.show_name = 'The Newsroom' if show_episode.show_name == 'The Newsroom (2012)'
132
133
  show_episode.show_name = 'The Office' if show_episode.show_name == 'The Office (US)' or show_episode.show_name == 'The Office (1995)'
133
134
  show_episode.show_name = 'Spartacus: Blood and Sand' if show_episode.show_name =~ /Spartacus/i
134
- @shows_doc.search("a").each do |show_subs|
135
- show_name = show_subs.inner_html.force_encoding('utf-8')
136
- show_url = show_subs.attributes['href']
135
+ @shows_doc.css("#contenido a").each do |show_subs|
136
+ show_name = show_subs.text
137
+ show_url = show_subs['href']
137
138
  show = { :show_episode => show_episode, :url => show_url, :id_show => show_url.split('/show/')[1].to_i }
138
139
  if (show_name == show_episode.show_name)
139
140
  shows = []
@@ -154,25 +155,21 @@ module SubtitulosDownloader
154
155
 
155
156
  season_url = "#{@base_uri}/ajax_loadShow.php?show=#{show_sub[:id_show]}&season=#{show_episode.season}"
156
157
  ep_t = nil
157
- open(season_url,
158
+ season_doc = Nokogiri::HTML(open(season_url,
158
159
  "User-Agent" => @user_agent,
159
- "Referer" =>"#{@base_uri}" ) { |f|
160
-
161
- cont = f.read
162
- raise SeasonNotFound, "[#{@provider_name}] Season for #{show_episode.full_name} not found" if not cont.match(/<table/)
163
-
164
- season_doc = Hpricot(cont)
165
-
166
- season_doc.search('table').each do |episode_table|
167
- title = (episode_table/"tr/td[@colspan='5']/a").inner_html.force_encoding('utf-8')
168
- episode_str = "%02d" % show_episode.episode
169
- episode_number = "#{show_episode.season}x#{episode_str}"
170
- if title =~ /#{episode_number}/i
171
- ep_t = episode_table
172
- break
173
- end
174
- end
175
- }
160
+ "Referer" =>"#{@base_uri}" ), nil, 'UTF-8')
161
+ season_doc.encoding = 'utf-8'
162
+ raise SeasonNotFound, "[#{@provider_name}] Season for #{show_episode.full_name} not found" if season_doc.css('table').count == 0
163
+
164
+ season_doc.css('table').each do |episode_table|
165
+ title = episode_table.css("tr td[colspan='5'] a").text
166
+ episode_str = "%02d" % show_episode.episode
167
+ episode_number = "#{show_episode.season}x#{episode_str}"
168
+ if title =~ /#{episode_number}/i
169
+ ep_t = episode_table
170
+ break
171
+ end
172
+ end
176
173
 
177
174
  if ep_t
178
175
  return ep_t
@@ -184,12 +181,11 @@ module SubtitulosDownloader
184
181
 
185
182
 
186
183
  def get_shows_page
187
- open(
184
+ @shows_doc = Nokogiri::HTML(open(
188
185
  "#{@base_uri}/series",
189
186
  "User-Agent" => @user_agent,
190
- "Referer" =>"#{@base_uri}" ) { |f|
191
- @shows_doc = Hpricot(f.read)
192
- }
187
+ "Referer" =>"#{@base_uri}" ), nil, 'UTF-8')
188
+ @shows_doc.encoding = 'utf-8'
193
189
  end
194
190
 
195
191
  end
@@ -1,3 +1,3 @@
1
1
  module SubtitulosDownloader
2
- VERSION = "0.6.2"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -21,7 +21,10 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rake"
23
23
  s.add_development_dependency "rspec", "~>2.0"
24
+ s.add_development_dependency "awesome_print", ">= 1.1.0"
24
25
  # s.add_runtime_dependency "rest-client"
25
26
  s.add_dependency("tvdb", ">= 0.1.0")
27
+ s.add_dependency("nokogiri", ">= 1.5.5")
26
28
  s.add_dependency("hpricot", ">= 0.8.4")
29
+ s.add_dependency("ensure-encoding")
27
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: subtitulos_downloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-27 00:00:00.000000000 Z
12
+ date: 2012-10-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -43,6 +43,22 @@ dependencies:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
45
  version: '2.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: awesome_print
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 1.1.0
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 1.1.0
46
62
  - !ruby/object:Gem::Dependency
47
63
  name: tvdb
48
64
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +75,22 @@ dependencies:
59
75
  - - ! '>='
60
76
  - !ruby/object:Gem::Version
61
77
  version: 0.1.0
78
+ - !ruby/object:Gem::Dependency
79
+ name: nokogiri
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 1.5.5
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 1.5.5
62
94
  - !ruby/object:Gem::Dependency
63
95
  name: hpricot
64
96
  requirement: !ruby/object:Gem::Requirement
@@ -75,6 +107,22 @@ dependencies:
75
107
  - - ! '>='
76
108
  - !ruby/object:Gem::Version
77
109
  version: 0.8.4
110
+ - !ruby/object:Gem::Dependency
111
+ name: ensure-encoding
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
78
126
  description: Fetch subtitles from different providers and save them to a given path
79
127
  email:
80
128
  - hector@aerstudio.com
@@ -115,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
163
  version: '0'
116
164
  segments:
117
165
  - 0
118
- hash: -4045992027944727546
166
+ hash: -93796529028502819
119
167
  required_rubygems_version: !ruby/object:Gem::Requirement
120
168
  none: false
121
169
  requirements:
@@ -124,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
172
  version: '0'
125
173
  segments:
126
174
  - 0
127
- hash: -4045992027944727546
175
+ hash: -93796529028502819
128
176
  requirements: []
129
177
  rubyforge_project: subtitulos_downloader
130
178
  rubygems_version: 1.8.24