proxtopus 0.0.31 → 0.0.35
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|