#!/usr/bin/env ruby # RailsConf Scraper # Written by Erik Gregg # 8/2006 require 'rubygems' require 'ncurses' require 'open-uri' require 'diff/lcs' require 'net/smtp' require 'rmail' require 'action_mailer' require 'active_support' require 'action_view' include ActionView::Helpers::DateHelper # Define all the junk # --------------------------------------------------------- dudes = ['hardware.hank@gmail.com'] # People who get emails site_to_watch = 'http://railsconf.org/pages/registration' start_time = Time.now emails = 0 # --------------------------------------------------------- # Set up Ncurses Ncurses.initscr Ncurses.mvaddstr(0, 0, "RailsConf Scraper") Ncurses.mvaddstr(1, 0, "Written by Erik Gregg") Ncurses.mvaddstr(2, 0, "Running for #{time_ago_in_words(start_time)}.") Ncurses.mvaddstr(3, 0, "#{emails} Emails sent.") Ncurses.refresh trap("INT") do Ncurses.endwin exit end trap("TERM") do Ncurses.endwin exit end p = open(site_to_watch).read loop do q = open(site_to_watch).read a = Diff::LCS.diff(p,q) if a.size > 1 puts time = "RailsConfScrape: "+Time.now.to_s num = a.size > 1 ? "#{a.size} Changes" : "#{a.size} Change" body = time+"\n"+"#{num} Detected! #{site_to_watch}\nSurf now!" # Oh Crap MAIL TIME! dudes.each do |dude| message = RMail::Message.new message.body = body message.header.from = "RailsConfScraper@modzer0.cs.uaf.edu" message.header.to = dude message.header.subject = time smtp_server_name = "localhost" smtp_client = Net::SMTP.new(smtp_server_name) smtp_client.start(smtp_server_name) do |smtp| smtp.send_message( message, message.header['From'], message.header['To']) end emails +=1 end end p = q sleep 300+rand(300) Ncurses.clear Ncurses.mvaddstr(0, 0, "RailsConf Scraper") Ncurses.mvaddstr(1, 0, "Written by Erik Gregg") Ncurses.mvaddstr(2, 0, "Running for #{time_ago_in_words(start_time)}.") Ncurses.mvaddstr(3, 0, "#{emails} Emails sent.") Ncurses.refresh end