torrentz 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,2 +1,20 @@
1
1
  #!/usr/bin/env rake
2
2
  require "bundler/gem_tasks"
3
+
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+
7
+ task :default => :test
8
+
9
+ Rake::TestTask.new do |t|
10
+ t.libs << 'test'
11
+ t.pattern = "test/**/*_test.rb"
12
+ t.verbose = true
13
+ end
14
+ Rake::Task['test'].comment = "Run all tests"
15
+
16
+ Rake::TestTask.new('integration') do |t|
17
+ t.libs << 'test'
18
+ t.pattern = "test/integration/*_test.rb"
19
+ t.verbose = true
20
+ end
@@ -1,7 +1,11 @@
1
+ require 'addressable/uri'
2
+
1
3
  module Torrentz
2
4
  class Fetch
3
5
  include Torrentz::Logger
4
6
 
7
+ attr_accessor :url
8
+
5
9
  def initialize(url)
6
10
  @url = url
7
11
  end
@@ -24,14 +28,14 @@ module Torrentz
24
28
  end
25
29
  end
26
30
 
27
- return nil
31
+ return torrent_from_torrentz_url
28
32
  end
29
33
 
30
34
  def get_magnet
31
35
  candidate_urls.each do |candidate_url|
32
36
  case candidate_url
33
37
  when /thepiratebay/
34
- logger.info "Found Piratebay!"
38
+ logger.info "Found Piratebay: #{candidate_url}"
35
39
  return PirateBay.new(candidate_url).get
36
40
  end
37
41
  end
@@ -40,7 +44,7 @@ module Torrentz
40
44
  end
41
45
 
42
46
  def torrentz_doc
43
- @torrentz_doc ||= Nokogiri::HTML(open(@url))
47
+ @torrentz_doc ||= Nokogiri::HTML(open(Addressable::URI.encode(url)))
44
48
  end
45
49
 
46
50
  def candidate_urls
@@ -49,6 +53,13 @@ module Torrentz
49
53
  end
50
54
  end
51
55
 
56
+ ##
57
+ # Uses torcache to try to fetch a torrent.
58
+ def torrent_from_torrentz_url
59
+ torrent_id = url.split("/").last
60
+ "https://torcache.net/torrent/#{torrent_id}.torrent"
61
+ end
62
+
52
63
  class Simple
53
64
  include Torrentz::Logger
54
65
 
@@ -57,7 +68,7 @@ module Torrentz
57
68
  end
58
69
 
59
70
  def doc
60
- @doc ||= Nokogiri::HTML(open(@url))
71
+ @doc ||= Nokogiri::HTML(open(Addressable::URI.encode(@url)))
61
72
  end
62
73
  end
63
74
 
@@ -5,5 +5,9 @@ module Torrentz
5
5
  def logger
6
6
  @@logger ||= ::Logger.new($stdout)
7
7
  end
8
+
9
+ def logger=(logger)
10
+ @@logger = logger
11
+ end
8
12
  end
9
13
  end
@@ -1,3 +1,3 @@
1
1
  module Torrentz
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,28 @@
1
+ require 'test_helper'
2
+
3
+ describe Torrentz do
4
+ it 'will find a file that resembles what was queried' do
5
+ [
6
+ 'Big Bang Theory S05E04 720p',
7
+ 'House S01E01'
8
+ ].each do |search|
9
+ result = Torrentz.get(search)
10
+ logger.info result.inspect
11
+
12
+ torrent_info = Typhoeus::Request.get(result[:torrent], :follow_location => true).body.bdecode
13
+ torrent_name = torrent_info['info']['name']
14
+
15
+ size_difference = torrent_name.size - search.size
16
+ size_difference * -1 if size_difference < 0
17
+
18
+ smallest = [torrent_name.size, search.size].min
19
+ distance = Text::Levenshtein.distance(torrent_name, search)
20
+ logger.info "Distance of result: #{distance}"
21
+
22
+ difference = (distance - size_difference) / smallest.to_f
23
+ logger.info "Difference of result: #{difference}"
24
+
25
+ difference.must_be_within_delta 0, 0.2
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'minitest/autorun'
4
+ require 'minitest/spec'
5
+ require 'open-uri'
6
+ require 'text'
7
+ require 'bencode'
8
+ require 'typhoeus'
9
+ require 'torrentz'
10
+
11
+ begin
12
+ require 'ruby-debug'
13
+ rescue LoadError; end
14
+
15
+ include Torrentz::Logger
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ describe Torrentz::Fetch do
4
+ test 'truth' do
5
+ assert true
6
+ end
7
+ end
@@ -17,4 +17,9 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency "rack"
19
19
  gem.add_dependency "nokogiri"
20
+ gem.add_dependency "addressable"
21
+
22
+ gem.add_development_dependency "text"
23
+ gem.add_development_dependency "typhoeus"
24
+ gem.add_development_dependency "torrent-ruby"
20
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torrentz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-09 00:00:00.000000000 Z
12
+ date: 2012-03-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70201271885300 !ruby/object:Gem::Requirement
16
+ requirement: &70148867837020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70201271885300
24
+ version_requirements: *70148867837020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70201271884500 !ruby/object:Gem::Requirement
27
+ requirement: &70148867836360 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,51 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70201271884500
35
+ version_requirements: *70148867836360
36
+ - !ruby/object:Gem::Dependency
37
+ name: addressable
38
+ requirement: &70148867835740 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70148867835740
47
+ - !ruby/object:Gem::Dependency
48
+ name: text
49
+ requirement: &70148867835100 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70148867835100
58
+ - !ruby/object:Gem::Dependency
59
+ name: typhoeus
60
+ requirement: &70148867834480 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70148867834480
69
+ - !ruby/object:Gem::Dependency
70
+ name: torrent-ruby
71
+ requirement: &70148867834060 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70148867834060
36
80
  description: torrentz.eu ruby client to search and download torrentz & magnets
37
81
  email:
38
82
  - mrsimo@gmail.com
@@ -50,6 +94,9 @@ files:
50
94
  - lib/torrentz/logger.rb
51
95
  - lib/torrentz/search.rb
52
96
  - lib/torrentz/version.rb
97
+ - test/integration/fetch_test.rb
98
+ - test/test_helper.rb
99
+ - test/torrentz/fetch_test.rb
53
100
  - torrentz.gemspec
54
101
  homepage: https://github.com/mrsimo/ruby-torrentz
55
102
  licenses: []
@@ -75,4 +122,7 @@ rubygems_version: 1.8.10
75
122
  signing_key:
76
123
  specification_version: 3
77
124
  summary: torrentz.eu ruby client to search and download torrentz & magnets
78
- test_files: []
125
+ test_files:
126
+ - test/integration/fetch_test.rb
127
+ - test/test_helper.rb
128
+ - test/torrentz/fetch_test.rb