Skip to content

Instantly share code, notes, and snippets.

@karlbright
Created July 16, 2011 06:55
Show Gist options
  • Save karlbright/1086087 to your computer and use it in GitHub Desktop.
Save karlbright/1086087 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'nokogiri'
require 'open-uri'
require 'net/http'
def OpenURI.redirectable?(uri1, uri2)
uri1.scheme.downcase == uri2.scheme.downcase || (/\A(?:http|ftp|https)\z/i =~ uri1.scheme && /\A(?:https?|ftp)\z/i =~ uri2.scheme)
end
module Daytrotter
ROOT_DIR = File.expand_path(File.dirname(__FILE__))
ROOT_URL = "http://www.daytrotter.com"
ALPHABETICAL = "#{ROOT_URL}/al/artists/alphabetical.html"
CHRONOLOGICAL = "#{ROOT_URL}/al/artists/chronological.html"
class Session
attr_accessor :url, :artist, :date, :doc
def initialize(url,artist,date)
@artist = artist
@url = "#{ROOT_URL}#{url}"
@date = date
end
def free_download_url
@doc = Nokogiri::HTML(open(@url))
link = @doc.search('a b.free').first().parent().attribute('href')
if(link != nil)
return URI.encode("#{ROOT_URL}#{link}")
else
return nil
end
end
def download_for_free
url = self.free_download_url
unless url.nil?
@doc = Nokogiri::HTML(open url)
Net::HTTP.start('daytrotter.com') { |http|
resp = http.get('/launch-download-manager.jnlp',{
'accept' => '*/*',
'referer' => url,
'host' => 'daytrotter.com'
})
open("#{ROOT_DIR}/#{@artist}.jnlp", 'wb') { |file|
file.write(resp.body)
}
# `open #{filename}`
}
end
# if url != nil
# @doc = Nokogiri::HTML(open url)
# Net::HTTP.start('daytrotter.com') { |http|
# resp = http.get('/launch-download-manager.jnlp')
# open("launch-download-manager.jnlp", "wb") { |file|
# file.write(resp.body)
# }
# `open #{ROOT_DIR}/launch-download-manager.jnlp`
# }
# end
end
end
class Sessions
def self.chronological
@doc = Nokogiri::HTML(open(CHRONOLOGICAL))
@sessions = [];
@doc.css('#SessionArchives > ol li[class!=clear]').each do |session|
url = session.search('a').first().attribute('href')
artist = session.search('b').text()
date = session.search('i').text()
@sessions << Session.new(url,artist,date)
end
return @sessions
end
end
end
Daytrotter::Sessions.chronological[0..1].each do |session|
puts "Downloading #{session.artist} - published #{session.date}"
session.download_for_free
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment