#!/usr/bin/env gbs2
'Script que descarga una cita aleatoria de sabidurias.com
USE "gb.net"
USE "gb.pcre"
USE "gb.net.curl"
PRIVATE hCliente AS NEW HttpClient AS "Cliente"
PRIVATE sCita AS String
PRIVATE sAutor AS String
PUBLIC SUB Descargar_Pagina()
'Establece opciones del objeto de CURL
hCliente.Close
hCliente.Async = TRUE
hCliente.Timeout = 20
hCliente.URL = "http://www.sabidurias.com/frase-infinita/es"
hCliente.Get()
END
PUBLIC SUB Cliente_Error()
'Si hubo un error descargando la pagina (de CURL)
PRINT "No se pudo establecer conexion"
END
PUBLIC SUB Cliente_Finished()
'Se ejecuta cuando se descarga satisfactoriamente la página
DIM sTexto AS String
IF Lof(hCliente) THEN
READ #hCliente, sTexto, Lof(hCliente)
IF Obtener_Cita(sTexto) THEN
PRINT "No se pudo obtener la cita"
ELSE
PRINT "\"" & Trim(sCita) & "\", " & Trim(sAutor)
ENDIF
ELSE
PRINT "Error: Se descargo una página vacia"
ENDIF
END
PUBLIC FUNCTION Obtener_Cita(sTemp AS String) AS Integer
'Toma el texto y obtiene la cita con expresiones regulares, devuelve 1 si fallo algo
DIM rExpresion AS Regexp
DIM sPatronCita AS String
DIM sPatronAutor AS String
sPatronCita AS String = "_cita\">([^><]*)</a" 'entre _cita"></a tomar tomar todos los caracteres que no seab un > o un <
sPatronAutor AS String = "_home\">([^><]*)</a" 'mismo
TRY rExpresion = NEW Regexp(sTemp, sPatronAutor)
IF ERROR THEN RETURN 1
IF rExpresion.SubMatches.Count > 0 THEN
sAutor = rExpresion.SubMatches[1].Text
ELSE
RETURN 1
ENDIF
TRY rExpresion = NEW Regexp(sTemp, sPatronCita)
IF ERROR THEN RETURN 1
WHILE rExpresion.SubMatches.Count > 0 'recorrer el texto y cuando se encuentra parte de la cita borrarlo asi no aparece de nuevo
sCita &= rExpresion.SubMatches[1].Text & " "
sTemp = Mid(sTemp, rExpresion.Offset + 1 + Len(rExpresion.SubMatches[1].Text))
rExpresion = NEW Regexp(sTemp, sPatronCita)
IF ERROR THEN RETURN 1
WEND
END
PUBLIC SUB Main()
Descargar_Pagina()
END
'Script que descarga una cita aleatoria de sabidurias.com
USE "gb.net"
USE "gb.pcre"
USE "gb.net.curl"
PRIVATE hCliente AS NEW HttpClient AS "Cliente"
PRIVATE sCita AS String
PRIVATE sAutor AS String
PUBLIC SUB Descargar_Pagina()
'Establece opciones del objeto de CURL
hCliente.Close
hCliente.Async = TRUE
hCliente.Timeout = 20
hCliente.URL = "http://www.sabidurias.com/frase-infinita/es"
hCliente.Get()
END
PUBLIC SUB Cliente_Error()
'Si hubo un error descargando la pagina (de CURL)
PRINT "No se pudo establecer conexion"
END
PUBLIC SUB Cliente_Finished()
'Se ejecuta cuando se descarga satisfactoriamente la página
DIM sTexto AS String
IF Lof(hCliente) THEN
READ #hCliente, sTexto, Lof(hCliente)
IF Obtener_Cita(sTexto) THEN
PRINT "No se pudo obtener la cita"
ELSE
PRINT "\"" & Trim(sCita) & "\", " & Trim(sAutor)
ENDIF
ELSE
PRINT "Error: Se descargo una página vacia"
ENDIF
END
PUBLIC FUNCTION Obtener_Cita(sTemp AS String) AS Integer
'Toma el texto y obtiene la cita con expresiones regulares, devuelve 1 si fallo algo
DIM rExpresion AS Regexp
DIM sPatronCita AS String
DIM sPatronAutor AS String
sPatronCita AS String = "_cita\">([^><]*)</a" 'entre _cita"></a tomar tomar todos los caracteres que no seab un > o un <
sPatronAutor AS String = "_home\">([^><]*)</a" 'mismo
TRY rExpresion = NEW Regexp(sTemp, sPatronAutor)
IF ERROR THEN RETURN 1
IF rExpresion.SubMatches.Count > 0 THEN
sAutor = rExpresion.SubMatches[1].Text
ELSE
RETURN 1
ENDIF
TRY rExpresion = NEW Regexp(sTemp, sPatronCita)
IF ERROR THEN RETURN 1
WHILE rExpresion.SubMatches.Count > 0 'recorrer el texto y cuando se encuentra parte de la cita borrarlo asi no aparece de nuevo
sCita &= rExpresion.SubMatches[1].Text & " "
sTemp = Mid(sTemp, rExpresion.Offset + 1 + Len(rExpresion.SubMatches[1].Text))
rExpresion = NEW Regexp(sTemp, sPatronCita)
IF ERROR THEN RETURN 1
WEND
END
PUBLIC SUB Main()
Descargar_Pagina()
END