En anteriores publicaciones he explicado como incorporar datos del tiempo o de la fase lunar a tu web (o a tu calendario).
Yo, para completar mi calendario le he incorporado el santo del día.
He realizado varios intentos buscando algún API del santoral (un sitio donde un ordenador pueda hacer una llamada pasando algo de información -la fecha por ejemplo- y recibir el santo correspondiente a esa fecha) y no lo he conseguido, no he encontrado ningún API del santoral, SI he encontrado varios widgets y he sacado la información de los mismos.
En este articulo te explico como extraer la información del widget del santoral para integrarla en tu web o tu calendario, y además podrás utilizar esta idea para trabajar con cualquiera otra integración.
A modo de ejemplo, aquí tienes varias direcciones de componentes para integrar en tu web el santo del día:
Si lo que necesitas es un widget, encontrarás documentación fácil en las webs respectivas de cómo integrarlo, en este post quiero explicar como trabajar con el contenido que te proporcionan para extraerlo y darle otros usos.
Esta función recupera el string (el nombre) del widget que proporciona santopedia.com.
function recuperar_santoral($fecha) {
# Aqui voy a recuperar el santoral desde http://www.santopedia.com
$url = "http://www.santopedia.com/widget.html";
$widgetsantoral = file_get_contents($url);
$posini = strpos($widgetsantoral, 'target="_blank">');
if (!($posini === false)) {
$santo = substr($widgetsantoral, $posini + 16, 150);
$posfin = strpos($santo, '</a>');
if (!($posfin === false)) {
$santo = substr($santo, 0, $posfin);
}
}
return $santo;
}
Vamos a explicarlo un poco:
En la definición de la función recibo una fecha (que no utilizo para nada, ya que el widget te da el santo de hoy, sin que le pases parámetros).
Defino la variable $url con la url que voy a invocar.
y utilizo la instrucción 'file_get_content'. Con esta instrucción en vez de presentar en pantalla el resultado que me entrega el widget, lo que hago es almacenarlo en una variable, ahora busco dentro del contenido de esa variable el santo de hoy.
Hay que analizar el contenido (hay que poner la url en el navegador, ejecutarlo y con el widget en pantalla seleccionar 'view page source').
Esto es lo que presenta el widget:
Y esta es la información que te entrega 'view page source':
Entre la información, hay que buscar dentro del <body> el texto que estamos buscando, en este caso 'San Juan de Dios', e identificar el string constante anterior que le precede. El string que encuentras delante es 'target="_blank">'.
Con esto ya sabemos donde buscar.
A continuación identificar el string constante que encuentras detrás de 'San Juan de Dios' , que es '</a>' y ya lo tenemos.
Ahora identifico en que posición aparece el string anterior y recorto a partir de ese punto (16 caracteres más ya que mi string de búsqueda es de 16 caracteres), Elimino también los caracteres a partir de </a> y finalmente en la variable $santo me queda el texto 'San Juan de Dios'.
Los comandos clave que he utilizado son sencillos:
- file_get_contents para obtener y mantener la información que me entrega la web del santoral.
- strpos para identificar en que posición esta la información que busco.
- substr para recortar de toda la página la información necesaria.
¿Como he utilizado esta función?:
Estoy presentando, en la cabecera de mi calendario diario, algo de información adicional (Santoral, fase lunar, tiempo actual), esta información la presento en un cuadro, justo por encima de la agenda del día.
En el calendario es configurable qué información se presenta en este cuadro.
Toda la información la compongo en una variable llamada '$contenido' que finalmente presento en pantalla.
Así es como incorporo el santo del día a mi cabecera del calendario:
$santo = recuperar_santoral($identificador);
$contenido = $contenido . '. Santo de hoy: ' .
'<acronym title="Informacion gracias a www.santopedia.com">' .
$santo . ' </acronym>';
Es importante, SI, es importante, mantener la información de la fuente o vínculos que el widget nos estaba entregando, nuestra intención no es robar la información, solo es adaptarla a nuestro formato, por lo tanto debemos presentarla en nuestra pantalla también con la referencia a su origen, tal como nos la han entregado en el widget. En este caso he definido el santo como un acrónimo, con esta definición aparece subrayado (seleccionable) y al poner el ratón encima nos muestra la información contenida en title. Esta información es importante mantenerla.
Cualquier duda... comentar.
Me parece muy interesante este post.
ResponderEliminarPor lo que veo se puede aprovechar para otro tipo de contenidos.
Supongo que si hay API es directamente más fácil.
A tener en cuenta.
¡Gracias por compartirlo!
Gracias por tu comentario. Tal como dices, es útil para extraer información de cualquier widget o página web (siempre que no hay un API disponible).
EliminarHe pensado una mejora para este código, si el widget que estas tratando es muy enrevesado puedes utilizar la instrucción strip_tags que elimina las etiquetas HTML y deja texto plano (mas o menos). Prueba en tu código a incluir
ResponderEliminar$widgetsantoral = strip_tags($widgetsantoral);
echo $widgetsantoral;
justo después de la instrucción
$widgetsantoral = file_get_contents($url);
Pruébalo y revisa bien lo que obtienes, puede que te resulte mas fácil obtener la cadena que buscas después de eliminar las etiquetas HTML del widget original.
(después de probarlo (si decides añadir esta linea de código) tienes que rehacer la función ya que string anterior y posterior serán diferentes y por supuesto quitar la sentencia echo)
A día de hoy ya disponen de API en SANTOPERIA
ResponderEliminar