Skip to content

Instantly share code, notes, and snippets.

@dan1d
Created March 26, 2013 18:22
Show Gist options
  • Save dan1d/5247826 to your computer and use it in GitHub Desktop.
Save dan1d/5247826 to your computer and use it in GitHub Desktop.
robar musica
require 'open-uri'
require "logger"
require 'json'
class UpdatePage
URL = 'http://www.setbeat.com'
REGEX = /playGo.addQueue\((\[{.*\}\])\)/
attr_accessor :urls, :artista
def initialize
@urls = []
ActiveRecord::Base.logger = Logger.new(STDOUT)
1.upto(180) do |i| # 180
p "#{i} "
doc = visitar_paginacion(i)
parse_lis(doc)
end
@urls.each do |uri|
string = open(uri).read
nombre_artista_y_categoria(Nokogiri::HTML(string))
crear_canciones(string)
end
update_cache
Categoria.update_cuentas
end
def update_cache
Artista.find_each do |a|
a.song_count = a.canciones.count
a.save
end
end
# Pagina de paginacion de artistas
def visitar_paginacion(numero)
uri = URI.parse(URL + "/directory/music/page/#{numero}/letter/all")
doc = Nokogiri::HTML(open(uri))
end
# Todos los li items de la pagina de paginaciones
def parse_lis(doc)
doc = doc.css('ul.oh-lista-lineas li')
doc.each do |li|
@urls << get_artista_url(li.css('div.texto'))
end
end
# URL DE la pagina del artista
def get_artista_url(texto)
URL + texto.at_css('a')['href']
end
# Parseando JSON de ccanciones
def crear_canciones(doc)
json = doc.match(REGEX){ JSON.parse $1 }
json.each do |dt|
hs = {}
hs['nombre'] = dt['name']
hs['imagen'] = dt['image']
hs['duracion'] = dt['time']
key = dt['data']['key']
id = dt['data']['id']
hs['cancion_url'] = "http://www.setbeat.com/listen/#{key}/#{id}.mp3"
@artista.canciones.create(hs)
end
end
# Parseando artista y categoria
def nombre_artista_y_categoria(doc)
hs = {}
hs[:categoria] = doc.css('div#body-de ul.oh-lista.oh-100.oh-hidden li')[2].at_css('div span a').text
hs[:nombre] = doc.css('div#body-de ul.oh-lista.oh-100.oh-hidden li')[1].at_css('div span a').text
hs[:imagen] = doc.css('div#body-de ul.oh-lista.oh-100.oh-hidden li')[0].at_css('img').attr('src')
crear_artita_y_categoria(hs)
end
# Creando artista y categoria
def crear_artita_y_categoria(hash)
categoria = Categoria.find_by_categoria(hash[:categoria]) || Categoria.create(categoria: hash[:categoria])
@artista = categoria.artistas.create(nombre: hash[:nombre],imagen: hash[:imagen])
categoria.save
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment