subtitulos_downloader 0.6.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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