peerflixrb 0.1.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7923defe877bc6dad1ea6698fbf022b33d5a60fd
4
- data.tar.gz: 7cf7ceffaa4f693828bc581c8e804fd8d2932073
3
+ metadata.gz: 6be0fd92f01b850ea44badcb38422e6c68c4e6c5
4
+ data.tar.gz: 866101d388447ad1b22034a39980854625398ad5
5
5
  SHA512:
6
- metadata.gz: 0e87cfba2ff48d72d4329e5a08c301e1461ca8cdef580ea6a60b6c2496fb0708d0485987a89b834f38130f29d1decb21e56a03ea893426f55b5c6b1b188fb038
7
- data.tar.gz: bc124155b7804678a142ec38d81fe64b47cb7b3f5407f011ad6bc9826558b7af60e887c189c60805776ea7420b02920ab383d0785280043859b42a08657148a9
6
+ metadata.gz: b219e41fa771fcca740a82e682c1435e787d0027242d592bc36e8af310007818bb86a8318773ffd73017bafc624727c1e9e01c976bbf5e14ed49fa2637564bd0
7
+ data.tar.gz: 9609223d1a4b787afff08c045b1fca142d059263ff27491a37261fec1750c1fda3145e01ccf25b033adcfca535aa32310720e24132746e219e02c83c70801f5e
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Peerflixrb
4
4
 
5
- Wrapper for [peerflix](https://github.com/mafintosh/peerflix) with automatic search through [Kickass Torrents](kat.cr) and [Addic7ed](http://www.addic7ed.com/) (with [gem addic7ed](https://github.com/michaelbaudino/addic7ed-ruby)). It currently uses [VLC](http://www.videolan.org/vlc/index.html) as the player.
5
+ Wrapper for [peerflix](https://github.com/mafintosh/peerflix) with automatic search through [Kickass Torrents](kat.cr) and [Addic7ed](http://www.addic7ed.com/) (with [gem addic7ed](https://github.com/michaelbaudino/addic7ed-ruby)).
6
6
 
7
7
 
8
8
  ## Requirements
@@ -11,8 +11,6 @@ Make sure you have **peerflix** installed:
11
11
 
12
12
  $ npm install -g peerflix
13
13
 
14
- It currently supports VLC only as the media player (more to come in future releases).
15
-
16
14
 
17
15
  ## Installation
18
16
  Install the gem:
@@ -28,7 +26,7 @@ Pass a string with what you want to watch and it will try to fetch the file and
28
26
 
29
27
  You can play the video with subtitles with the ```-s``` option (Default: English). It will try and find the best match in [Addic7ed](http://www.addic7ed.com/).
30
28
 
31
- $ peerflixrb -s Game Of Thrones S05E01
29
+ $ peerflixrb -s Game Of Thrones S05E01 1080p
32
30
 
33
31
  Choose the language with ```-l LANGUAGE``` ([Available Languages](https://github.com/michaelbaudino/addic7ed-ruby/blob/master/lib/addic7ed/common.rb))
34
32
 
@@ -36,14 +34,17 @@ Choose the language with ```-l LANGUAGE``` ([Available Languages](https://github
36
34
 
37
35
  If you prefer to use your own subtitles file, you can do that with the ```-t SUBTITLE_FILE``` option.
38
36
 
39
- $ peerflix better call saul s02e04 -t subtitle_file.srt
37
+ $ peerflixrb better call saul s02e04 -t subtitle_file.srt
38
+
39
+ You can autoplay in VLC or MPlayer with the corresponding option.
40
40
 
41
+ $ peerflixrb --vlc the big bang theory s09e16 hdtv
41
42
 
42
- ## Future plans
43
43
 
44
- - Use cache if any.
45
- - Choose player (currently VLC).
44
+ ## Cache
46
45
 
46
+ The original peerflix takes care of cache so you can resume your downloads or watch them again.
47
+ peerflixrb will tell you where they are located so you can do as you like or leave them there till your OS takes care of it (it's stored in /tmp).
47
48
 
48
49
  ## Contributing
49
50
 
data/bin/peerflixrb CHANGED
@@ -1,18 +1,25 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env ruby -w
2
2
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), *%w( .. lib ))
3
3
 
4
- require 'addic7ed'
5
4
  require 'optparse'
6
5
  require 'peerflixrb'
7
6
 
8
7
  options = {}
9
- OptionParser.new do |opts|
8
+ optparse = OptionParser.new do |opts|
10
9
  opts.banner = 'Usage: peerflixrb [options] <search>'
11
10
 
12
11
  opts.on('-s', '--find-subtitles', 'Find subtitles on Addic7ed') do |s|
13
12
  options[:find_subtitles] = s
14
13
  end
15
14
 
15
+ opts.on('-m', '--mplayer', 'Autoplay in mplayer*') do
16
+ options[:video_player] = 'mplayer'
17
+ end
18
+
19
+ opts.on('-v', '--vlc', 'Autoplay in vlc*') do
20
+ options[:video_player] = 'vlc'
21
+ end
22
+
16
23
  opts.on('-t SUBTITLE_FILE', '--subtitles SUBTITLE_FILE', 'Use local subtitles') do |t|
17
24
  options[:subtitles] = t
18
25
  end
@@ -23,47 +30,44 @@ OptionParser.new do |opts|
23
30
 
24
31
  opts.on_tail('-h', '--help', 'Show this message') do
25
32
  puts opts
33
+ puts '* Autoplay can take several seconds to start since it needs to wait for the first piece'
26
34
  exit
27
35
  end
28
- end.parse!
36
+ end
29
37
 
30
- # Default language: English
31
- options[:language] ||= 'en'
38
+ optparse.parse!
32
39
 
33
40
  # Join arguments to create the search term
34
- options[:search] = ARGV.join ' '
35
- exit if options[:search].empty?
41
+ options[:search] = ARGV.join(' ')
42
+ if options[:search].empty?
43
+ puts optparse # Show usage if no search
44
+ exit
45
+ end
46
+
47
+ # Default language: English
48
+ options[:language] ||= 'en'
36
49
 
37
50
  # main
38
51
  # TODO: handle failing and invalid searches
39
52
  kat = Peerflixrb::KAT.new(options[:search])
53
+ cache_dir = "/tmp/torrent-stream/#{kat.info_hash}"
40
54
 
41
55
  # Subtitle search
42
- if options[:find_subtitles]
43
- begin
44
- ep = Addic7ed::Episode.new(kat.filename)
45
- sub_file = File.basename(ep.download_best_subtitle!(options[:language]))
46
- rescue Addic7ed::EpisodeNotFound
47
- puts "Episode not found on Addic7ed : #{ep.video_file.filename}."
48
- rescue Addic7ed::ShowNotFound
49
- puts "Show not found on Addic7ed : #{ep.video_file.filename}."
50
- rescue Addic7ed::NoSubtitleFound
51
- puts "No (acceptable) subtitle has been found on Addic7ed for #{ep.video_file.filename}."
52
- rescue Addic7ed::InvalidFilename
53
- puts "Addic7ed gem doesn't like the format passed. Skipping subtitles."
54
- end
55
- end
56
+ sub_file = if options[:find_subtitles]
57
+ Peerflixrb.find_subtitles(kat.filename, options[:language])
58
+ elsif options[:subtitles]
59
+ options[:subtitles]
60
+ end
56
61
 
57
62
  # Peerflix command build
58
63
  command = "peerflix '#{kat.magnet}'"
59
- command << " --subtitles '#{sub_file}'" unless sub_file.nil?
60
- command << " --subtitles '#{options[:subtitles]}'" if options[:subtitles]
61
- # TODO: choose video player (default: VLC)
62
- command << ' --vlc'
63
- # TODO: pipe options and leave these as default
64
+ command << " --subtitles '#{sub_file}'" if sub_file
65
+ command << " --#{options[:video_player]}" if options[:video_player]
64
66
  command << ' -- --fullscreen'
65
67
 
66
68
  system command
67
69
 
68
70
  # Cleaning up
69
- FileUtils.rm sub_file unless sub_file.nil?
71
+ video_file = Dir["#{cache_dir}/**/*.{mkv,mp4,avi,wmv,mpg,flv,mov}"].first
72
+ FileUtils.cp(sub_file, File.dirname(video_file)) if sub_file
73
+ puts "Your downloads will be in #{cache_dir} for 3 days :)"
data/lib/peerflixrb.rb CHANGED
@@ -1,15 +1,30 @@
1
- require 'peerflixrb/version'
1
+ require 'addic7ed'
2
+ require 'cgi'
3
+ require 'erb'
2
4
  require 'nokogiri'
3
5
  require 'open-uri'
4
- require 'erb'
6
+ require 'peerflixrb/version'
5
7
  require 'yaml'
6
8
 
7
9
  module Peerflixrb
10
+ def self.find_subtitles(video_file, language)
11
+ episode = Addic7ed::Episode.new(video_file)
12
+ return File.basename episode.download_best_subtitle!(language)
13
+ rescue Addic7ed::EpisodeNotFound
14
+ puts "Episode not found on Addic7ed : #{episode.video_file.filename}."
15
+ rescue Addic7ed::ShowNotFound
16
+ puts "Show not found on Addic7ed : #{episode.video_file.filename}."
17
+ rescue Addic7ed::NoSubtitleFound
18
+ puts "No (acceptable) subtitle has been found on Addic7ed for #{episode.video_file.filename}."
19
+ rescue Addic7ed::InvalidFilename
20
+ puts "Addic7ed gem doesn't like the format passed. Skipping subtitles."
21
+ end
22
+
8
23
  ##
9
24
  # Extract file info and magnet link from the first match of your search
10
25
  # KAT.new("Suits s05e16 1080p")
11
26
  class KAT
12
- attr_accessor :url, :page, :filename, :magnet
27
+ attr_accessor :url
13
28
 
14
29
  def initialize(search)
15
30
  @url = "https://kat.cr/usearch/#{ERB::Util.url_encode(search)}/"
@@ -20,17 +35,27 @@ module Peerflixrb
20
35
  end
21
36
 
22
37
  def filename
23
- @filename ||= CGI.unescape(params['name']) + '.' + params['extension']
38
+ @filename ||= "#{CGI.unescape(params['name'])}.#{params['extension']}"
24
39
  end
25
40
 
26
41
  def magnet
27
42
  @magnet ||= params['magnet']
28
43
  end
29
44
 
45
+ def info_hash
46
+ @info_hash ||= extract_hash
47
+ end
48
+
30
49
  private
31
50
 
32
51
  def params
33
52
  @params ||= YAML.load page.at_css('.iaconbox > div')['data-sc-params']
34
53
  end
54
+
55
+ def extract_hash
56
+ # Extract magnet properties to a Hash
57
+ magnet_params = CGI.parse(URI.parse(magnet).query)
58
+ magnet_params['xt'].first.match(/[0-9A-F]+/).to_s.downcase
59
+ end
35
60
  end
36
61
  end
@@ -1,3 +1,3 @@
1
1
  module Peerflixrb
2
- VERSION = '0.1.0'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: peerflixrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Marchante