proxtopus 0.0.31 → 0.0.35
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 +8 -8
- data/lib/proxtopus/client.rb +18 -9
- data/lib/proxtopus/proxy.rb +17 -3
- data/lib/proxtopus/request.rb +29 -6
- data/lib/proxtopus/resource.rb +36 -23
- data/lib/proxtopus/resource_set.rb +3 -3
- data/lib/proxtopus/response.rb +19 -10
- data/lib/proxtopus/response_parser.rb +24 -14
- data/lib/proxtopus.rb +5 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
N2QzNWNhM2NhOTJhNjVlODBjOGU1ZjhiOGM4N2Q5NjE5NmRlMTA3ZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTgxYTQ3NzFiMTNkMTVkOTg3NjBlMzFkNWM3MjRkMmJlZDhmZmQ5Ng==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Zjc4NmVhOTM2NmNkNDZkZjQ5NzIyMDk3NDVmYTQwZTk4MTlmOGQ4MjM4NmM3
|
10
|
+
MWY0NDg3YjU4ZDBmZjkxNzZlZjhhZjEwNGU1NDI4NTQ1ZjgwNjZiNDI2NWQ3
|
11
|
+
NjkyNGE1MTUyY2ZiYWVmODFmZTVjYjI3MDllMjNiMzBmM2VhMTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzVkNzZhYjg1NDRhYzUyZTY0NGQzZWVjNWE2YjNlZTdkMzgxYzhmMjQxNWM1
|
14
|
+
NmIyMDVkMThkZjQ4MWJjNTQ5M2NiY2VmYWRiYzE1MjdkNmNkM2QwYmU5YmZh
|
15
|
+
NDE0OTgxMzc5YWNhYTgzNDFmODY2NWEyZjZiZjg2OTc3MWM4NzE=
|
data/lib/proxtopus/client.rb
CHANGED
@@ -16,8 +16,8 @@ module Proxtopus
|
|
16
16
|
@resources = ResourceSet.new(resources)
|
17
17
|
@proxies = ProxySet.new
|
18
18
|
self
|
19
|
-
rescue => e
|
20
|
-
|
19
|
+
#rescue => e
|
20
|
+
# puts "Proxtopus::Client -- #{e.inspect}"
|
21
21
|
end
|
22
22
|
|
23
23
|
# p.collect({:cs => ['US'], etc...})
|
@@ -26,22 +26,31 @@ module Proxtopus
|
|
26
26
|
#use_opts = (opts.nil?)? api_options : opts
|
27
27
|
#get(use_opts)
|
28
28
|
@resources.each do |resource|
|
29
|
-
|
29
|
+
response = Request.get(resource)
|
30
|
+
#puts response.proxies.inspect
|
31
|
+
#gets
|
32
|
+
@proxies.push(response.proxies)
|
30
33
|
end
|
31
|
-
|
32
|
-
puts
|
34
|
+
#puts "[@proxies in Client]"
|
35
|
+
#puts @proxies.inspect
|
36
|
+
#puts
|
37
|
+
#puts
|
38
|
+
#gets
|
39
|
+
@proxies
|
40
|
+
#rescue => e
|
41
|
+
# puts "Proxtopus::Client -- #{e.inspect}"
|
33
42
|
end
|
34
43
|
|
35
44
|
def random_proxy
|
36
45
|
@proxies[rand(0..(@proxies.count-1))]
|
37
|
-
rescue => e
|
38
|
-
|
46
|
+
#rescue => e
|
47
|
+
# puts "Proxtopus::Client -- #{e.inspect}"
|
39
48
|
end
|
40
49
|
|
41
50
|
def delete_proxy(proxy)
|
42
51
|
@proxies.delete(proxy)
|
43
|
-
rescue => e
|
44
|
-
|
52
|
+
#rescue => e
|
53
|
+
# puts "Proxtopus::Client -- #{e.inspect}"
|
45
54
|
end
|
46
55
|
|
47
56
|
private
|
data/lib/proxtopus/proxy.rb
CHANGED
@@ -4,11 +4,25 @@ module Proxtopus
|
|
4
4
|
attr_accessor :host, :port, :protocol, :country, :anonymity
|
5
5
|
|
6
6
|
def initialize(host, port, protocol, country, anonymity)
|
7
|
-
@host = host.to_s
|
7
|
+
@host = host.to_s.downcase
|
8
8
|
@port = port.to_i
|
9
|
-
@protocol = protocol.to_s
|
9
|
+
@protocol = protocol.to_s.downcase
|
10
10
|
@country = country.to_s
|
11
|
-
|
11
|
+
if anonymity =~ /h(igh(ly)?)?\s*a(non(ymous)?)?\s*(p(roxy)?)?/ix
|
12
|
+
@anonymity = 'HAP'
|
13
|
+
elsif anonymity =~ /a(non(ymous)?)?\s*(p(roxy)?)?/ix
|
14
|
+
@anonymity = 'AP'
|
15
|
+
elsif anonymity =~ /t(rans(parent)?)?\s*(p(roxy)?)?/ix
|
16
|
+
@anonymity = 'TP'
|
17
|
+
else
|
18
|
+
puts "Invalid anonymity '#{anonymity}'... ignoring."
|
19
|
+
@anonymity = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
#puts "[Initialized Proxy]"
|
23
|
+
#puts "#{@procotol}://#{@host}:#{@port} w/ #{@anonymity},#{@country}"
|
24
|
+
#puts
|
25
|
+
#puts
|
12
26
|
end
|
13
27
|
|
14
28
|
def ==(other)
|
data/lib/proxtopus/request.rb
CHANGED
@@ -1,16 +1,39 @@
|
|
1
1
|
module Proxtopus
|
2
|
-
class Request# < Mechanize
|
2
|
+
# class Request# < Mechanize
|
3
|
+
module Request
|
3
4
|
|
4
|
-
|
5
|
+
class << self
|
6
|
+
def get_page(resource)
|
7
|
+
raise ArgumentError, "Request.new() requires resource to be of type Proxtopus::Resource!" if !resource.is_a?(Proxtopus::Resource)
|
8
|
+
AGENT.get(resource.uri.to_s)
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(resource)
|
12
|
+
response = Response.new(get_page(resource), resource)
|
13
|
+
#puts "[response in Request]"
|
14
|
+
#puts response.inspect
|
15
|
+
#puts
|
16
|
+
#puts
|
17
|
+
#gets
|
18
|
+
response
|
19
|
+
#puts response.proxies.inspect
|
20
|
+
#gets
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
=begin
|
25
|
+
attr_reader :page
|
5
26
|
|
6
27
|
def initialize(resource)
|
7
28
|
#puts "to request"
|
8
29
|
raise ArgumentError, "Request.new() requires resource to be of type Proxtopus::Resource!" if !resource.is_a?(Proxtopus::Resource)
|
9
30
|
|
10
|
-
|
11
|
-
page = Mechanize.new.get(
|
12
|
-
|
31
|
+
#@resource = resource
|
32
|
+
@page = Mechanize.new.get(resource.uri.to_s)
|
33
|
+
#@response = Response.new(page.body, @resource.format, @resource.elements)
|
34
|
+
|
35
|
+
self
|
13
36
|
end
|
14
|
-
|
37
|
+
=end
|
15
38
|
end
|
16
39
|
end
|
data/lib/proxtopus/resource.rb
CHANGED
@@ -1,33 +1,46 @@
|
|
1
1
|
module Proxtopus
|
2
2
|
class Resource
|
3
3
|
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :url, :params, :format, :elements
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
6
|
+
def initialize(request, response)
|
7
|
+
raise ArgumentError, "Resource.new() expects request as a hash of config values!" if !request.is_a?(Hash)
|
8
|
+
raise ArgumentError, "Resource.new() expects response as a hash of config values!" if !response.is_a?(Hash)
|
9
|
+
|
10
|
+
#@request = resource[:request] || raise(ArgumentError, "Resource must have a specified request hash!")
|
11
|
+
#@response = resource[:response] || raise(ArgumentError, "Resource must have a specified resource hash!")
|
12
|
+
@url = request[:url] || raise(ArgumentError, "Resource must have a specified request url!")
|
13
|
+
@params = request[:params] || nil
|
14
|
+
@format = response[:format] || raise(ArgumentError, "Resource must have a specified resource format!")
|
15
|
+
@elements = response[:elements] || raise(ArgumentError, "Resource must have a specified resource set of elemenra!")
|
16
|
+
|
17
|
+
#if resource.is_a?(Proxtopus::Resource)
|
18
|
+
# @request = resource.request
|
19
|
+
# @response = resource.response
|
20
|
+
# @url = resource.url
|
21
|
+
# @params = resource.params
|
22
|
+
# @format = resource.format
|
23
|
+
# @elements = resource.elements
|
24
|
+
#elsif resource.is_a?(Hash)
|
25
|
+
# @request = resource[:request] || raise(ArgumentError, "Resource must have a specified request hash!")
|
26
|
+
# @response = resource[:response] || raise(ArgumentError, "Resource must have a specified resource hash!")
|
27
|
+
# @url = resource[:request][:url] || raise(ArgumentError, "Resource must have a specified request url!")
|
28
|
+
# @params = resource[:request][:params] || raise(ArgumentError, "Resource must have a specified request param!")
|
29
|
+
# @format = resource[:response][:format] || raise(ArgumentError, "Resource must have a specified resource format!")
|
30
|
+
# @elements = resource[:response][:elements] || raise(ArgumentError, "Resource must have a specified resource set of elemenra!")
|
31
|
+
#else
|
32
|
+
# raise ArgumentError, "Resource.new() expects resource as a Proxtopus::Resource or Hash!"
|
33
|
+
#end
|
27
34
|
end
|
28
35
|
|
29
36
|
def collect
|
30
|
-
Request.new(self)
|
37
|
+
#request = Request.new(self)
|
38
|
+
#results = Request.new(self).response.parsed
|
39
|
+
#puts "[RESULTS]"
|
40
|
+
#puts results.inspect
|
41
|
+
#puts
|
42
|
+
#puts
|
43
|
+
#results
|
31
44
|
end
|
32
45
|
|
33
46
|
def uri
|
@@ -2,8 +2,8 @@ module Proxtopus
|
|
2
2
|
class ResourceSet < Array
|
3
3
|
|
4
4
|
def initialize(resources=nil)
|
5
|
-
if resources
|
6
|
-
resources.each { |r|
|
5
|
+
if resources.is_a?(Array)
|
6
|
+
resources.each { |r| push(r) }
|
7
7
|
end
|
8
8
|
end
|
9
9
|
|
@@ -13,7 +13,7 @@ module Proxtopus
|
|
13
13
|
end
|
14
14
|
|
15
15
|
if resource.is_a?(Hash)
|
16
|
-
resource = Resource.new(resource)
|
16
|
+
resource = Resource.new(resource[:request], resource[:response])
|
17
17
|
end
|
18
18
|
|
19
19
|
super(resource) if !include?(resource)
|
data/lib/proxtopus/response.rb
CHANGED
@@ -1,27 +1,36 @@
|
|
1
1
|
module Proxtopus
|
2
2
|
class Response
|
3
3
|
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :page, :resource, :proxies
|
5
5
|
|
6
|
-
def initialize(page,
|
6
|
+
def initialize(page, resource)
|
7
7
|
#puts "to response"
|
8
8
|
#raise ArgumentError, "Response.new() expects page to be of type Mechanize::Page!" if !page.is_a?(Mechanize::Page)
|
9
9
|
#raise ArgumentError, "Response.new() expects format to be of type Symbol!" if !format.is_a?(Symbol)
|
10
10
|
#raise ArgumentError, "Response.new() expects elements to be of type Symbol!" if !format.is_a?(Symbol)
|
11
11
|
|
12
|
-
@
|
13
|
-
@
|
14
|
-
|
12
|
+
@page = page
|
13
|
+
@resource = resource
|
14
|
+
#@body = page
|
15
|
+
#@format = format
|
16
|
+
#@elements = elements
|
15
17
|
|
16
|
-
if format == :json
|
17
|
-
@
|
18
|
-
elsif format == :xml
|
19
|
-
@
|
18
|
+
if resource.format == :json
|
19
|
+
@proxies = Parser.json(page.body, resource.elements)
|
20
|
+
elsif resource.format == :xml
|
21
|
+
@proxies = Parser.xml(page.body, resource.elements)
|
20
22
|
#elsif format == :rss
|
21
23
|
# @parsed = Parser.rss(@body, @elements)
|
22
24
|
else
|
23
|
-
|
25
|
+
raise ArgumentError, "Format #{resource.format} is currenly unsupported... consider adding it =]"
|
24
26
|
end
|
27
|
+
|
28
|
+
#puts "[@proxies in Response]"
|
29
|
+
#puts @proxies.inspect
|
30
|
+
#puts
|
31
|
+
#puts
|
32
|
+
#gets
|
33
|
+
@proxies
|
25
34
|
end
|
26
35
|
|
27
36
|
end
|
@@ -5,30 +5,40 @@ module Proxtopus
|
|
5
5
|
class << self
|
6
6
|
def json(body, elements)
|
7
7
|
ret = ProxySet.new
|
8
|
-
els = JSON.parse(body)[elements[:root]]
|
8
|
+
els = JSON.parse(body)[elements[:root]] || nil
|
9
9
|
els.each do |el|
|
10
|
-
host = el[elements[:host]]
|
11
|
-
port = el[elements[:port]]
|
12
|
-
anonymity = el[elements[:anonymity]]
|
13
|
-
protocol = el[elements[:protocol]]
|
14
|
-
country = el[elements[:country]]
|
15
|
-
ret.push(Proxy.new(host, port,
|
10
|
+
host = el[elements[:host]] || nil
|
11
|
+
port = el[elements[:port]] || nil
|
12
|
+
anonymity = el[elements[:anonymity]] || nil
|
13
|
+
protocol = el[elements[:protocol]] || nil
|
14
|
+
country = el[elements[:country]] || nil
|
15
|
+
ret.push(Proxy.new(host, port, protocol, country, anonymity))
|
16
16
|
end
|
17
|
+
#puts "[ret in ResponseParser->json]"
|
18
|
+
#puts ret.inspect
|
19
|
+
#puts
|
20
|
+
#puts
|
21
|
+
#gets
|
17
22
|
ret
|
18
23
|
end
|
19
24
|
|
20
25
|
def xml(body, elements)
|
21
26
|
ret = ProxySet.new
|
22
27
|
doc = Nokogiri::HTML(body)
|
23
|
-
els = doc.xpath(elements[:root])
|
28
|
+
els = doc.xpath(elements[:root]) || nil
|
24
29
|
els.each do |el|
|
25
|
-
host = el.xpath(elements[:host]).text
|
26
|
-
port = el.xpath(elements[:port]).text
|
27
|
-
anonymity = el.xpath(elements[:anonymity]).text
|
28
|
-
protocol = el.xpath(elements[:protocol]).text
|
29
|
-
country = el.xpath(elements[:country]).text
|
30
|
-
ret.push(Proxy.new(host, port,
|
30
|
+
host = el.xpath(elements[:host]).text || nil
|
31
|
+
port = el.xpath(elements[:port]).text || nil
|
32
|
+
anonymity = el.xpath(elements[:anonymity]).text || nil
|
33
|
+
protocol = el.xpath(elements[:protocol]).text || nil
|
34
|
+
country = el.xpath(elements[:country]).text || nil
|
35
|
+
ret.push(Proxy.new(host, port, protocol, country, anonymity))
|
31
36
|
end
|
37
|
+
#puts "[ret in ResponseParser->xml]"
|
38
|
+
#puts ret.inspect
|
39
|
+
#puts
|
40
|
+
#puts
|
41
|
+
#gets
|
32
42
|
ret
|
33
43
|
end
|
34
44
|
|
data/lib/proxtopus.rb
CHANGED
@@ -3,6 +3,7 @@ Bundler.require(:default)
|
|
3
3
|
|
4
4
|
require 'uri'
|
5
5
|
|
6
|
+
require_relative './proxtopus/countries/carmen'
|
6
7
|
require_relative './proxtopus/client'
|
7
8
|
require_relative './proxtopus/request'
|
8
9
|
require_relative './proxtopus/response_parser'
|
@@ -13,6 +14,8 @@ require_relative './proxtopus/proxy'
|
|
13
14
|
require_relative './proxtopus/proxy_set'
|
14
15
|
|
15
16
|
module Proxtopus
|
17
|
+
|
18
|
+
AGENT = Mechanize.new
|
16
19
|
|
17
20
|
class << self
|
18
21
|
# p = Proxtopus.new_client do
|
@@ -28,8 +31,8 @@ module Proxtopus
|
|
28
31
|
# Client.new(&block) if block_given?
|
29
32
|
#end
|
30
33
|
def client(resources_file)
|
31
|
-
resources = "[#{File.read(resources_file)}]".gsub!(/\r|\n|\s/,'')
|
32
|
-
Client.new(
|
34
|
+
resources = eval("[#{File.read(resources_file)}]".gsub!(/\r|\n|\s/,''))
|
35
|
+
Client.new(resources)
|
33
36
|
end
|
34
37
|
end
|
35
38
|
|