Improve fetch_link_card_service to exclude status references url
This commit is contained in:
parent
b8b569f7cc
commit
ad7952ce3d
2 changed files with 63 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
|||
class FetchLinkCardService < BaseService
|
||||
include Redisable
|
||||
include Lockable
|
||||
include FormattingHelper
|
||||
|
||||
URL_PATTERN = %r{
|
||||
(#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]}) # $1 preceding chars
|
||||
|
@ -80,9 +81,25 @@ class FetchLinkCardService < BaseService
|
|||
links.filter_map { |a| Addressable::URI.parse(a['href']) unless skip_link?(a) }.filter_map(&:normalize)
|
||||
end
|
||||
|
||||
exclude_urls = referenced_urls
|
||||
urls = urls.filter { |url| exclude_urls.exclude?(url.to_s) }
|
||||
|
||||
urls.reject { |uri| bad_url?(uri) }.first
|
||||
end
|
||||
|
||||
def referenced_urls
|
||||
unless @status.local?
|
||||
document = Nokogiri::HTML(@status.text)
|
||||
document.search('a[href^="http://"]', 'a[href^="https://"]').each do |link|
|
||||
link.replace(link['href']) if link['href']
|
||||
end
|
||||
|
||||
return PlainTextFormatter.new(document.to_s, false).to_s.scan(ProcessReferencesService::REFURL_EXP).pluck(3).uniq
|
||||
end
|
||||
|
||||
extract_status_plain_text(@status).scan(ProcessReferencesService::REFURL_EXP).pluck(3).uniq
|
||||
end
|
||||
|
||||
def bad_url?(uri)
|
||||
# Avoid local instance URLs and invalid URLs
|
||||
uri.host.blank? || TagManager.instance.local_url?(uri.to_s) || !%w(http https).include?(uri.scheme)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue