nnmClub_api 0.0.2 → 0.1.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: 976f79688d6f20d4756397a3283e2a05c8f6f363
4
- data.tar.gz: c7a6d73d22c4303e5b54d3d279ffd73d0dc02587
3
+ metadata.gz: 1ce245f8e634a48d98757a38effa29e3b12b3295
4
+ data.tar.gz: 02c33eb4380d1fd6f74f6dc8cd31a4813e21492e
5
5
  SHA512:
6
- metadata.gz: 845e8e6b5bab5bb3507a898690b19fd5382dfabe7e43b90aa4d7163103cded2e49a9f6fee984f23138e5efab7ca2d3d4994cfaa513994ac549792096a76fc6b6
7
- data.tar.gz: d427906ab75a852346ff794f71d537382eb2f772d7aa6a64222271ddfb9b6542297b1982f085f669f9b9ed69145a99e856ca93eee88864c457093428c76d9e78
6
+ metadata.gz: 664329d108174f638eb427945307d910f54636f1b0fc464b5d0abafbac5aab39473746cdf849790e83bf4cbb0b0a904f04a06fec9b830b326a85f6f102f00b38
7
+ data.tar.gz: 4fe5cd73fdcadea74e4381073c0410aebc814b7fdb052df0bc4efbb5e4c804d396f76ab06d11ad2d708e75fafecb7f1096c258c0677da64d294f7d2a05043aca
data/Guardfile CHANGED
@@ -1,9 +1,5 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
- guard :rspec do
1
+ guard :rspec, cmd: 'bundle exec rspec' do
5
2
  watch(%r{^spec/.+_spec\.rb$})
6
3
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
4
  watch('spec/spec_helper.rb') { "spec" }
8
- end
9
-
5
+ end
data/lib/nnmClub_api.rb CHANGED
@@ -1,53 +1,4 @@
1
1
  require "nnmClub_api/version"
2
- require "rubygems"
3
- require "mechanize"
4
- require "json"
5
-
6
- class NnmclubApi
7
- attr_accessor :agent, :result
8
-
9
- SEARCH_PAGE = 'http://nnm-club.me/forum/tracker.php'
10
-
11
- ORDER_OPTIONS = { date: 1, name: 2, downloads: 4, shows: 6, seeders: 10,
12
- leechers: 11, size: 7, last_post: 8, speed_up: 12,
13
- speed_down: 13, message_count: 5, last_seed: 9 }
14
- SORT_OPTIONS = {asc: 1, desc: 2}
15
-
16
- def initialize
17
- @agent = Mechanize.new
18
- @agent.user_agent_alias = "Mac Safari"
19
- end
20
-
21
- def result
22
- @result.to_json
23
- end
24
-
25
- #@param option [Hash] the format type, `:title`
26
- #@return [Hash] the options keys with search result
27
- def search(options = {})
28
- @result = []
29
- query = prepare_query_string options
30
- @agent.get query
31
- parse_search
32
- end
33
-
34
- private
35
- def prepare_query_string(options)
36
- SEARCH_PAGE+"?nm="+options[:title].gsub(/\s/,'%20')
37
- end
38
-
39
- def parse_search
40
- @agent.page.search("//table[@class='forumline tablesorter']/tbody/tr").map do |row|
41
- size = row.at("td[6]/u").text.to_i
42
- title = row.css(".topictitle").text.strip
43
- seeders = row.css('.seedmed').text.to_i
44
- leechers = row.css('.leechmed').text.to_i
45
- torrent_id = row.css('.topictitle').at('a')
46
-
47
- if !title.nil? && !title.empty? && !torrent_id.nil?
48
- @result.push ({ title: title, torrent_id: "http://nnm-club.me/forum/#{torrent_id.values.last}",
49
- seeders: seeders, leechers: leechers, size: size })
50
- end
51
- end
52
- end
53
- end
2
+ require "nnmClub_api/tracker"
3
+ require "nnmClub_api/search"
4
+ require "nnmClub_api/torrent"
@@ -0,0 +1,47 @@
1
+ require "uri"
2
+ require "open-uri"
3
+ require "nokogiri"
4
+
5
+ class Hash
6
+ def any_nil?
7
+ @result = false
8
+ self.keys.each { |key|
9
+ @result = self[key].nil? ? true : false
10
+ break if @result
11
+ }
12
+ @result
13
+ end
14
+ end
15
+
16
+
17
+ module NnmClub
18
+
19
+ class Search
20
+ attr_reader :torrents, :url
21
+ def initialize(query, category = nil)
22
+ torrents = []
23
+ query = URI.escape(query)
24
+ @url = NnmClub::URL+"nm=#{query}"+(!category.nil? ? "&c=#{category}" : "")
25
+
26
+ document = Nokogiri::HTML(open(@url))
27
+ document.css("table.forumline.tablesorter").css(".prow1",".prow2").each { |row|
28
+
29
+ size = row.at("td[6]/u").nil? ? nil : row.at("td[6]/u").text.to_i
30
+ title = row.css(".topictitle").empty? ? nil : row.css(".topictitle").text.strip
31
+ seeders = row.css(".seedmed").empty? ? nil : row.css(".seedmed").text.to_i
32
+ leechers = row.css(".leechmed").empty? ? nil : row.css(".leechmed").text.to_i
33
+ torrent_id = row.css(".topictitle").empty? ? nil : row.css(".topictitle").first[:href].split("=").last
34
+
35
+ torrent = { :title => title,
36
+ :size => size,
37
+ :seeders => seeders,
38
+ :leechers => leechers,
39
+ :torrent_id => torrent_id,
40
+ :tracker => NnmClub::ID
41
+ }
42
+ torrents.push(torrent) unless torrent.any_nil?
43
+ }
44
+ @torrents = torrents
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,16 @@
1
+ require "uri"
2
+ require "open-uri"
3
+ require "nokogiri"
4
+
5
+ module NnmClub
6
+ class Torrent
7
+ def self.find(torrent_id)
8
+ document = Nokogiri::HTML(open(NnmClub::TorrentURL+torrent_id))
9
+ postbody = document.css('.postbody').first
10
+ info = {:content => postbody.to_html( encoding: "UTF-8" ),
11
+ :image => postbody.css('var.postImg').first['title']
12
+ }
13
+ return info
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,6 @@
1
+ module NnmClub
2
+ ID = "nnmclub"
3
+ IMG = "http://nnm-club.me/favicon.ico"
4
+ URL = "http://nnm-club.me/forum/tracker.php?"
5
+ TorrentURL = "http://nnm-club.me/forum/viewtopic.php?t="
6
+ end
@@ -1,3 +1,3 @@
1
1
  module NnmClubApi
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/nnmClub_api.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = NnmClubApi::VERSION
9
9
  spec.authors = ["Baranov Sergey"]
10
10
  spec.email = ["sergey@drummer.ru"]
11
- spec.summary = %q{ Write a short summary. Required.}
12
- spec.description = %q{ Write a longer description. Optional.}
11
+ spec.summary = %q{NNM-Club torrent-tacker parser.}
12
+ spec.description = %q{Gem for parsing NoNaMe Club torrent-tracker.}
13
13
  spec.homepage = "https://github.com/gemoroy/nnmClub_api"
14
14
  spec.license = "MIT"
15
15
 
@@ -18,6 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.6"
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
22
  spec.add_development_dependency "rake"
23
- end
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "guard-rspec"
25
+
26
+ spec.add_dependency "nokogiri"
27
+ end
@@ -1,14 +1,45 @@
1
- require 'nnmClub_api'
1
+ require "nnmClub_api"
2
2
 
3
- describe "NnmclubApi " do
4
- before { @tracker = NnmclubApi.new('login', 'pass') }
5
- subject { @tracker }
3
+ describe "NnmClub" do
4
+ describe "Search" do
5
+ before {
6
+ @query = "ruby on rails"
7
+ @search = NnmClub::Search.new @query
8
+ @url = NnmClub::URL
9
+ }
10
+ it "should return correct url without category" do
11
+ expect(@search.url).to eq(@url+"nm=#{URI.escape(@query)}")
12
+ end
6
13
 
7
- describe "#search" do
8
- describe "with valid params" do
9
- it "returns link with term" do
10
- expect( @tracker.search(title: "Noize MC") ).to eq('http://nnm-club.me/forum/tracker.php?nm=Noize%20MC')
11
- end
14
+ it "should return correct url with category" do
15
+ @search = NnmClub::Search.new(@query,17)
16
+ expect(@search.url).to eq(@url+"nm=#{URI.escape(@query)}"+"&c=17")
12
17
  end
13
18
  end
19
+
20
+ describe "#torrents" do
21
+ before {
22
+ @query = "ruby on rails"
23
+ @search = NnmClub::Search.new @query
24
+ }
25
+
26
+ it "should return array" do
27
+ expect(@search.torrents.class).to eq([].class)
28
+ end
29
+
30
+ it "should retur array of 3 elements" do
31
+ expect(@search.torrents.length).to eq(3)
32
+ end
33
+ end
34
+
35
+ describe "Torrent" do
36
+ before {
37
+ @torrent_id = "728159"
38
+ @torrent = NnmClub::Torrent.find @torrent_id
39
+ }
40
+ it "should return @description" do
41
+ expect(@torrent.class).to eq({}.class)
42
+ end
43
+ end
44
+
14
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nnmClub_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Baranov Sergey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-24 00:00:00.000000000 Z
11
+ date: 2014-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +38,49 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- description: " Write a longer description. Optional."
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Gem for parsing NoNaMe Club torrent-tracker.
42
84
  email:
43
85
  - sergey@drummer.ru
44
86
  executables: []
@@ -53,6 +95,9 @@ files:
53
95
  - README.md
54
96
  - Rakefile
55
97
  - lib/nnmClub_api.rb
98
+ - lib/nnmClub_api/search.rb
99
+ - lib/nnmClub_api/torrent.rb
100
+ - lib/nnmClub_api/tracker.rb
56
101
  - lib/nnmClub_api/version.rb
57
102
  - nnmClub_api.gemspec
58
103
  - spec/nnmcluv_api_spec.rb
@@ -77,10 +122,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
122
  version: '0'
78
123
  requirements: []
79
124
  rubyforge_project:
80
- rubygems_version: 2.2.2
125
+ rubygems_version: 2.4.1
81
126
  signing_key:
82
127
  specification_version: 4
83
- summary: Write a short summary. Required.
128
+ summary: NNM-Club torrent-tacker parser.
84
129
  test_files:
85
130
  - spec/nnmcluv_api_spec.rb
86
131
  - spec/spec_helper.rb