suby 0.0.3 → 0.0.4
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.
- data/bin/suby +35 -14
- metadata +2 -2
data/bin/suby
CHANGED
@@ -1,8 +1,30 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
options = {
|
6
|
+
lang: 'en'
|
7
|
+
}
|
8
|
+
|
9
|
+
option_parser = OptionParser.new do |opts|
|
10
|
+
opts.banner = "#{File.basename $0} [options] video"
|
11
|
+
opts.separator ' Find and download subtitles for the given video file'
|
12
|
+
opts.separator "\nOptions:"
|
13
|
+
|
14
|
+
opts.on '-l', '--lang LANG = en', 'Lang for subtitles' do |lang|
|
15
|
+
options[:lang] = lang
|
16
|
+
end
|
17
|
+
|
18
|
+
opts.on '-h', '--help', 'Show usage' do
|
19
|
+
puts opts
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
option_parser.parse!
|
25
|
+
|
26
|
+
if ARGV.empty?
|
27
|
+
puts option_parser
|
6
28
|
exit
|
7
29
|
end
|
8
30
|
|
@@ -13,7 +35,6 @@ SUB_EXTENSIONS = %w[srt sub]
|
|
13
35
|
archive = '__archive__'
|
14
36
|
site = 'www.tvsubtitles.net'
|
15
37
|
search_url = '/search.php'
|
16
|
-
lang = 'en'
|
17
38
|
|
18
39
|
def extract_subs_from_archive(archive)
|
19
40
|
case `file #{archive}`
|
@@ -41,29 +62,29 @@ ARGV.each { |file|
|
|
41
62
|
next(puts "Skipping: #{file}") if SUB_EXTENSIONS.any? { |ext|
|
42
63
|
File.exist? File.basename(file, File.extname(file)) + ".#{ext}" }
|
43
64
|
|
44
|
-
unless /^(?<
|
45
|
-
next puts "wrong file format (#{file}). Must be:\n<
|
65
|
+
unless /^(?<show>.+) (?<season>\d{1,2})x(?<episode>\d{1,2}) - .+\.[a-z]+?$/ =~ file
|
66
|
+
next puts "wrong file format (#{file}). Must be:\n<show> <season>x<episode> - <title>.<ext>"
|
46
67
|
end
|
47
68
|
season, episode = [season, episode].map(&:to_i)
|
48
69
|
puts "Searching subtitles for #{file}:"
|
49
|
-
puts "Show: #{
|
70
|
+
puts "Show: #{show}, Season: #{season}, Episode: #{episode}"
|
50
71
|
|
51
72
|
Net::HTTP.start(site) { |tvsubtitles|
|
52
|
-
# search
|
53
|
-
|
73
|
+
# search show
|
74
|
+
show_url = (show_urls[show] ||= begin
|
54
75
|
post = Net::HTTP::Post.new(search_url)
|
55
|
-
post.form_data = { 'q' =>
|
76
|
+
post.form_data = { 'q' => show }
|
56
77
|
results = Nokogiri tvsubtitles.request(post).body
|
57
78
|
url = results.css('ul li div a').first[:href]
|
58
79
|
|
59
80
|
raise 'could not find the show' unless /^\/tvshow-(\d+)\.html$/ =~ url
|
60
81
|
"/tvshow-#{$1}-#{season}.html"
|
61
82
|
end)
|
62
|
-
puts "
|
83
|
+
puts "show url: #{show_url}"
|
63
84
|
|
64
85
|
# search episode
|
65
|
-
|
66
|
-
tr =
|
86
|
+
show = (show_pages[show] ||= Nokogiri tvsubtitles.get(show_url).body)
|
87
|
+
tr = show.css('div.left_articles table tr').find { |tr|
|
67
88
|
tr.children.find { |td| td.name == 'td' && td.text =~ /\A#{season}x0?#{episode}\z/ }
|
68
89
|
}
|
69
90
|
episode_url = nil
|
@@ -74,7 +95,7 @@ ARGV.each { |file|
|
|
74
95
|
}
|
75
96
|
|
76
97
|
raise "invalid episode url: #{episode_url}" unless episode_url =~ /^episode-(\d+)\.html$/
|
77
|
-
episode_url = "/episode-#{$1}-#{lang}.html"
|
98
|
+
episode_url = "/episode-#{$1}-#{options[:lang]}.html"
|
78
99
|
puts "episode url: #{episode_url}"
|
79
100
|
|
80
101
|
# subtitles
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: suby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
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: 2011-06-
|
12
|
+
date: 2011-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Find and download subtitles
|
15
15
|
email:
|