# frozen_string_literal: true module ProxyFetcher module Providers # FreeProxyList provider class. class FreeProxyList < Base # Provider URL to fetch proxy list def provider_url "https://free-proxy-list.net/" end # [NOTE] Doesn't support filtering def xpath '//table[@id="proxylisttable"]/tbody/tr' end # Converts HTML node (entry of N tags) to ProxyFetcher::Proxy # object. # # @param html_node [Object] # HTML node from the ProxyFetcher::Document DOM model. # # @return [ProxyFetcher::Proxy] # Proxy object # def to_proxy(html_node) ProxyFetcher::Proxy.new.tap do |proxy| proxy.addr = html_node.content_at("td[1]") proxy.port = Integer(html_node.content_at("td[2]").gsub(/^0+/, "")) proxy.country = html_node.content_at("td[4]") proxy.anonymity = html_node.content_at("td[5]") proxy.type = parse_type(html_node) end end private # Parses HTML node to extract proxy type. # # @param html_node [Object] # HTML node from the ProxyFetcher::Document DOM model. # # @return [String] # Proxy type # def parse_type(html_node) https = html_node.content_at("td[6]") # frozen_string_literal: true # FreeProxyList provider class. # Provider URL to fetch proxy list # [NOTE] Doesn't support filtering # Converts HTML node (entry of N tags) to ProxyFetcher::Proxy # object. # # @param html_node [Object] # HTML node from the ProxyFetcher::Document DOM model. # # @return [ProxyFetcher::Proxy] # Proxy object # # Parses HTML node to extract proxy type. # # @param html_node [Object] # HTML node from the ProxyFetcher::Document DOM model. # # @return [String] # Proxy type # https&.casecmp("yes")&.zero? ? ProxyFetcher::Proxy::HTTPS : ProxyFetcher::Proxy::HTTP end end ProxyFetcher::Configuration.register_provider(:free_proxy_list, FreeProxyList) end end