Railsでバッチは2種類あるようです。
runnerとtaskがあり、今回はtaskを使用してみました。サンプルをのせます。
コミックをクロールするタスク /lib/tasks/task_crawler.rake を作りました。
Comicモデルなど予め準備しておく必要がありますが、そこは消して
namespace :task_comic_crawler do
desc "コミックをクロールしてコミックページを取得・更新する"
task :crawl => :environment do
require 'rss'
# コミックテーブルループ
@comics = Comic.all
@comics.each do |c|
# XMLではMechanizeを使用出来ないのでHTTP.getを使用する
xml = Net::HTTP.get(URI.parse(c.check_url))
is_update_comic_page = false
RSS::Parser.parse(xml).items.map do |item|
puts item.title
# 既存コミックページデータチェック
@old_comic_pages = ComicPage.where(url: item.link).or(ComicPage.where(title: item.title)).limit(1)
if @old_comic_pages.present?
puts 'exist comic_page'
else
puts 'not exist comic_page'
# コミックページ更新
@comicPage = ComicPage.new(
comic_id: c.id,
update_datetime: item.pubDate,
url: item.link,
title: item.title,
thumbnail_org: item.enclosure.url,
summary: '',
)
if @comicPage.save
puts 'comicPage save'
is_update_comic_page = true
end
end
end
# コミッククロールログ更新
@comicCrawlLog = ComicCrawlLog.new(
comic_id: c.id,
execute_datetime: Time.current,
is_update: is_update_comic_page,
)
if @comicCrawlLog.save
puts 'comicCrawlLog save'
end
end
end
end