SimonMiaou
11/15/2015 - 3:15 PM

oioioi.rb

require 'nokogiri'
require 'net/http'
require 'uri'

url = 'http://oioioi.ru/mp3/skinhead/moonstomp.html'
regex = /\Ahttp:\/\/www\.skinhead\.ru\/mp3\/(.*\.mp3)\z/i
folder = File.dirname(__FILE__)+'/oioioi/'
Dir.mkdir(folder) unless Dir.exists?(folder)

def open(url)
  Net::HTTP.get(URI.parse(URI.escape(url)))
end

def save(url, path)
  if File.exists?(path)
    puts "Already saved: #{url}"
    return
  end

  puts "Downloading: #{url}"

  dir = File.dirname(path)
  Dir.mkdir(dir) unless Dir.exists?(dir)

  File.open(path, 'wb') do |file|
    file << open(url)
  end

  puts "Saved in: #{path}"
end

page = Nokogiri::HTML(open(url))
links = page.css('a')
hrefs = links.map { |l| l['href'] }.compact
mp3_hrefs = hrefs.select { |url| url.match regex }

mp3_hrefs.each do |href|
  path = href.match(regex)[1]
  save(href, folder+path)
end