Add cache for OEmbed endpoints to avoid extra HTTP requests (#12403)
* add youtube oembed endpoint * add check for oembed endpoint * change unless for a more readable if * clear blank lines * endpoint via https * Fix string literal in condition * use cache for endpoints * use cache for endpoints * clean up and adding check * clean up and remove redundant return * add html check * add false to return * use double quotes * use double quotes * Clean up
This commit is contained in:
parent
5a2c0707f1
commit
d14e74eff5
3 changed files with 64 additions and 8 deletions
|
@ -39,6 +39,12 @@ class FetchLinkCardService < BaseService
|
|||
def process_url
|
||||
@card ||= PreviewCard.new(url: @url)
|
||||
|
||||
attempt_oembed || attempt_opengraph
|
||||
end
|
||||
|
||||
def html
|
||||
return @html if defined?(@html)
|
||||
|
||||
Request.new(:get, @url).perform do |res|
|
||||
if res.code == 200 && res.mime_type == 'text/html'
|
||||
@html = res.body_with_limit
|
||||
|
@ -48,10 +54,6 @@ class FetchLinkCardService < BaseService
|
|||
@html_charset = nil
|
||||
end
|
||||
end
|
||||
|
||||
return if @html.nil?
|
||||
|
||||
attempt_oembed || attempt_opengraph
|
||||
end
|
||||
|
||||
def attach_card
|
||||
|
@ -88,12 +90,17 @@ class FetchLinkCardService < BaseService
|
|||
end
|
||||
|
||||
def attempt_oembed
|
||||
service = FetchOEmbedService.new
|
||||
embed = service.call(@url, html: @html)
|
||||
url = Addressable::URI.parse(service.endpoint_url)
|
||||
service = FetchOEmbedService.new
|
||||
url_domain = Addressable::URI.parse(@url).normalized_host
|
||||
cached_endpoint = Rails.cache.read("oembed_endpoint:#{url_domain}")
|
||||
|
||||
embed = service.call(@url, cached_endpoint: cached_endpoint) unless cached_endpoint.nil?
|
||||
embed ||= service.call(@url, html: html) unless html.nil?
|
||||
|
||||
return false if embed.nil?
|
||||
|
||||
url = Addressable::URI.parse(service.endpoint_url)
|
||||
|
||||
@card.type = embed[:type]
|
||||
@card.title = embed[:title] || ''
|
||||
@card.author_name = embed[:author_name] || ''
|
||||
|
@ -127,6 +134,8 @@ class FetchLinkCardService < BaseService
|
|||
end
|
||||
|
||||
def attempt_opengraph
|
||||
return if html.nil?
|
||||
|
||||
detector = CharlockHolmes::EncodingDetector.new
|
||||
detector.strip_tags = true
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue