如何显示og:图像给出页面的URL

时间:2012-11-23 14:13:29

标签: ruby-on-rails facebook

我有一个购物推荐网站,允许用户发布他们推荐的商品的网址。

表单目前仅包含主产品页面网址的单个输入。

如果用户要发布如下链接:

http://www.homedepot.com/webapp/wcs/stores/servlet/ProductDisplay?productId=203533553&storeId=10051&langId=-1&catalogId=10053&cm_sp=BlackFriday-_-11_23-_-Hero_C-_-349_Each_GE_Washer_Dryer_Special_Buy#.UK-DHuOe_VQ

我想显示此网址中包含的og:image的图片代码。

使用facebook开放图协议页面,我看到上面的示例网址确实有一个og:image

http://developers.facebook.com/tools/debug/og/object?q=http%3A%2F%2Fwww.homedepot.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FProductDisplay%3FproductId%3D203533553%26storeId%3D10051%26langId%3D-1%26catalogId%3D10053%26cm_sp%3DBlackFriday-_-11_23-_-Hero_C-_-349_Each_GE_Washer_Dryer_Special_Buy%23.UK-DHuOe_VQ

如何将网址提取到og:image?

4 个答案:

答案 0 :(得分:6)

我最终使用了Nokogiri,如下所示,同时依赖于Railscasts对本教程的重视。

def photo_from_url(url)
  if !Nokogiri::HTML(open(url)).css("meta[property='og:image']").blank?
    photo_url = Nokogiri::HTML(open(url)).css("meta[property='og:image']").first.attributes["content"]
    self.photo = URI.parse(photo_url)
    self.save
  end
end

我发现这比opengraph gem更可靠:

url_with_photo = opengraph.fetch(url)
url_with_photo.image

因为第二种方法有时不起作用,即使在源代码中具有og:image标记的页面上也是如此。 (我没有完全错误地实现它,因为它确实在某些页面上工作......)。

答案 1 :(得分:0)

您的网页没有任何Open Graph标记。请参阅此处以获取说明和示例:http://ogp.me/

当用户共享链接时,Facebook会读取这些标签。

调试器告诉你如何做btw:

  

推断属性:'og:url'属性应该是显式的   提供,即使可以从其他标签推断出值。

     

推断属性:应该明确提供'og:title'属性,甚至   如果可以从其他标签中推断出值。

     

推断属性:应明确提供'og:description'属性,即使a   值可以从其他标签中推断出来。

     

推断属性:应显式提供“og:image”属性,即使值可以   从其他标签推断出来。

但即使没有(非常重要且有用)标签,我也可以在Facebook上分享您的链接,并且工作正常。

答案 2 :(得分:0)

如果您知道页面的ID,则可以将/ picture附加到Graph API URL的末尾,以重定向到与其关联的图像,无论是显式还是隐式。

例如,下面的一位评论者提到了ID 10150708135007395(http://www.devils-heaven.com/heroku-gratis-ssl-fur-facebook-apps/),因此要获取缩略图,只需抓住:

https://graph.facebook.com/10150708135007395/picture

答案 3 :(得分:0)

module MetaParser

  require 'open-uri'

  COMMON_USER_AGENTS = ['Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36']  

  def self.parse_doc(url)
    Nokogiri::HTML.parse(open(url,'User-Agent' => COMMON_USER_AGENTS.sample ))  
  end   

  module Facebook
    def self.get_attributes(url)
      attributes = {}
      doc = MetaParser.parse_doc(url)

      attributes[:url]   = url
      attributes[:site_name] = doc.at('meta[property="og:site_name"]')['content']
      attributes[:title] = doc.at('meta[property="og:title"]')['content'] 
      attributes[:description] = doc.at('meta[property="og:description"]')['content']
      attributes[:image] = doc.at('meta[property="og:image"]')['content']

      return attributes
    end
  end # Facebook  

  module Twitter
    def self.get_attributes(url)
      attributes = {}
      doc = MetaParser.parse_doc(url)

      attributes[:url]   = url
      attributes[:site_name] = doc.at('meta[name="twitter:site"]')['content']
      attributes[:title] = doc.at('meta[name="twitter:title"]')['content'] 
      attributes[:description] = doc.at('meta[name="twitter:description"]')['content']
      attributes[:image] = doc.at('meta[name="twitter:image"]')['content']

      return attributes
    end  
  end # Twitter     

end

用法:

MetaParser :: Facebook.get_attributes( “google.com”) MetaParser :: Twitter.get_attributes( “google.com”)