0

現在、モデルで次のコードを使用して、小売サイトの Productを読み取って保存しています。og:image

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

og:imageこれはほとんどのページで機能しますが、返されるがいくつかあります。このbad URI(is not URI?) ようなリンクの例は、H&M の小売サイトでの次のリンク形式です。

http://lp.hm.com/hmprod?set=source[/model/2012/K71 05701 95313 06 0043 0.jpg],rotate[],width[],height[],x[],y[],type[STILL_LIFE_FRONT]&call=url[file:/product/facebook]

明らかに、これはきれいなリンクではありません (StackOverflow の Markdown パーサーでさえ、それがリンクであるとは判断できません...) が、ブラウザーに直接貼り付けると実際に機能します。

このようなリンクを正しく読むにはどうすればよいですか?

4

1 に答える 1

2

おっと、それは厄介なURLのように見えます。優れたURLスキームにもかかわらず、次のコマンドを使用してURLをエスケープすることをお勧めしますURI::Escape

irb(main):001:0> url = "http://lp.hm.com/hmprod?set=source[/model/2012/K71 05701 95313 06 0043 0.jpg],rotate[],width[],height[],x[],y[],type[STILL_LIFE_FRONT]&call=url[file:/product/facebook]"
=> "http://lp.hm.com/hmprod?set=source[/model/2012/K71 05701 95313 06 0043 0.jpg],rotate[],width[],height[],x[],y[],type[STILL_LIFE_FRONT]&call=url[file:/product/facebook]"
irb(main):002:0> uri = URI.escape url
=> "http://lp.hm.com/hmprod?set=source[/model/2012/K71%2005701%2095313%2006%200043%200.jpg],rotate[],width[],height[],x[],y[],type[STILL_LIFE_FRONT]&call=url[file:/product/facebook]"
irb(main):003:0> URI(uri)
=> #<URI::HTTP:0x000000024321d0 URL:http://lp.hm.com/hmprod?set=source[/model/2012/K71%2005701%2095313%2006%200043%200.jpg],rotate[],width[],height[],x[],y[],type[STILL_LIFE_FRONT]&call=url[file:/product/facebook]>
于 2012-12-02T23:36:00.580 に答える