6c451d260f
Reviewed-on: #402 Co-authored-by: miteruzo <miteruzo@naver.com> Co-committed-by: miteruzo <miteruzo@naver.com>
32 行
849 B
Ruby
32 行
849 B
Ruby
module Preview
|
|
class KnownSiteExtractor
|
|
def self.thumbnail_url(uri)
|
|
youtube_thumbnail(uri)
|
|
end
|
|
|
|
def self.niconico_video_id(uri)
|
|
case uri.host&.downcase
|
|
when 'www.nicovideo.jp', 'nicovideo.jp'
|
|
uri.path[%r{\A/watch/(sm\d+)\z}, 1]
|
|
when 'nico.ms'
|
|
uri.path[%r{\A/(sm\d+)\z}, 1]
|
|
end
|
|
end
|
|
|
|
def self.youtube_thumbnail(uri)
|
|
id =
|
|
case uri.host&.downcase
|
|
when 'youtu.be'
|
|
uri.path.split('/').reject(&:blank?).first
|
|
when 'www.youtube.com', 'youtube.com', 'm.youtube.com'
|
|
uri.path == '/watch' ? URI.decode_www_form(uri.query.to_s).to_h['v'] : nil
|
|
end
|
|
return unless id&.match?(/\A[A-Za-z0-9_-]{6,20}\z/)
|
|
|
|
"https://i.ytimg.com/vi/#{ id }/hqdefault.jpg"
|
|
end
|
|
|
|
private_class_method :youtube_thumbnail
|
|
end
|
|
end
|