Class: Collavre::LinkPreviewFetcher
- Inherits:
-
Object
- Object
- Collavre::LinkPreviewFetcher
- Defined in:
- app/services/collavre/link_preview_fetcher.rb
Constant Summary collapse
- USER_AGENT =
"Plan42LinkPreview/1.0".freeze
- OPEN_TIMEOUT =
5- READ_TIMEOUT =
5- MAX_BYTES =
200_000- MAX_REDIRECTS =
3- HTML_CONTENT_TYPES =
[ "text/html", "application/xhtml+xml" ].freeze
- REQUEST_OPTIONS =
{ "User-Agent" => USER_AGENT, "Accept" => "text/html,application/xhtml+xml" }.freeze
- DISALLOWED_IPV4_RANGES =
[ IPAddr.new("0.0.0.0/8"), IPAddr.new("100.64.0.0/10"), IPAddr.new("192.0.0.0/24"), IPAddr.new("198.18.0.0/15"), IPAddr.new("224.0.0.0/4"), IPAddr.new("240.0.0.0/4") ].freeze
- DISALLOWED_IPV6_RANGES =
[ IPAddr.new("::/128"), IPAddr.new("ff00::/8") ].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #fetch ⇒ Object
-
#initialize(url, io_opener: URI, logger: Rails.logger) ⇒ LinkPreviewFetcher
constructor
A new instance of LinkPreviewFetcher.
Constructor Details
#initialize(url, io_opener: URI, logger: Rails.logger) ⇒ LinkPreviewFetcher
Returns a new instance of LinkPreviewFetcher.
36 37 38 39 40 |
# File 'app/services/collavre/link_preview_fetcher.rb', line 36 def initialize(url, io_opener: URI, logger: Rails.logger) @url = url @io_opener = io_opener @logger = logger end |
Class Method Details
.fetch(url) ⇒ Object
32 33 34 |
# File 'app/services/collavre/link_preview_fetcher.rb', line 32 def self.fetch(url) new(url).fetch end |
Instance Method Details
#fetch ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/services/collavre/link_preview_fetcher.rb', line 42 def fetch uri = safe_http_uri return {} unless uri html, base_uri = read_html(uri) return {} if html.blank? document = Nokogiri::HTML(html) (document, base_uri) rescue StandardError => e @logger&.warn("Link preview fetch failed for #{@url}: #{e.class} #{e.}") {} end |