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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NzBmMDU3N2E2MzY1YmZkM2Q3ZjI0ZWE5OGUxZTQ5MzlmNTg0NDA4Nw==
4
+ N2QzNWNhM2NhOTJhNjVlODBjOGU1ZjhiOGM4N2Q5NjE5NmRlMTA3ZA==
5
5
  data.tar.gz: !binary |-
6
- M2I3OTMxMzUxYjExMTQwNjJiMWY2MmVjOTdkZWQ2ZDdlYzZhYjBhZQ==
6
+ YTgxYTQ3NzFiMTNkMTVkOTg3NjBlMzFkNWM3MjRkMmJlZDhmZmQ5Ng==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Y2Q5ZGUzZjZlYWRkMjQzNjAwODcwMTZmYTE2ZjM0MDRjMWZlZjgwZDliNDNi
10
- MWIxZDY2MGI1M2JhMjdmYTQ2YjhlOWExZTAzYThlM2RlYTc5OWZkZmRlZDk0
11
- NWIzOWQzMDhhYjViOGUxODgwOGVhMjViOTJjNmRkYmYyYmUxZDE=
9
+ Zjc4NmVhOTM2NmNkNDZkZjQ5NzIyMDk3NDVmYTQwZTk4MTlmOGQ4MjM4NmM3
10
+ MWY0NDg3YjU4ZDBmZjkxNzZlZjhhZjEwNGU1NDI4NTQ1ZjgwNjZiNDI2NWQ3
11
+ NjkyNGE1MTUyY2ZiYWVmODFmZTVjYjI3MDllMjNiMzBmM2VhMTk=
12
12
  data.tar.gz: !binary |-
13
- NDk5MTQyMGQ3M2ZhYjVmZjQ3MDZmMjcyZDJhYjkxMmU1ZGE0NzllODc3MDcx
14
- ZGUwMWZlNWRkMzY4MDI4NzVjMjBlY2NhZTMzMGZjMmRkMjZiMWZiZjRjM2Jk
15
- NWYzODgwOWQ1MTcyNTNlNWNmODkzZTUyNmMwMzEyYjhjYmY1NjE=
13
+ YzVkNzZhYjg1NDRhYzUyZTY0NGQzZWVjNWE2YjNlZTdkMzgxYzhmMjQxNWM1
14
+ NmIyMDVkMThkZjQ4MWJjNTQ5M2NiY2VmYWRiYzE1MjdkNmNkM2QwYmU5YmZh
15
+ NDE0OTgxMzc5YWNhYTgzNDFmODY2NWEyZjZiZjg2OTc3MWM4NzE=
@@ -16,8 +16,8 @@ module Proxtopus
16
16
  @resources = ResourceSet.new(resources)
17
17
  @proxies = ProxySet.new
18
18
  self
19
- rescue => e
20
- puts "Proxtopus::Client -- #{e.inspect}"
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
- @proxies.push(resource.collect)
29
+ response = Request.get(resource)
30
+ #puts response.proxies.inspect
31
+ #gets
32
+ @proxies.push(response.proxies)
30
33
  end
31
- rescue => e
32
- puts "Proxtopus::Client -- #{e.inspect}"
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
- puts "Proxtopus::Client -- #{e.inspect}"
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
- puts "Proxtopus::Client -- #{e.inspect}"
52
+ #rescue => e
53
+ # puts "Proxtopus::Client -- #{e.inspect}"
45
54
  end
46
55
 
47
56
  private
@@ -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
- @anonymity = anonymity.to_s
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)
@@ -1,16 +1,39 @@
1
1
  module Proxtopus
2
- class Request# < Mechanize
2
+ # class Request# < Mechanize
3
+ module Request
3
4
 
4
- attr_reader :resource, :response
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
- @resource = resource
11
- page = Mechanize.new.get(@resource.uri.to_s)
12
- @response = Response.new(page.body, @resource.format, @resource.elements)
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
@@ -1,33 +1,46 @@
1
1
  module Proxtopus
2
2
  class Resource
3
3
 
4
- attr_reader :request, :response, :url, :params, :format, :elements
4
+ attr_reader :url, :params, :format, :elements
5
5
 
6
- def initialize(resource)
7
- #puts resource.class
8
- #puts
9
- #puts resource.inspect
10
- if resource.is_a?(Proxtopus::Resource)
11
- @request = resource.request
12
- @response = resource.response
13
- @url = resource.url
14
- @params = resource.params
15
- @format = resource.format
16
- @elements = resource.elements
17
- elsif resource.is_a?(Hash)
18
- @request = resource[:request] || raise(ArgumentError, "Resource must have a specified request hash!")
19
- @response = resource[:response] || raise(ArgumentError, "Resource must have a specified resource hash!")
20
- @url = resource[:request][:url] || raise(ArgumentError, "Resource must have a specified request url!")
21
- @params = resource[:request][:params] || raise(ArgumentError, "Resource must have a specified request param!")
22
- @format = resource[:response][:format] || raise(ArgumentError, "Resource must have a specified resource format!")
23
- @elements = resource[:response][:elements] || raise(ArgumentError, "Resource must have a specified resource set of elemenra!")
24
- else
25
- raise ArgumentError, "Resource.new() expects resource as a Proxtopus::Resource or Hash!"
26
- end
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).response.parsed
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| self.push(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)
@@ -1,27 +1,36 @@
1
1
  module Proxtopus
2
2
  class Response
3
3
 
4
- attr_reader :body, :format, :parsed
4
+ attr_reader :page, :resource, :proxies
5
5
 
6
- def initialize(page, format, elements)
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
- @body = page
13
- @format = format
14
- @elements = elements
12
+ @page = page
13
+ @resource = resource
14
+ #@body = page
15
+ #@format = format
16
+ #@elements = elements
15
17
 
16
- if format == :json
17
- @parsed = Parser.json(@body, @elements)
18
- elsif format == :xml
19
- @parsed = Parser.xml(@body, @elements)
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
- puts "Format #{format} is currenly unsupported... consider adding it =]"
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, anonymity, protocol, country))
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, anonymity, protocol, country))
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(eval(resources))
34
+ resources = eval("[#{File.read(resources_file)}]".gsub!(/\r|\n|\s/,''))
35
+ Client.new(resources)
33
36
  end
34
37
  end
35
38
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxtopus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.35
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan Barron