Fix og:image:width and og:image:height missing.
This commit is contained in:
parent
939619c090
commit
9056303b5d
|
@ -1,5 +1,8 @@
|
||||||
class PageContentsController < OrbitAdminController
|
class PageContentsController < OrbitAdminController
|
||||||
require 'uri'
|
require 'uri'
|
||||||
|
|
||||||
|
IMG_INFO = {}
|
||||||
|
|
||||||
def index
|
def index
|
||||||
params = OrbitHelper.params
|
params = OrbitHelper.params
|
||||||
if params["wiki"].present?
|
if params["wiki"].present?
|
||||||
|
@ -20,9 +23,49 @@ class PageContentsController < OrbitAdminController
|
||||||
doc = Nokogiri::HTML( html )
|
doc = Nokogiri::HTML( html )
|
||||||
img_srcs = doc.css('img').map{ |i| i['src'] }.compact
|
img_srcs = doc.css('img').map{ |i| i['src'] }.compact
|
||||||
metas = [{"property" => "og:description", "content" => meta_desc},{"property" => "og:type", "content" => "Article"}]
|
metas = [{"property" => "og:description", "content" => meta_desc},{"property" => "og:type", "content" => "Article"}]
|
||||||
# if img_srcs.count > 0
|
if img_srcs.count > 0
|
||||||
# metas << {"property" => "og:image", "content" => URI.join(request.base_url, URI.encode(img_srcs[0])).to_s}
|
img_src = img_srcs[0]
|
||||||
# end
|
metas << {"property" => "og:image", "content" => URI.join(request.base_url, URI.encode(img_src)).to_s}
|
||||||
|
if img_src.start_with?('/')
|
||||||
|
img_src_path = File.join('public', img_src)
|
||||||
|
image = MiniMagick::Image.open(img_src_path)
|
||||||
|
if image[:width]
|
||||||
|
metas << {"property" => "og:image:width", "content" => image[:width].to_s}
|
||||||
|
end
|
||||||
|
if image[:height]
|
||||||
|
metas << {"property" => "og:image:height", "content" => image[:height].to_s}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
res = get_response(URI.parse(img_src))
|
||||||
|
image = IMG_INFO[img_src]
|
||||||
|
if image.nil?
|
||||||
|
if res.code == "200"
|
||||||
|
image_file = Tempfile.new
|
||||||
|
image_file.binmode
|
||||||
|
image_file.write(res.body)
|
||||||
|
image = MiniMagick::Image.open(image_file.path)
|
||||||
|
IMG_INFO[img_src] = {width: image[:width], height: image[:height]}
|
||||||
|
if image[:width]
|
||||||
|
metas << {"property" => "og:image:width", "content" => image[:width].to_s}
|
||||||
|
end
|
||||||
|
if image[:height]
|
||||||
|
metas << {"property" => "og:image:height", "content" => image[:height].to_s}
|
||||||
|
end
|
||||||
|
image_file.close
|
||||||
|
image_file.unlink
|
||||||
|
else
|
||||||
|
IMG_INFO[img_src] = {}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if image[:width]
|
||||||
|
metas << {"property" => "og:image:width", "content" => image[:width].to_s}
|
||||||
|
end
|
||||||
|
if image[:height]
|
||||||
|
metas << {"property" => "og:image:height", "content" => image[:height].to_s}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
OrbitHelper.render_meta_tags(metas)
|
OrbitHelper.render_meta_tags(metas)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -33,4 +76,51 @@ class PageContentsController < OrbitAdminController
|
||||||
"url_to_edit" => url_to_edit
|
"url_to_edit" => url_to_edit
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def net_http_get_response(uri,headers={})
|
||||||
|
port = uri.port
|
||||||
|
host = uri.host
|
||||||
|
http = Net::HTTP.new(host, port)
|
||||||
|
scheme = uri.scheme
|
||||||
|
if scheme == "https" || port.to_i == 443
|
||||||
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
||||||
|
http.use_ssl = true
|
||||||
|
end
|
||||||
|
http.open_timeout = 5
|
||||||
|
relative_path = (uri.path.blank? ? "/" : uri.path)
|
||||||
|
if !relative_path.start_with?("http") && !relative_path.start_with?("/")
|
||||||
|
relative_path = "/" + relative_path
|
||||||
|
end
|
||||||
|
relative_path = relative_path.sub(/^\/\.\.\/(\.\.\/)*/,'/')
|
||||||
|
while relative_path.include?("/../") do
|
||||||
|
relative_path = relative_path.gsub(/\/[^\/]+\/\.\.\//,'/')
|
||||||
|
end
|
||||||
|
relative_path = relative_path.gsub('//','/')
|
||||||
|
relative_path = URI.decode(relative_path)
|
||||||
|
relative_path += (uri.query.blank? ? '' : "?#{URI.decode(uri.query)}")
|
||||||
|
res = http.get(relative_path.gsub(" ","%20"))
|
||||||
|
if res.code == "400"
|
||||||
|
res = http.get(URI.encode(relative_path.gsub(" ","%20")))
|
||||||
|
end
|
||||||
|
res.uri = uri
|
||||||
|
res
|
||||||
|
end
|
||||||
|
def get_response(uri)
|
||||||
|
res = net_http_get_response(uri)
|
||||||
|
if res.code == "301" || res.code == "302"
|
||||||
|
location = res['Location']
|
||||||
|
cookie = res['Set-Cookie']
|
||||||
|
headers = {
|
||||||
|
'Cookie' => cookie.to_s
|
||||||
|
}
|
||||||
|
if location[0] == "/"
|
||||||
|
uri = URI.parse("#{uri.scheme}://#{uri.host}#{location}")
|
||||||
|
else
|
||||||
|
uri = URI.parse(location)
|
||||||
|
end
|
||||||
|
res = net_http_get_response(uri,headers)
|
||||||
|
end
|
||||||
|
return res
|
||||||
|
end
|
||||||
end
|
end
|
Loading…
Reference in New Issue