Created
February 10, 2010 23:47
-
-
Save sandrods/301003 to your computer and use it in GitHub Desktop.
Series scratcher & downloader
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'rubygems' | |
| require 'mechanize' | |
| require 'rufus/scheduler' | |
| require 'growl' | |
| class Logger | |
| def self.log(msg, title=nil, sticky=false, show_time=true) | |
| time = show_time ? "\n#{Time.now.strftime('%a %d %b %H:%M')}" : '' | |
| Growl.notify "#{msg}#{time}", :title=>title, :sticky=>sticky | |
| end | |
| end | |
| class Downloader | |
| PATH = "/Users/sandro/Downloads/torrents/" | |
| def initialize(_files) | |
| @agent = WWW::Mechanize.new | |
| @scheduler = Rufus::Scheduler.start_new | |
| @files = _files | |
| @counter = 0 | |
| login | |
| end | |
| def login | |
| Logger.log "Trying to login...", 'Digital Hive' | |
| page = @agent.get('http://www.digitalhive.org/login.php') | |
| form = page.forms[0] | |
| form.username = "sandrods" | |
| form.password = "328791" | |
| @agent.submit(form) | |
| #Logger.log "Login Sucessfull", 'Digital Hive' | |
| end | |
| def get_links | |
| page = @agent.get('http://www.digitalhive.org/browse.php') | |
| page.links_with(:text => 'Download') | |
| end | |
| def run | |
| #Logger.log "Running", 'Digital Hive' | |
| @counter +=1 | |
| page_links = get_links | |
| @files.each do |ep| | |
| next if ep.done | |
| Logger.log "(#{@counter}) Verifying #{ep.regex.source}", 'Digital Hive' | |
| if link = page_links.detect{|l| l.href.match(ep.regex) } | |
| torrent = link.click | |
| torrent.save("#{PATH}#{torrent.filename}") | |
| Logger.log "Saving #{link.href}", 'Digital Hive' | |
| ep.done = true | |
| end | |
| end | |
| unless @files.detect{ |ep| ep.done == false} | |
| Logger.log "Exiting...", 'Digital Hive', true | |
| @scheduler.stop | |
| end | |
| if @counter >= 72 | |
| Logger.log "Exiting (TimeOut)...", 'Digital Hive', true | |
| @scheduler.stop | |
| end | |
| end | |
| def start | |
| @job_id = @scheduler.every "10m", :first_in => "0m" do | |
| run | |
| end | |
| @scheduler.join | |
| end | |
| end | |
| class Episode | |
| attr_accessor :series, :title, :season, :ep, :time, :ep_txt, :done | |
| def initialize | |
| @done = false | |
| end | |
| def set_ep(txt) | |
| txt =~ /S: (\d+) - Ep: (\d+) \((.+)\) - (.*)/ | |
| @season = $1 | |
| @ep = $2 | |
| @time = $3 | |
| _ep = @ep.to_s.rjust(2, '0') | |
| _season = @season.to_s.rjust(2, '0') | |
| @ep_txt = "S#{_season}E#{_ep}" | |
| end | |
| def regex | |
| name = self.series.split.join(".") | |
| Regexp.new("(?!.*(720|264))(=#{name}.*#{@ep_txt}.*HDTV)", Regexp::IGNORECASE) | |
| end | |
| def to_s | |
| "#{self.series}\n#{self.ep_txt} - #{self.title}" | |
| end | |
| end | |
| class Series | |
| def initialize | |
| @agent = WWW::Mechanize.new | |
| login | |
| end | |
| def login | |
| Logger.log "Trying to login...", 'Calendar' | |
| page = @agent.get('http://www.pogdesign.co.uk/cat/') | |
| f = page.form_with(:action => '/cat/') do |form| | |
| form.username = "sandrods@gmail.com" | |
| form.password = "328791" | |
| end | |
| button = f.button(:value=>"Account Login") | |
| f.submit(button) | |
| # Logger.log "Login Sucessfull...", 'Calendar' | |
| end | |
| def episodes(_date = nil) | |
| eps = [] | |
| date = _date ? Date.parse(_date) : Date.today | |
| url_month = date.month.to_s + "-" + date.year.to_s | |
| td_id = "d_#{date.day}_#{date.month}_#{date.year}" | |
| #Logger.log "Running...", 'Calendar' | |
| page = @agent.get("http://www.pogdesign.co.uk/cat/#{url_month}") | |
| page./("td##{td_id} a.eplink").each do |node| | |
| ep = Episode.new | |
| td = node.parent | |
| ep.series = td./("a").text | |
| ep.title = td./("span.seasep")[0].text | |
| ep.set_ep(td./("span.seasep")[1].text) | |
| eps << ep | |
| end | |
| if eps.empty? | |
| Logger.log "NOTHING", 'Airs Today', true | |
| else | |
| eps.each do |e| | |
| Logger.log e.to_s, 'Airs Today', true | |
| end | |
| end | |
| eps | |
| end | |
| end | |
| s = Series.new | |
| eps = s.episodes | |
| unless eps.empty? | |
| d = Downloader.new(eps) | |
| d.start | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment