proxy_fetcher 0.15.1 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 071dd5bfeaf01174bf803981de6147f999e75b99a2d03c32e034b72dd5dc7c82
4
- data.tar.gz: 1675ce07491e0cbce401c2a113ee7eccdcba0c4cf42ba7e380ad63be988ec91a
3
+ metadata.gz: a35a9ffcd025603a3fe87c281a3d9d19fc68a7c88ae75adb6f9ef63b8b55c121
4
+ data.tar.gz: 2a9657da7a409c3ae13e5425da5623e351a04a75495546613473698004efe2a1
5
5
  SHA512:
6
- metadata.gz: 42037b0b55109b535e25284815a096154c79bca2f58b107311f5c53da5b9ec0242ab39a6dd9bae48ef3e863c7f43251167180266578ac177887bd3a63215ef1e
7
- data.tar.gz: 188dd298f8ea03e5985d89e97f99a12ef5d5384eae03a78f9b77e5172c28ae5990dec64795817d52ea6895395679a6c2f2deafafa3f8617154afb32fc06bc972
6
+ metadata.gz: 6b74bd11f91f0ef06bd754d048fd28705859f6c30b1f4a126a0dfbaa4b697d099efd4c26d4f6a98cbc3c47367baef3a3b5a0a80e099bc3fa5f1bfc3108b51def
7
+ data.tar.gz: 7b37eddbe892c7ce0f7343d231a18166213a4c9dd2bdd3dbe3720fe1f1c799474a7c2a312adc56134e587d58aebe34bb2b0dad2da51a21a355e846759c1e084b
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: bundler
4
+ directory: "/"
5
+ schedule:
6
+ interval: daily
7
+ time: "03:00"
8
+ open-pull-requests-limit: 10
@@ -0,0 +1,58 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ build:
7
+ name: >-
8
+ Ruby ${{ matrix.ruby }} (${{ matrix.gemfile }})
9
+ env:
10
+ CI: true
11
+ runs-on: ${{ matrix.os }}
12
+ continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' || matrix.experimental }}
13
+ if: |
14
+ !( contains(github.event.pull_request.title, '[ci skip]')
15
+ || contains(github.event.pull_request.title, '[skip ci]'))
16
+ strategy:
17
+ fail-fast: true
18
+ matrix:
19
+ experimental: [false]
20
+ os: [ ubuntu-latest ]
21
+ ruby:
22
+ - 2.6
23
+ - 2.7
24
+ - '3.0'
25
+ - '3.1'
26
+ gemfile:
27
+ - gemfiles/oga.gemfile
28
+ - gemfiles/nokogiri.gemfile
29
+ include:
30
+ - ruby: head
31
+ os: ubuntu-latest
32
+ gemfile: gemfiles/nokogiri.gemfile
33
+ experimental: true
34
+ - ruby: head
35
+ os: ubuntu-latest
36
+ gemfile: gemfiles/oga.gemfile
37
+ experimental: true
38
+ - ruby: jruby
39
+ os: ubuntu-latest
40
+ gemfile: gemfiles/nokogiri.gemfile
41
+ experimental: true
42
+ - ruby: truffleruby
43
+ os: ubuntu-latest
44
+ gemfile: gemfiles/nokogiri.gemfile
45
+ experimental: true
46
+ steps:
47
+ - name: Repo checkout
48
+ uses: actions/checkout@v2
49
+
50
+ - name: Setup Ruby
51
+ uses: ruby/setup-ruby@v1
52
+ with:
53
+ ruby-version: ${{ matrix.ruby }}
54
+ bundler-cache: true
55
+
56
+ - name: Run tests
57
+ timeout-minutes: 10
58
+ run: bundle exec rake spec
data/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@ Reverse Chronological Order:
6
6
 
7
7
  ...
8
8
 
9
+ ## `0.17.0` (2023-06-02)
10
+
11
+ * Remove dead providers
12
+
13
+ ## `0.16.0` (2022-02-04)
14
+
15
+ * Fix providers
16
+ * Improve HTTP.rb dependency
17
+
9
18
  ## `0.15.1` (2021-02-17)
10
19
 
11
20
  * Support for Ruby 3.0
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ gem "oga", "~> 3.2"
9
9
  gem "rubocop", "~> 1.0"
10
10
 
11
11
  group :test do
12
- gem "coveralls", require: false
12
+ gem "coveralls_reborn", require: false
13
13
  # Until I find a way to introduce other MITM proxy
14
14
  gem "webrick", "1.4.2"
15
15
  gem "evil-proxy", "~> 0.2"
@@ -7,7 +7,7 @@ gemspec path: "../"
7
7
  gem "nokogiri", "~> 1.8"
8
8
 
9
9
  group :test do
10
- gem "coveralls", require: false
10
+ gem "coveralls_reborn", require: false
11
11
  gem "webrick"
12
12
  gem "evil-proxy", "~> 0.2"
13
13
  end
data/gemfiles/oga.gemfile CHANGED
@@ -7,7 +7,7 @@ gemspec path: "../"
7
7
  gem "oga", "~> 3.0"
8
8
 
9
9
  group :test do
10
- gem "coveralls", require: false
10
+ gem "coveralls_reborn", require: false
11
11
  gem "webrick"
12
12
  gem "evil-proxy", "~> 0.2"
13
13
  end
@@ -11,7 +11,7 @@ module ProxyFetcher
11
11
 
12
12
  # [NOTE] Doesn't support filtering
13
13
  def xpath
14
- '//table[@id="proxylisttable"]/tbody/tr'
14
+ "//table[./thead/tr/th[contains(text(), 'IP')]]/tbody/tr"
15
15
  end
16
16
 
17
17
  # Converts HTML node (entry of N tags) to <code>ProxyFetcher::Proxy</code>
@@ -11,7 +11,7 @@ module ProxyFetcher
11
11
 
12
12
  # [NOTE] Doesn't support filtering
13
13
  def xpath
14
- '//table[@id="proxylisttable"]/tbody/tr'
14
+ "//table[./thead/tr/th[contains(text(), 'IP')]]/tbody/tr"
15
15
  end
16
16
 
17
17
  # Converts HTML node (entry of N tags) to <code>ProxyFetcher::Proxy</code>
@@ -11,7 +11,7 @@ module ProxyFetcher
11
11
 
12
12
  # [NOTE] Doesn't support filtering
13
13
  def xpath
14
- '//table[@id="proxylisttable"]/tbody/tr'
14
+ "//table[./thead/tr/th[contains(text(), 'IP')]]/tbody/tr"
15
15
  end
16
16
 
17
17
  # Converts HTML node (entry of N tags) to <code>ProxyFetcher::Proxy</code>
@@ -11,7 +11,7 @@ module ProxyFetcher
11
11
 
12
12
  # [NOTE] Doesn't support filtering
13
13
  def xpath
14
- '//table[@id="proxylisttable"]/tbody/tr'
14
+ "//table[./thead/tr/th[contains(text(), 'IP')]]/tbody/tr"
15
15
  end
16
16
 
17
17
  # Converts HTML node (entry of N tags) to <code>ProxyFetcher::Proxy</code>
@@ -13,9 +13,9 @@ module ProxyFetcher
13
13
  # Major version number
14
14
  MAJOR = 0
15
15
  # Minor version number
16
- MINOR = 15
16
+ MINOR = 17
17
17
  # Smallest version number
18
- TINY = 1
18
+ TINY = 0
19
19
 
20
20
  # Full version number
21
21
  STRING = [MAJOR, MINOR, TINY].compact.join(".")
data/lib/proxy_fetcher.rb CHANGED
@@ -41,9 +41,6 @@ module ProxyFetcher
41
41
  require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/mtpro"
42
42
  require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/proxy_list"
43
43
  require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/proxypedia"
44
- require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/proxyscrape_http"
45
- require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/proxyscrape_socks4"
46
- require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/proxyscrape_socks5"
47
44
  require "#{File.dirname(__FILE__)}/proxy_fetcher/providers/xroxy"
48
45
  end
49
46
 
@@ -23,7 +23,7 @@ Gem::Specification.new do |gem|
23
23
  gem.license = "MIT"
24
24
  gem.required_ruby_version = ">= 2.3.0"
25
25
 
26
- gem.add_runtime_dependency "http", ">= 3", "< 5"
26
+ gem.add_runtime_dependency "http", ">= 3"
27
27
 
28
28
  gem.add_development_dependency "rake", ">= 12.0"
29
29
  gem.add_development_dependency "rspec", "~> 3.9"
@@ -12,9 +12,6 @@ describe "Proxy classes" do
12
12
  [:mtpro, "MTPro"],
13
13
  [:proxy_list, "ProxyList"],
14
14
  [:proxypedia, "Proxypedia"],
15
- [:proxyscrape_http, "ProxyscrapeHTTP"],
16
- [:proxyscrape_socks4, "ProxyscrapeSOCKS4"],
17
- [:proxyscrape_socks5, "ProxyscrapeSOCKS5"],
18
15
  [:xroxy, "XRoxy"]
19
16
  ].each do |(provider_name, provider_klass)|
20
17
  describe Object.const_get("ProxyFetcher::Providers::#{provider_klass}") do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.1
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Bulai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-17 00:00:00.000000000 Z
11
+ date: 2023-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '5'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,9 +24,6 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '3'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '5'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rake
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +61,8 @@ executables:
67
61
  extensions: []
68
62
  extra_rdoc_files: []
69
63
  files:
64
+ - ".github/dependabot.yml"
65
+ - ".github/workflows/ci.yml"
70
66
  - ".gitignore"
71
67
  - CHANGELOG.md
72
68
  - CODE_OF_CONDUCT.md
@@ -101,9 +97,6 @@ files:
101
97
  - lib/proxy_fetcher/providers/mtpro.rb
102
98
  - lib/proxy_fetcher/providers/proxy_list.rb
103
99
  - lib/proxy_fetcher/providers/proxypedia.rb
104
- - lib/proxy_fetcher/providers/proxyscrape_http.rb
105
- - lib/proxy_fetcher/providers/proxyscrape_socks4.rb
106
- - lib/proxy_fetcher/providers/proxyscrape_socks5.rb
107
100
  - lib/proxy_fetcher/providers/xroxy.rb
108
101
  - lib/proxy_fetcher/proxy.rb
109
102
  - lib/proxy_fetcher/utils/http_client.rb
@@ -143,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
136
  - !ruby/object:Gem::Version
144
137
  version: '0'
145
138
  requirements: []
146
- rubygems_version: 3.1.2
139
+ rubygems_version: 3.1.6
147
140
  signing_key:
148
141
  specification_version: 4
149
142
  summary: Ruby gem for dealing with proxy lists from different providers
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- module ProxyFetcher
6
- module Providers
7
- # FreeProxyList provider class.
8
- class ProxyscrapeHTTP < Base
9
- # Provider URL to fetch proxy list
10
- def provider_url
11
- "https://api.proxyscrape.com/v2/?request=getproxies&protocol=http"
12
- end
13
-
14
- # Loads provider HTML and parses it with internal document object.
15
- #
16
- # @param url [String]
17
- # URL to fetch
18
- #
19
- # @param filters [Hash]
20
- # filters for proxy provider
21
- #
22
- # @return [Array]
23
- # Collection of extracted proxies with ports
24
- #
25
- def load_document(url, filters = {})
26
- html = load_html(url, filters)
27
-
28
- CSV.parse(html, col_sep: "\t").map(&:first)
29
- end
30
-
31
- # Fetches HTML content by sending HTTP request to the provider URL and
32
- # parses the txt document to return all the proxy entries (ip addresses
33
- # and ports).
34
- #
35
- # @return [Array]
36
- # Collection of extracted proxies with ports
37
- #
38
- def load_proxy_list(filters = {})
39
- load_document(provider_url, filters)
40
- end
41
-
42
- # Converts String to <code>ProxyFetcher::Proxy</code> object.
43
- #
44
- # @param node [String]
45
- # String
46
- #
47
- # @return [ProxyFetcher::Proxy]
48
- # Proxy object
49
- #
50
- def to_proxy(node)
51
- addr, port = node.split(":")
52
-
53
- ProxyFetcher::Proxy.new.tap do |proxy|
54
- proxy.addr = addr
55
- proxy.port = Integer(port)
56
- proxy.country = "Unknown"
57
- proxy.anonymity = "Unknown"
58
- proxy.type = ProxyFetcher::Proxy::HTTP
59
- end
60
- end
61
- end
62
-
63
- ProxyFetcher::Configuration.register_provider(:proxyscrape_http, ProxyscrapeHTTP)
64
- end
65
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- module ProxyFetcher
6
- module Providers
7
- # FreeProxyList provider class.
8
- class ProxyscrapeSOCKS4 < Base
9
- # Provider URL to fetch proxy list
10
- def provider_url
11
- "https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks4"
12
- end
13
-
14
- # Loads provider HTML and parses it with internal document object.
15
- #
16
- # @param url [String]
17
- # URL to fetch
18
- #
19
- # @param filters [Hash]
20
- # filters for proxy provider
21
- #
22
- # @return [Array]
23
- # Collection of extracted proxies with ports
24
- #
25
- def load_document(url, filters = {})
26
- html = load_html(url, filters)
27
-
28
- CSV.parse(html, col_sep: "\t").map(&:first)
29
- end
30
-
31
- # Fetches HTML content by sending HTTP request to the provider URL and
32
- # parses the txt document to return all the proxy entries (ip addresses
33
- # and ports).
34
- #
35
- # @return [Array]
36
- # Collection of extracted proxies with ports
37
- #
38
- def load_proxy_list(filters = {})
39
- load_document(provider_url, filters)
40
- end
41
-
42
- # Converts String to <code>ProxyFetcher::Proxy</code> object.
43
- #
44
- # @param node [String]
45
- # String
46
- #
47
- # @return [ProxyFetcher::Proxy]
48
- # Proxy object
49
- #
50
- def to_proxy(html_node)
51
- addr, port = html_node.split(":")
52
-
53
- ProxyFetcher::Proxy.new.tap do |proxy|
54
- proxy.addr = addr
55
- proxy.port = Integer(port)
56
- proxy.country = "Unknown"
57
- proxy.anonymity = "Unknown"
58
- proxy.type = ProxyFetcher::Proxy::SOCKS4
59
- end
60
- end
61
- end
62
-
63
- ProxyFetcher::Configuration.register_provider(:proxyscrape_socks4, ProxyscrapeSOCKS4)
64
- end
65
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "csv"
4
-
5
- module ProxyFetcher
6
- module Providers
7
- # FreeProxyList provider class.
8
- class ProxyscrapeSOCKS5 < Base
9
- # Provider URL to fetch proxy list
10
- def provider_url
11
- "https://api.proxyscrape.com/v2/?request=getproxies&protocol=socks5"
12
- end
13
-
14
- # Loads provider HTML and parses it with internal document object.
15
- #
16
- # @param url [String]
17
- # URL to fetch
18
- #
19
- # @param filters [Hash]
20
- # filters for proxy provider
21
- #
22
- # @return [Array]
23
- # Collection of extracted proxies with ports
24
- #
25
- def load_document(url, filters = {})
26
- html = load_html(url, filters)
27
-
28
- CSV.parse(html, col_sep: "\t").map(&:first)
29
- end
30
-
31
- # Fetches HTML content by sending HTTP request to the provider URL and
32
- # parses the txt document to return all the proxy entries (ip addresses
33
- # and ports).
34
- #
35
- # @return [Array]
36
- # Collection of extracted proxies with ports
37
- #
38
- def load_proxy_list(filters = {})
39
- load_document(provider_url, filters)
40
- end
41
-
42
- # Converts String to <code>ProxyFetcher::Proxy</code> object.
43
- #
44
- # @param node [String]
45
- # String
46
- #
47
- # @return [ProxyFetcher::Proxy]
48
- # Proxy object
49
- #
50
- def to_proxy(html_node)
51
- addr, port = html_node.split(":")
52
-
53
- ProxyFetcher::Proxy.new.tap do |proxy|
54
- proxy.addr = addr
55
- proxy.port = Integer(port)
56
- proxy.country = "Unknown"
57
- proxy.anonymity = "Unknown"
58
- proxy.type = ProxyFetcher::Proxy::SOCKS5
59
- end
60
- end
61
- end
62
-
63
- ProxyFetcher::Configuration.register_provider(:proxyscrape_socks5, ProxyscrapeSOCKS5)
64
- end
65
- end