Prerrequisitos
Yo he utilizado la gema HPRICOT (aunque su sitio web parece no estar activo, la gema se puede instalar).
Para instalarla: sudo gem install hpricot
Además hacen falta las gemas rubygems y open-uri.
Manos a la obra
La información en cuestión está en la Federación Española de Rugby. En el enlace calendario liga está la información que necesito.
Para ver únicamente la información necesaria, copio la ruta del enlace y lo abro en una nueva pestaña.
La página contiene varias listas desplegables para seleccionar categoría, temporada y equipo. Establezco las listas desplegables con los valores deseados y ya tengo la página de la que quiero extraer la información.
La ruta de la página (junto con los parámetros) es http://www.ferugby.com/competiciones/calendario.php?id2=3&fecha_1=2008&cat=Liga+Nacional#j7
Como la parte final (#j7) es un enlace local (o ancla) a la propia página, lo descartaré. La página se puede leer con:
page = Hpricot( open(url) )
Revisando el código fuente de la página, todas las tablas de jornadas están dentro de tablas con el tag HTML:
<table id="tabla" bordercolor="#990000" cellspacing="0" cellpadding="0" align="center" border="0" />
Con hpricot se puede extraer un array de tags que contengan una determinada propiedad. Para este caso
@tablas = page.search("//table[@id='tabla']" )
Así, ya tenemos el controlador:
def mostrar_calendario_liga
url = 'http://www.ferugby.com/competiciones/calendario.php?id2=3&fecha_1=2008&ide=&cat=Liga+Nacional'
#page = Hpricot(url) #si las codificaciones coinciden
page = Hpricot(Iconv.iconv("UTF-8", "ISO-8859-1", open(url).read).join )
@tablas = page.search("//table[@id='tabla']" )
end
Para la vista, hay que ver que cada tabla de cada jornada, tiene la siguiente estructura:
- 1ª fila: Número de jornada.
- 2ª fila: Encabezados de columnas.
- 3ª fila en adelante: Datos de los partidos.
<%for t in @tablas do%>
<%filas=t.search("//tr")%>
<table id="tabla" align="center" border="0">
<tbody>
<tr id="fil1">
<td id="cabecera_fila1" colspan="7">
<%=t.search("//tr").first.search("//td").first.inner_html%>
</td>
</tr>
<tr id="fil2">
<td width="1" align="center"></td>
<td width="1" align="center">FECHA</td>
<td width="1" align="center">HORA</td>
<td width="50%" align="center">EQUIPO LOCAL</td>
<td colspan="2" width="60" align="center">RESULTADO</td>
<td width="50%" align="center">EQUIPO VISITANTE</td>
</tr>
<%for r in filas[2..20]%>
<tr id="fila_contenido">
<%celdas=r.search("//td")%>
<%for celda in celdas[0..6] do%>
<td>
<%c=celda.search("//a")%>
<%c=celda if c.size == 0%>
<%if c.inner_html.include?('UMA')%>
<strong><%=c.inner_html%></strong>
<%else%>
<%=c.inner_html%>
<%end%>
</td>
<%end%>
</tr>
<%end%>
</tbody>
</table>
<%end%>
<p>
Los resultados se actualizan directamente desde la página de la
<a href="http://www.ferugby.com">Federación Española de Rugby</a>.
</p>
En la línea 18 pongo [2..20] para saltar las dos primeras filas, y un número suficiente (20 en este caso) para que no queden sin mostrar.
En la línea 20 se extraen los contenidos de los TD de la fila.
En la línea 21 se recorren los TD.
En las líneas 23 y 24 se extrae el contenido descartando la existencia de un posible enlace.
En las líneas de 25 a 29 se expone el contenido, destacando los que contengan el texto 'UMA'.
Lo último es elegir los estilos CSS para los ID de los tags de las tablas y conseguir el aspecto deseado.
Espero que le sirva a alguien, como me va a servir a mí para completar el resto de categorías.
No hay comentarios:
Publicar un comentario