6c451d260f
Reviewed-on: #402 Co-authored-by: miteruzo <miteruzo@naver.com> Co-committed-by: miteruzo <miteruzo@naver.com>
22 行
643 B
Ruby
22 行
643 B
Ruby
module Preview
|
|
class HtmlMetadataExtractor
|
|
IMAGE_SELECTORS = [
|
|
'meta[property="og:image"]',
|
|
'meta[name="twitter:image"]',
|
|
'meta[name="thumbnail"]'
|
|
].freeze
|
|
|
|
def self.extract(response)
|
|
document = Nokogiri::HTML.parse(response.body)
|
|
image_url = IMAGE_SELECTORS.filter_map {
|
|
document.at_css(_1)&.[]('content')&.strip.presence
|
|
}.first
|
|
|
|
{ title: document.at_css('title')&.text&.strip,
|
|
image_url: image_url ? URI.join(response.url, image_url).to_s : nil }
|
|
rescue URI::InvalidURIError
|
|
{ title: document.at_css('title')&.text&.strip, image_url: nil }
|
|
end
|
|
end
|
|
end
|