ファイル
btrc-hub/backend/app/services/preview/thumbnail_fetcher.rb
T
2026-07-09 23:33:10 +09:00

39 行
1.1 KiB
Ruby

module Preview
class ThumbnailFetcher
class GenerationFailed < StandardError; end
def self.fetch(raw_url)
uri, = UrlSafety.validate(raw_url)
known_url = KnownSiteExtractor.thumbnail_url(uri)
return fetch_image(known_url) if known_url
page = HttpFetcher.fetch(uri.to_s)
metadata = HtmlMetadataExtractor.extract(page)
raise GenerationFailed, 'サムネール画像が見つかりませんでした.' if metadata[:image_url].blank?
fetch_image(metadata[:image_url])
end
def self.title(raw_url)
uri, = UrlSafety.validate(raw_url)
HtmlMetadataExtractor.extract(HttpFetcher.fetch(uri.to_s))[:title]
end
def self.fetch_image(url)
response = HttpFetcher.fetch(url)
unless response.content_type.downcase.start_with?('image/')
raise GenerationFailed, 'サムネール画像が見つかりませんでした.'
end
response.body
rescue HttpFetcher::FetchTimeout
raise
rescue HttpFetcher::FetchFailed
raise GenerationFailed, 'サムネール画像を取得できませんでした.'
end
private_class_method :fetch_image
end
end