繁体   English   中英

Rails 5 / Ruby - Pull og:来自外部URL的数据,用于在粘贴链接时填充表单字段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM