[英]Rails 5/Ruby - Pull og:data from external URL to populate form fields when link is pasted
我有一个表单,允许用户创建一个新的帖子。 第一个字段是url字段。 我希望用户能够粘贴外部网址,然后使用外部网址的开放图形/元数据中的图像/标题/说明预填充下面的表单。 基本上,当您向Facebook发布URL时,会生成“共享卡”。
我基本上复制了这个答案中陈述的内容,但它不起作用: 如何使用Ruby on Rails 5将数据从URL拉入表单
我正在努力弄清楚如何解决它以及如何添加图像(我正在使用paperclip gem)。 这是我到目前为止所得到的
url_grabber_controller.erb
require 'mechanize'
class UrlGrabberController < ApplicationController
def grab
pasted_url = params.fetch("pasted_url")
page = agent.get(pasted_url)
title = page.title
node = page.at("head meta[name='description']")
description = node["content"]
render json: {title: title, description: description}
end
end
_form.html.erb
// Form Fields
<script>
$("#link_url").on("paste", function(e) {
$.ajax({
url: "/url-grabber/grab",
data: $("#link_url").val(),
success: function(result) {
$("#title").val(result["title"]);
$("#description").val(result["description"]);
}
});
});
</script>
的routes.rb
Rails.application.routes.draw do
get "url-grabber/grab" => "url_grabber#grab"
end
非常感谢帮助!
我最终使用Nokogiri宝石解决了这个问题。 这提供了一种可行的解决方案,但对于完整的解决方案,它需要具有无og属性的站点的回退方法。
fetch_url_controller.erb
require 'open-uri'
require 'nokogiri'
class FetchUrlController < ApplicationController
def grab
url = params.fetch("url")
doc = Nokogiri::HTML(open(url))
title = doc.at('meta[property="og:title"]')['content']
description = doc.at('meta[property="og:description"]')['content']
img_url = doc.at('meta[property="og:image"]')['content']
render json: {title: title, description: description, image: img_url}
end
end
jQuery的
$('#link_url').on('input', function(e) {
var url = $('#link_url').val();
$.ajax({
url: "/fetch-url/grab?url="+url,
success: function(result) {
$('.js-share-data').html('<h1>'+result["title"]+'</h1><p>'+result["description"]+'</p><img src="'+result["image"]+'">');
}
});
});
的routes.rb
get "fetch-url/grab" => "fetch_url#grab"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.