torrentify 0.3
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 +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +10 -0
- data/.rubocop.yml +11 -0
- data/.travis.yml +13 -0
- data/Gemfile +10 -0
- data/README.md +2 -0
- data/Rakefile +51 -0
- data/lib/manager/mechanize_manager.rb +28 -0
- data/lib/manager/sites/kickass_parser.rb +72 -0
- data/lib/model/torrent_model.rb +10 -0
- data/lib/torrentify.rb +11 -0
- data/test/manager/mechanize_manager_test.rb +55 -0
- data/test/manager/sites/kickass_parser_test.rb +32 -0
- data/test/test_helper.rb +6 -0
- data/test/torrentify_test.rb +11 -0
- data/torrentify.gemspec +37 -0
- metadata +182 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2cd02c015cbff3bb92376671f4dacbc6bf24aaec
|
4
|
+
data.tar.gz: ab3af8ef8a46196506b5f8bddbdf7f2afac5de4d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c3aeff0508d82e7eb58dab4cc294f55032527911f9d8c42d4cea5f5aab74a6e97425efe1525c07a37757e3797bfc29cfaef66d64796675794aa6f023fdbc3b1c
|
7
|
+
data.tar.gz: c5c9d03012369271d566fdf158315236a2cffbdc7547fd29a50af50940f9864b6de21f479ae0c1fca2d40cee4a79a3c2096b5416b8213ce78adcfde530f1368b
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
repo_token: Zj3HYNTGP7lW6SiQaLNTZYzPIbktefvuA
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.0.0
|
4
|
+
|
5
|
+
before_install: gem install bundler -v 1.10.6
|
6
|
+
|
7
|
+
env:
|
8
|
+
global:
|
9
|
+
- CODECLIMATE_REPO_TOKEN="dde4ba83df1f56ca989e97fa0ce037374f2aca04225a15f0e06f6a597e0749e2"
|
10
|
+
|
11
|
+
after_success:
|
12
|
+
- bundle exec rake codeclimate
|
13
|
+
- bundle exec rake coveralls
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
|
5
|
+
desc 'Clean, test and install app'
|
6
|
+
task :default => [:test, :install]
|
7
|
+
|
8
|
+
desc 'test'
|
9
|
+
task :test => [:clean, :unitTest, :rubocop]
|
10
|
+
|
11
|
+
desc 'Remove coverage and pkg dirs before compilation'
|
12
|
+
task :clean do
|
13
|
+
rm_rf %w(coverage pkg)
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Run RuboCop - Tool for detecting codestyle violations'
|
17
|
+
task :rubocop do
|
18
|
+
require 'rubocop/rake_task'
|
19
|
+
RuboCop::RakeTask.new
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'Run Unittests'
|
23
|
+
Rake::TestTask.new(:unitTest) do |t|
|
24
|
+
t.libs << 'test'
|
25
|
+
t.verbose = false
|
26
|
+
t.test_files = FileList['test/*_test.rb', 'test/sites/*_test.rb']
|
27
|
+
end
|
28
|
+
|
29
|
+
desc 'Run codeclimate - Sends coverage info to CodeClimate when in CI'
|
30
|
+
task :codeclimate => :test do
|
31
|
+
require 'simplecov'
|
32
|
+
require 'codeclimate-test-reporter'
|
33
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
34
|
+
SimpleCov::Formatter::HTMLFormatter,
|
35
|
+
CodeClimate::TestReporter::Formatter
|
36
|
+
]
|
37
|
+
CodeClimate::TestReporter::Formatter.new.format(SimpleCov.result)
|
38
|
+
end
|
39
|
+
|
40
|
+
require 'coveralls/rake/task'
|
41
|
+
Coveralls::RakeTask.new
|
42
|
+
desc 'Run Coveralls - Sends coverage info to coveralls.io when in CI'
|
43
|
+
task :coveralls => [:test, 'coveralls:push'] do
|
44
|
+
require 'simplecov'
|
45
|
+
require 'coveralls'
|
46
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
47
|
+
SimpleCov::Formatter::HTMLFormatter,
|
48
|
+
Coveralls::SimpleCov::Formatter
|
49
|
+
]
|
50
|
+
Coveralls.wear_merged!
|
51
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mechanize'
|
4
|
+
require_relative 'sites/kickass_parser'
|
5
|
+
|
6
|
+
# Manager responsible for scraping webpagem
|
7
|
+
class MechanizeManager
|
8
|
+
def initialize
|
9
|
+
end
|
10
|
+
|
11
|
+
# Module responsible for calling mechanize
|
12
|
+
module Agent
|
13
|
+
def self.get_web_page(url)
|
14
|
+
agent = Mechanize.new
|
15
|
+
agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
16
|
+
agent.get(url)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def search_kickass(search_term)
|
21
|
+
white_space = '%20'
|
22
|
+
url = 'https://kat.cr/usearch/' << search_term.gsub(' ', white_space)
|
23
|
+
puts "Searching for '#{search_term}' on kickass"
|
24
|
+
page = Agent.get_web_page(url)
|
25
|
+
KickassParser.new(page).main_divs
|
26
|
+
page
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require_relative '../../model/torrent_model'
|
4
|
+
|
5
|
+
# Class responsible for parsing
|
6
|
+
# the page response from kickass
|
7
|
+
class KickassParser
|
8
|
+
def initialize(page)
|
9
|
+
@page = page
|
10
|
+
end
|
11
|
+
|
12
|
+
# Parse values from html
|
13
|
+
module Parser
|
14
|
+
def self.seeders(div)
|
15
|
+
links = div.search(".//td[@class='red lasttd center']")
|
16
|
+
value = ''
|
17
|
+
links.each do |link|
|
18
|
+
value = link.content
|
19
|
+
end
|
20
|
+
value
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.leechers(div)
|
24
|
+
links = div.search(".//td[@class='green center']")
|
25
|
+
value = ''
|
26
|
+
links.each do |link|
|
27
|
+
value = link.content
|
28
|
+
end
|
29
|
+
value
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.size(div)
|
33
|
+
links = div.search(".//td[@class='nobr center']")
|
34
|
+
value = ''
|
35
|
+
links.each do |link|
|
36
|
+
value = link.content
|
37
|
+
end
|
38
|
+
value
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.torrent_url(div)
|
42
|
+
links = div.search(".//a[@title='Download torrent file']")
|
43
|
+
value = ''
|
44
|
+
links.each do |link|
|
45
|
+
value = link.attributes['href']
|
46
|
+
end
|
47
|
+
value
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.torrent_name(div)
|
51
|
+
links = div.search(".//a[@class='cellMainLink']")
|
52
|
+
value = ''
|
53
|
+
links.each do |link|
|
54
|
+
value = link.content
|
55
|
+
end
|
56
|
+
value
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def main_divs
|
61
|
+
divs = @page.search(".//tr[@class='even' or @class='odd']")
|
62
|
+
divs.each do |div|
|
63
|
+
puts '-----------------'
|
64
|
+
puts Parser.torrent_url(div)
|
65
|
+
puts Parser.torrent_name(div)
|
66
|
+
puts Parser.size(div)
|
67
|
+
puts Parser.seeders(div)
|
68
|
+
puts Parser.leechers(div)
|
69
|
+
end
|
70
|
+
divs
|
71
|
+
end
|
72
|
+
end
|
data/lib/torrentify.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
require_relative '../../lib/mechanize_manager'
|
4
|
+
|
5
|
+
# Tests for code
|
6
|
+
class TestMechanizeManagerClass < Test::Unit::TestCase
|
7
|
+
class << self
|
8
|
+
def startup
|
9
|
+
puts 'Getting page and storing in class for reuse'
|
10
|
+
begin
|
11
|
+
search_term = 'a pigeon sat on a branch reflecting on existence'
|
12
|
+
@@page = MechanizeManager.new.search_kickass(search_term)
|
13
|
+
rescue ResponseCodeError
|
14
|
+
puts 'error getting page'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def shutdown
|
19
|
+
end
|
20
|
+
|
21
|
+
def suite
|
22
|
+
mysuite = super
|
23
|
+
def mysuite.run(*args)
|
24
|
+
TestMechanizeManagerClass.startup
|
25
|
+
super
|
26
|
+
TestMechanizeManagerClass.shutdown
|
27
|
+
end
|
28
|
+
mysuite
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def setup
|
33
|
+
puts 'runs before each test'
|
34
|
+
end
|
35
|
+
|
36
|
+
def teardown
|
37
|
+
puts 'runs after each test'
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_get_web_page_kickass
|
41
|
+
assert_not_nil @@page
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Capture of stdout to STDOUT var
|
46
|
+
module Kernel
|
47
|
+
def capture_stdout
|
48
|
+
out = StringIO.new
|
49
|
+
$stdout = out
|
50
|
+
yield
|
51
|
+
return out
|
52
|
+
ensure
|
53
|
+
$stdout = STDOUT
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
require_relative '../../test_helper'
|
3
|
+
|
4
|
+
require_relative '../../../lib/sites/kickass_parser'
|
5
|
+
require_relative '../../../lib/mechanize_manager'
|
6
|
+
|
7
|
+
# Tests for kickass
|
8
|
+
class TestKickassClass < Test::Unit::TestCase
|
9
|
+
def test_main_divs
|
10
|
+
search_term = 'a pigeon sat on a branch reflecting on existence'
|
11
|
+
page = MechanizeManager.new.search_kickass(search_term)
|
12
|
+
parser = KickassParser.new(page)
|
13
|
+
out = capture_stdout do
|
14
|
+
result = parser.main_divs
|
15
|
+
assert_not_nil result
|
16
|
+
end
|
17
|
+
assert_not_nil out
|
18
|
+
puts out.string
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Capture of stdout to STDOUT var
|
23
|
+
module Kernel
|
24
|
+
def capture_stdout
|
25
|
+
out = StringIO.new
|
26
|
+
$stdout = out
|
27
|
+
yield
|
28
|
+
return out
|
29
|
+
ensure
|
30
|
+
$stdout = STDOUT
|
31
|
+
end
|
32
|
+
end
|
data/test/test_helper.rb
ADDED
data/torrentify.gemspec
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'torrentify'
|
7
|
+
spec.version = 0.3
|
8
|
+
spec.authors = ['david eriksson']
|
9
|
+
spec.email = ['davideriksson@swedenmail.com']
|
10
|
+
|
11
|
+
spec.summary = %w(Baseapp for webscraping torrent-sites)
|
12
|
+
spec.description = %w(Baseapp for webscraping torrent-sites)
|
13
|
+
spec.homepage = 'http://seppaleinen.github.io/torrentify'
|
14
|
+
|
15
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
16
|
+
# delete this section to allow pushing this gem to any host.
|
17
|
+
if spec.respond_to?(:metadata)
|
18
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
19
|
+
else
|
20
|
+
fail 'RubyGems 2.0 or nwr is required to protect against public gem pushes'
|
21
|
+
end
|
22
|
+
|
23
|
+
#spec.files = `git ls-files`.split($\).reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
+
spec.files = `git ls-files`.split($\)
|
25
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
26
|
+
spec.require_paths = ['lib']
|
27
|
+
|
28
|
+
spec.add_runtime_dependency 'mechanize', '2.7.3'
|
29
|
+
spec.add_development_dependency 'simplecov', '>= 0.7.1', '< 1.0.0'
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.10.6'
|
31
|
+
spec.add_development_dependency 'rake', '~> 10.4.2'
|
32
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '0.4.8'
|
33
|
+
spec.add_development_dependency 'coveralls', '0.8.2'
|
34
|
+
#spec.add_development_dependency 'rspec', '3.3.0'
|
35
|
+
spec.add_development_dependency 'test-unit', '3.1.3'
|
36
|
+
spec.add_development_dependency 'rubocop', '~> 0.33.0'
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,182 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: torrentify
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.3'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- david eriksson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mechanize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.7.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.7.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: simplecov
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.7.1
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.0.0
|
37
|
+
type: :development
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.7.1
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 1.0.0
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: bundler
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.10.6
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.10.6
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rake
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: 10.4.2
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 10.4.2
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: codeclimate-test-reporter
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 0.4.8
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - '='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.4.8
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: coveralls
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - '='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 0.8.2
|
96
|
+
type: :development
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.8.2
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: test-unit
|
105
|
+
requirement: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 3.1.3
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - '='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 3.1.3
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rubocop
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: 0.33.0
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 0.33.0
|
131
|
+
description: '["Baseapp", "for", "webscraping", "torrent-sites"]'
|
132
|
+
email:
|
133
|
+
- davideriksson@swedenmail.com
|
134
|
+
executables: []
|
135
|
+
extensions: []
|
136
|
+
extra_rdoc_files: []
|
137
|
+
files:
|
138
|
+
- ".coveralls.yml"
|
139
|
+
- ".gitignore"
|
140
|
+
- ".rubocop.yml"
|
141
|
+
- ".travis.yml"
|
142
|
+
- Gemfile
|
143
|
+
- README.md
|
144
|
+
- Rakefile
|
145
|
+
- lib/manager/mechanize_manager.rb
|
146
|
+
- lib/manager/sites/kickass_parser.rb
|
147
|
+
- lib/model/torrent_model.rb
|
148
|
+
- lib/torrentify.rb
|
149
|
+
- test/manager/mechanize_manager_test.rb
|
150
|
+
- test/manager/sites/kickass_parser_test.rb
|
151
|
+
- test/test_helper.rb
|
152
|
+
- test/torrentify_test.rb
|
153
|
+
- torrentify.gemspec
|
154
|
+
homepage: http://seppaleinen.github.io/torrentify
|
155
|
+
licenses: []
|
156
|
+
metadata:
|
157
|
+
allowed_push_host: https://rubygems.org
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - ">="
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.4.6
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: '["Baseapp", "for", "webscraping", "torrent-sites"]'
|
178
|
+
test_files:
|
179
|
+
- test/manager/mechanize_manager_test.rb
|
180
|
+
- test/manager/sites/kickass_parser_test.rb
|
181
|
+
- test/test_helper.rb
|
182
|
+
- test/torrentify_test.rb
|