750aa40e8e
Reviewed-on: #355 Co-authored-by: miteruzo <miteruzo@naver.com> Co-committed-by: miteruzo <miteruzo@naver.com>
51 行
1.6 KiB
Ruby
51 行
1.6 KiB
Ruby
class PreviewController < ApplicationController
|
|
def title
|
|
# TODO: # 既知サイトなら決まったフォーマットで title 取得するやぅに.
|
|
return head :unauthorized unless current_user
|
|
|
|
url = params[:url]
|
|
return render_bad_request('URL は必須です.') unless url.present?
|
|
|
|
unless url.start_with?(/http(s)?:\/\//)
|
|
url = 'http://' + url
|
|
end
|
|
|
|
html = URI.open(url, open_timeout: 5, read_timeout: 5).read
|
|
doc = Nokogiri::HTML.parse(html)
|
|
title = doc.at('title')&.text&.strip
|
|
|
|
render json: { title: title }
|
|
rescue => e
|
|
render_bad_request(e.message)
|
|
end
|
|
|
|
def thumbnail
|
|
# TODO: 既知ドメインであれば指定のアドレスからサムネールを取得するやぅにする.
|
|
|
|
return head :unauthorized unless current_user
|
|
|
|
url = params[:url]
|
|
return render_bad_request('URL は必須です.') if url.blank?
|
|
|
|
unless url.start_with?(/http(s)?:\/\//)
|
|
url = 'http://' + url
|
|
end
|
|
|
|
path = Rails.root.join('tmp', "thumb_#{ SecureRandom.hex }.png")
|
|
system("node #{ Rails.root }/lib/screenshot.js #{ Shellwords.escape(url) } #{ path }")
|
|
|
|
if File.exist?(path)
|
|
image = MiniMagick::Image.open(path)
|
|
image.resize '180x180'
|
|
File.delete(path) rescue nil
|
|
send_file image.path, type: 'image/png', disposition: 'inline'
|
|
else
|
|
render json: { type: 'internal_server_error',
|
|
message: 'サムネールを生成できませんでした.',
|
|
errors: { },
|
|
base_errors: ['サムネールを生成できませんでした.'] },
|
|
status: :internal_server_error
|
|
end
|
|
end
|
|
end
|