Ruby on rails Rake任务更新记录
我正在做一项rake任务,即为了寻找音乐会而放弃一个网站: lib/tasks/my_task.rakeRuby on rails Rake任务更新记录,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在做一项rake任务,即为了寻找音乐会而放弃一个网站: lib/tasks/my_task.rake task :find_concerts => :environment do doc = Nokogiri::HTML(open(url)) data = doc.search('#dateconcert table') data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text)
task :find_concerts => :environment do
doc = Nokogiri::HTML(open(url))
data = doc.search('#dateconcert table')
data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }
data.each do |concert|
c = Concert.new
c.date = concert[0]
c.city = concert[1]
c.save
end
end
我想要什么
我想在新的音乐会加入时得到一个提醒(在我正在取消的网站上),这样任务每天都会运行
我的问题
如果有新唱片,我想更新我的演唱会列表
在我编写的任务中,它会再次查找已存储的记录并复制这些记录。。。
我只想要能找到的新唱片
最后,我想比较最后两个任务之间的新内容,以便在发现新内容时发送警报
编辑
这是数据
返回的内容
[
["03 Décembre 2017", "PONT L\u0092ABBE (29) | Centre Culturel Le Triskell "],
["26 Janvier 2018", "MONTPELLIER (34) | Le Jam "],
["17 Février 2018", "BLOIS (41) | All That Jazz / Les Lobis "],
["22 Mars 2018", "MOISSAC (82) | Hall de Paris "],
["24 Mars 2018", "LAX (Baraqueville) (12) | Festival Lax'N Blues LAX\u0092N "],
["08 Décembre 2017", "ECHANGE CULTUREL CAMEROUN (0) | au 18 décembre 2017 - Organisation tournée MFR "],
["27 Janvier 2018", "LE THOR (84) | Le Sonograf "],
["16 Mars 2018", "CHAUMONT (52) | Le Nouveau Relax "],
["23 Mars 2018", "AUCH (32) | Le Cri'Art "]
]
我不确定我是否正确地理解了你,但你需要做的是检查它是否存在,并以其他方式创建它 我会做这样的事情
task :find_concerts => :environment do
doc = Nokogiri::HTML(open(url))
data = doc.search('#dateconcert table')
data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }
data.each do |concert|
Concert.where(data: concert[0], city: concert[1]).first_or_create
end
end
现在,您只能在它不存在时创建它。然后,当你创建一个你可以设置一个钩子
class Concern
after_create :send_notification
def send_notification
# send email here
end
end
不过,我找到了一个可能需要重构的解决方案 所以我创建了两个任务
将为第一次报废手动运行find_concerts
更新将每天运行的音乐会
require "nokogiri"
require "open-uri"
require "date"
require "time"
namespace :scrap do
desc "This get MM concerts"
url = "http://mountain-men.fr/concerts/"
doc = Nokogiri::HTML(open(url))
data = doc.search('#dateconcert table')
data = data.css('.jaunec' ).map { |tr| tr.css('td').map(&:text) } + doc.css('.jaunef' ).map { |tr| tr.css('td').map(&:text) }
task :find_concerts => :environment do
data.each do |concert|
c = Concert.create
c.date = concert[0]
c.city = concert[1]
c.save
end
end
task :update_concerts => :environment do
existing_date = Concert.all.map { |c| [c.date, c.city] }
data.each do |concert|
c = Concert.create
c.date = concert[0]
c.city = concert[1]
c.save unless existing_date.include?([concert[0], concert[1]])
end
Concert.where(city: nil, date: nil).destroy_all
end
end
不清楚你在问什么我刚编辑了我和我的结果一样