Nokogiri + Paperclip =使用来自url的img进行XML解析

时间:2013-06-10 13:00:50

标签: ruby-on-rails ruby rake paperclip nokogiri

我需要解析一些params到我的数据库和URL中的图像。

我使用回形针作为图像。

在Rails控制台中,我可以通过以下代码将图像添加到新帖子中:

    image = Image.new
    image.image_from_url "http://yug-avto.ru/files/image/tradein/hyundai/877_VOLKSWAGEN_FAETON_2011_2_1366379491.jpg"
    image.watermark = true
    image.save!

在我的Image模型中我有

require "open-uri"
.......
def image_from_url(img_url)
  self.image = open(img_url)
end

所有工作都已完成。但是当我使用Nokogiri时,这段代码不起作用。

rake aborted!
No such file or directory - 
http://yug-avto.ru/files/image/tradein/peugeot/1027_Peugeot_308_2011_2_1370850441.jpg

我对Nokogiri解析的耙子任务:

doc.xpath("//item").each do |ad|
 img = ad.at("image").text

 img1 = Image.new
 img1.image = open("#{img}") 
 img1.watermark = true
 img1.save!
end

在Nokogiri的rake任务中,我要求'nokogiri'并要求'open-uri'。

怎么样?:))))

2 个答案:

答案 0 :(得分:3)

这是我的解析器的代码片段...我猜你出错的地方是使用open(url)代替parse(url)

picture = Picture.new(
    realty_id: realty.id,
    position: position,
    hashcode: realty.hashcode
)
# picture.image = URI.parse(url), edit: added open() as this worked for Savroff
picture.image = open(URI.parse(url))
picture.save!

另外,检查图像是否真的存在是个好主意

picture_array.each do |url|

    # checks if the Link works
    res = Net::HTTP.get_response(URI.parse(url))

    # if so, it will add the Picture Link to the verified Array
    if res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399
        verified_array << url
    end
end

答案 1 :(得分:3)

谢谢TheChamp,你引导我找到正确的想法。 首先需要解析URL并在打开之后。

image = Image.new
ad_image_url = URI.parse("#{img}")
image.image = open(ad_image_url)
image.watermark = true
image.save!