Skip to content

Instantly share code, notes, and snippets.

@halan
Created February 7, 2010 22:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save halan/297721 to your computer and use it in GitHub Desktop.
Save halan/297721 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'mechanize'
require 'open-uri'
@agent = WWW::Mechanize.new
def espera e
e.times do |t|
puts 'Faltam '+(e-t).to_s+' para iniciar o download...'
sleep 1
end
end
def pegar_link p
l = p.form_with(:action => /file_contents\/file/)
if l.nil?
espera p.search('#freeTimer').text.match(/[0-9]{1,}/)[0].to_i if not p.search('#freeTimer').empty?
espera p.content.match(/w='([0-9]+)/)[1].to_i if not p.content.match(/w='([0-9]+)/).nil?
pegar_link (p.uri.to_s.match(/\/([0-9]+)\//) and
@agent.get('http://www.easy-share.com/file_contents/captcha/'+p.uri.to_s.match(/\/([0-9]+)\//)[1]) or p)
else
l.action
end
end
page = @agent.get 'http://nobrasil.org/1001-discos-para-ouvir-antes-de-morrer/'
page.links_with(:text => 'download').each do |link|
nome = link.href.slice /[0-9]{4}-[a-z-]*/
if not Dir.glob('*.*').map {|f| f = f.split('.')[0]}.include? nome
puts 'Buscando o link para: '+nome
pagina_disco = @agent.click link
if pagina_disco.link_with(:href => /easy-share/)
easy_link = pagina_disco.link_with(:href => /easy-share/).href
ext = easy_link.match(/\.([^.]+)$/)[1] if easy_link.match(/\.([^.]+)$/)
puts 'Acessando -->: '+easy_link
pagina_easy = @agent.click pagina_disco.link_with(:href => /easy-share/)
link_arquivo = pegar_link pagina_easy
puts 'Iniciando download'
arquivo_remoto = open link_arquivo
puts 'Download concluido: '+nome+'.'+ext
arquivo_local = File.open(nome+'.'+ext, 'w') {|f| f.write(arquivo_remoto.read)}
else
puts '[pular] Não tem fonte no easy-share'
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment