2

私は、ユーザーがおすすめの商品のURLを投稿できるショッピングおすすめのサイトを持っています。

フォームには現在、メインの製品ページへのURLの入力が1つだけ含まれています。

ユーザーが以下のようなリンクを投稿した場合:

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-DHu

このURLに含まれているog:imageの画像タグを表示したいと思います。

Facebookのオープングラフプロトコルページを使用すると、上記のURLの例には実際に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へのURLを抽出するにはどうすればよいですか?

4

4 に答える 4

6

Railscastsによるこのチュートリアルに大きく依存しながら、私は以下のようにNokogiriを使用することになりました。

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の宝石よりも信頼できることを発見しました:

url_with_photo = opengraph.fetch(url)
url_with_photo.image

この2番目の方法は、ソースコードにog:imageタグが含まれているページでも機能しない場合があるためです。(一部のページで機能したため、完全に間違って実装しませんでした...)。

于 2012-11-26T23:15:07.167 に答える
0

ページにOpenGraphタグがありません。説明と例については、こちらをご覧ください:http: //ogp.me/

Facebookは、ユーザーがリンクを共有するときにこれらのタグを読み取ります。

デバッガーは、何をすべきかを教えてくれます。

推測されるプロパティ:他のタグから値を推測できる場合でも、'og:url'プロパティを明示的に指定する必要があります。

推測されるプロパティ:他のタグから値を推測できる場合でも、'og:title'プロパティを明示的に指定する必要があります。

推測されるプロパティ:他のタグから値を推測できる場合でも、「og:description」プロパティを明示的に指定する必要があります。

推測されるプロパティ:他のタグから値を推測できる場合でも、「og:image」プロパティを明示的に指定する必要があります。

しかし、(非常に重要で便利な)タグがなくても、Facebookであなたのリンクを共有することができ、それはうまく機能します。

于 2012-11-23T14:27:03.670 に答える
0

ページのIDがわかっている場合は、Graph APIURLの末尾に/pictureを追加して、明示的か暗黙的かを問わず、それに関連付けられた画像にリダイレクトできます。

たとえば、以下のコメント投稿者の1人がID 10150708135007395(http://www.devils-heaven.com/heroku-gratis-ssl-fur-facebook-apps/)に言及しているので、サムネイル画像を取得するには、次のように入力します。

https://graph.facebook.com/10150708135007395/picture
于 2012-11-27T02:00:50.423 に答える
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")

于 2017-08-16T17:09:20.900 に答える