Railsでバッチは2種類あるようです。
runnerとtaskがあり、今回はtaskを使用してみました。サンプルをのせます。
コミックをクロールするタスク /lib/tasks/task_crawler.rake を作りました。
Comicモデルなど予め準備しておく必要がありますが、そこは消して
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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 |