我正在开发一个rails应用程序,我从BBC获取RSS新闻故事。然后,我会从RSS订阅源中存储新闻报道的标题,摘要和网址。我的数据库中的图像最初有一个空白列,因为我访问了故事的网址,然后使用nokogiri通过rake任务抓取主图像的网址。一旦我有图像的URL,我尝试将具有新更新属性的项目保存到我的数据库。但是,每当我运行我的rake任务时,它都无法工作,我会收到错误。这是代码:
task :getimg => :environment do
stories = FeedEntry.all
stories.each do |story|
url = story.url
doc = Nokogiri::HTML(open(url))
if doc.at_css(".full-width img")
img = doc.at_css(".full-width img")[:src]
story.image = img #my attempt to update the story's attribute
story.save! #does this save work?
elsif doc.at_css(".body-width img")
img = doc.at_css(".body-width img")[:src]
story.image = img # my attempt to update the story's attribute
story.save! #does this save work?
end
end
end
FeedEntry是我的新闻故事模型,这是控制台中的输出:
rake getimg --trace
** Invoke getimg (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute getimg
rake aborted!
Errno::ENOENT: No such file or directory @ rb_sysopen - http://www.bbc.co.uk/news/world-africa-29184590#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa
/Users/abhasarya/rails_projects/news_reader/lib/tasks/image_scraper.rake:9:in `initialize'
我知道我做错了什么,如果有人能指出解决方案,我会非常感激。谢谢!
答案 0 :(得分:1)
你需要在你的佣金任务中要求'open-uri'
require 'open-uri'
doc = Nokogiri::HTML(open(url))