my_shows 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/my_shows +2 -2
- data/lib/my_shows.rb +7 -7
- data/lib/my_shows/episode.rb +19 -5
- data/lib/my_shows/the_pirate_bay_client.rb +9 -5
- data/lib/my_shows/version.rb +1 -1
- metadata +8 -2
data/bin/my_shows
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'my_shows'
|
4
4
|
|
5
5
|
# Output message to $stderr, prefixed with the program name
|
6
|
-
def pute(message=
|
6
|
+
def pute(message = '')
|
7
7
|
$stderr.puts "#{$0}: #{message}"
|
8
8
|
end
|
9
9
|
|
@@ -12,6 +12,6 @@ begin
|
|
12
12
|
|
13
13
|
MyShows::CLI.start(ARGV)
|
14
14
|
rescue Interrupt
|
15
|
-
pute
|
15
|
+
pute 'Quitting...'
|
16
16
|
exit 1
|
17
17
|
end
|
data/lib/my_shows.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
require 'my_shows/version'
|
5
5
|
|
6
|
-
require
|
6
|
+
require 'bundler/setup'
|
7
7
|
|
8
8
|
require 'netrc'
|
9
9
|
require 'fuzzystringmatch'
|
@@ -29,21 +29,21 @@ module MyShows
|
|
29
29
|
MyShows::Show.client = SidereelClient.new(*self.credentials)
|
30
30
|
end
|
31
31
|
|
32
|
-
def lookup_magnet_links
|
32
|
+
def lookup_magnet_links(shows)
|
33
33
|
shows.map { |show|
|
34
34
|
show.episode.torrent_link!
|
35
35
|
}.compact
|
36
36
|
end
|
37
37
|
|
38
|
-
def enque_to_download
|
38
|
+
def enque_to_download(links)
|
39
39
|
links.each do |link|
|
40
|
-
logger.
|
40
|
+
logger.info "Enque #{URI(link).to_s}"
|
41
41
|
sleep 5
|
42
|
-
Launchy::Application::General.new.open([
|
42
|
+
Launchy::Application::General.new.open([URI(link).to_s])
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
def start
|
46
|
+
def start(*args)
|
47
47
|
print_header
|
48
48
|
configure_client
|
49
49
|
shows = Show.next_episodes
|
@@ -58,7 +58,7 @@ module MyShows
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def print_episodes episodes
|
61
|
-
puts
|
61
|
+
puts 'Next episodes:'
|
62
62
|
episodes.each do |show|
|
63
63
|
episode = show.episode
|
64
64
|
puts "#{episode} [#{episode.magnet_link ? '✓'.colorize(:green) : '✗'.colorize(:red)}]"
|
data/lib/my_shows/episode.rb
CHANGED
@@ -2,7 +2,7 @@ require 'my_shows/the_pirate_bay_client'
|
|
2
2
|
|
3
3
|
module MyShows
|
4
4
|
class Episode
|
5
|
-
@@jarow
|
5
|
+
@@jarow = FuzzyStringMatch::JaroWinkler.create(:native)
|
6
6
|
@@tracker = ThePirateBayClient.new
|
7
7
|
|
8
8
|
attr_accessor :season, :episode, :show, :magnet_link
|
@@ -14,23 +14,37 @@ module MyShows
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def torrent_link!
|
17
|
-
|
17
|
+
special_authors = %w(PublicHD DIMENSION eztv \ )
|
18
|
+
sizes = %w(1080p 720p \ )
|
19
|
+
|
20
|
+
special_authors.each do |author|
|
21
|
+
sizes.each do |size|
|
22
|
+
keyword = [author, size].join(' ')
|
23
|
+
return self.magnet_link if torrent_link_with_ext_keyword(keyword)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def torrent_link_with_ext_keyword(keyword)
|
29
|
+
episode_search_query = "#{self.to_s} #{keyword}"
|
18
30
|
MyShows.logger.info "Looking for '#{episode_search_query}' ..."
|
19
31
|
|
20
32
|
begin
|
21
33
|
torrents = @@tracker.search(episode_search_query)
|
22
|
-
torrent
|
34
|
+
torrent = torrents.sort_by do |t|
|
35
|
+
@@jarow.getDistance(episode_search_query, t.name)
|
36
|
+
end.reverse.first
|
23
37
|
|
24
38
|
self.magnet_link = torrent && torrent.magnet_link
|
25
39
|
rescue => e
|
26
|
-
MyShows.logger.warn "Problem with looking torrent link"
|
40
|
+
MyShows.logger.warn "Problem with looking torrent link for '#{episode_search_query}'"
|
27
41
|
MyShows.logger.debug e.message
|
28
42
|
nil
|
29
43
|
end
|
30
44
|
end
|
31
45
|
|
32
46
|
def to_s
|
33
|
-
|
47
|
+
'%s s%02de%02d' % [show.name, season, episode]
|
34
48
|
end
|
35
49
|
end
|
36
50
|
end
|
@@ -4,7 +4,7 @@ require 'hashie'
|
|
4
4
|
|
5
5
|
class ThePirateBayClient
|
6
6
|
def connection
|
7
|
-
@connection ||= Faraday.new url: 'http://thepiratebay.
|
7
|
+
@connection ||= Faraday.new url: 'http://thepiratebay.is' do |conn|
|
8
8
|
conn.headers[:user_agent] = 'libcurl-agent/1.0'
|
9
9
|
conn.request :url_encoded
|
10
10
|
conn.response :logger, MyShows.logger
|
@@ -12,14 +12,18 @@ class ThePirateBayClient
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
def search
|
15
|
+
def search(query)
|
16
16
|
response = connection.get URI.escape("/search/#{query}/0/99/200")
|
17
|
-
Nokogiri::HTML(response.body)
|
18
|
-
|
17
|
+
html = Nokogiri::HTML(response.body)
|
18
|
+
html.css('#searchResult > tr').map do |row|
|
19
|
+
Hashie::Mash.new(name: row.at_css('.detName a').content,
|
20
|
+
magnet_link: row.at_css('a[href^=magnet]')['href'],
|
21
|
+
seeders: row.css('td')[-2].content.to_i)
|
19
22
|
end
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
23
26
|
if __FILE__ == $0
|
24
|
-
|
27
|
+
require 'my_shows'
|
28
|
+
p ThePirateBayClient.new.search('The Mentalist s05e20 PublicHD')
|
25
29
|
end
|
data/lib/my_shows/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_shows
|
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: 2013-
|
12
|
+
date: 2013-04-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: hashie
|
@@ -162,12 +162,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
162
162
|
- - ! '>='
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: '0'
|
165
|
+
segments:
|
166
|
+
- 0
|
167
|
+
hash: 3563414062259935485
|
165
168
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
169
|
none: false
|
167
170
|
requirements:
|
168
171
|
- - ! '>='
|
169
172
|
- !ruby/object:Gem::Version
|
170
173
|
version: '0'
|
174
|
+
segments:
|
175
|
+
- 0
|
176
|
+
hash: 3563414062259935485
|
171
177
|
requirements: []
|
172
178
|
rubyforge_project:
|
173
179
|
rubygems_version: 1.8.25
|