|
# Script que lee y almacena las estadísticas de béisbol (pitcheo y bateo) de la página de la LVBP |
|
# William Yanez - @wryanez |
|
# Actualizado a Enero 2013 |
|
# Publicado y distribuido libremente bajo licencia GPL |
|
|
|
require 'nokogiri' |
|
require 'net/http' |
|
require 'date' |
|
|
|
# Columnas de cada estadistica bateo y pitcheo |
|
COLS_PITCH = %w(JUGADOR EQUIPO JJ JI JG JP PCT JS JC JB IP H H2 H3 HR CP CL BB SO GP WP BK EFE) |
|
COLS_BAT = %w(JUGADOR EQUIPO AVE JJ VB CA H BA H2 H3 HR CI BB SO SH SF GP BR OR SLG OBP) |
|
|
|
URL_BASE = 'www.lvbp.com' |
|
|
|
#Temporada Regular |
|
URL_PITCH_TR= '/estadisticas_gen.asp?t=lanz&tipo=w&co_temporada=1&co_ano_temporada=6' |
|
URL_BAT_TR='/estadisticas_gen.asp?t=bat&tipo=c&co_temporada=1&co_ano_temporada=6' |
|
|
|
#Round robin |
|
URL_PITCH_RR='/estadisticas_gen.asp?t=lanz&co_temporada=2&co_ano_temporada=6&ds_temporada=Temporada%202012%20-%202013' |
|
URL_BAT_RR='/estadisticas_gen.asp?t=bat&co_temporada=2&co_ano_temporada=6&ds_temporada=Temporada%202012%20-%202013' |
|
|
|
SEPARATOR=';' #Separador para el archivo CSV |
|
|
|
def connect_and_extract_lvbp(url,expr_xpath,num_cols) |
|
arr_data=[] |
|
begin |
|
Net::HTTP.start(URL_BASE) do |query| |
|
puts "Conectandome a http://#{URL_BASE}#{url}" |
|
resp = query.get(url) |
|
puts "Resultado: #{resp.code}" |
|
if resp.code=='200' |
|
html = resp.body |
|
doc = Nokogiri::HTML.parse(html) |
|
celdas=doc.xpath(expr_xpath) |
|
i=0 |
|
info=[] |
|
celdas.children.each do |td| |
|
info<< td.text |
|
i+=1 |
|
if i==num_cols |
|
arr_data << info |
|
info=[] |
|
i=0 |
|
end |
|
end |
|
else |
|
puts "Error de conexion www" |
|
end |
|
end |
|
rescue Exception => ex |
|
puts ex |
|
end |
|
return arr_data |
|
end |
|
|
|
def print_data_csv(arr_data,arr_cols,filename) |
|
File.open(filename,'w') do |out| |
|
out.puts arr_cols.join(SEPARATOR) |
|
arr_data.each do |jug| |
|
item=jug.join(SEPARATOR) |
|
out.puts item |
|
end |
|
end |
|
puts "Creado exitosamente #{filename}" |
|
end |
|
|
|
def print_batting_stats(filename) |
|
arr_data= connect_and_extract_lvbp(URL_BAT_RR,"//table/tr/td[@class='tdTablaPos1']",COLS_BAT.size) |
|
if arr_data.size>0 |
|
arr_data.each do |jug| |
|
jug.each {|valor| valor.gsub!('.','')} |
|
end |
|
print_data_csv(arr_data,COLS_BAT,filename) |
|
end |
|
end |
|
|
|
def print_pitching_stats(filename) |
|
arr_data=connect_and_extract_lvbp(URL_PITCH_RR,"//table/tr/td[@class='tdTablaPos1']",COLS_PITCH.size) |
|
if arr_data.size>0 |
|
arr_data.each do |jug| |
|
jug.each {|valor| valor.gsub!('.',',')} |
|
end |
|
print_data_csv(arr_data,COLS_PITCH,filename) |
|
end |
|
end |
|
|
|
#------------- MAIN -------------- |
|
hoy=Date.today.strftime("%Y%m%d") |
|
print_batting_stats "rr_lvbp_bateo_#{hoy}.csv" |
|
print_pitching_stats "rr_lvbp_pitcheo_#{hoy}.csv" |
Buenas, estoy interesado en saber si el script todavia funciona, y queria consutarle si tendra algun script o base de datos donde pueda conseguir la informacion de temporadas anteriores, soy un estudiante de maestria de Investigacion de Operaciones, aficionados de la lvbp y queria elaborar un dashboard en lenguaje R con datos de la lvbp, usando shiny para eso.
Saludos.