我目前在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解析器也不能说它是一个链接......),但它直接粘贴到浏览器中确实有效。
如何才能正确阅读此类链接?
答案 0 :(得分:2)
哇,这看起来像一个令人讨厌的网址。尽管网址设置不错,但我建议您使用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]>