Created
March 26, 2013 18:22
-
-
Save dan1d/5247826 to your computer and use it in GitHub Desktop.
robar musica
This file contains 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 '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