rssPeso(), detección del cambio de datos en paginas web y archivos online
Como lo prometido es deuda aqui va una aplicación directa de la anterior funcion linksHTML().
Contra todo pronostico, no.. no voy a hacer un robot de búsqueda que compita con google y yahoo en búsquedas en internet... mas que nada xq aruba no da para tanto en bases de datos
voy a hacer algo que seguro que muchos también encuentran de utilidad.
Que soy un adicto a las series no es un secreto.. de echo el ago que muchos saben por el twitter, y mi dilema esta en tener que mirar periodicamente webs como tusseries.com revisando serie por serie para saber si existe un nuevo capitulo ya que no tiene RSS como muchas otras.
Utilizando la función linksHTML() y una función que ahora expondré voy a construir un sistema simple que nos genere un RSS para avisarnos de si una web ha cambiado o no.
La función que va a obrar este milagro es la función rssPeso().
Lo que hace esta función es leer el archivo introducido como primer parámetro, utilizar lo leído para determinar el numero de caracteres que tiene y por tanto el peso del archivo y guardar este dato en un archivo dentro del servidor . Tiene una función adicional que permite ponerle un array de extensiones que verificar, cosa para la que se usa la función linksHTML() y que vale para verificar si algún archivo en lazado desde la web ha cambiado también aunque siga conservando el mismo nombre (como pasa por ejemplo en algunos sistemas de transmisión de capturas de cámara online o cambios de archivos o contenidos flash). El tercer parámetro indicará la carpeta en la que se quiere guardar los archivos temporales que guardan el peso especifico del archivo.
Para el primer ejemplo hay que crear un archivo que se llame rssPeso.php y poner el siguiente contenido (con las funciones arriba comentadas incluida la del final lógicamente)..
Este ejemplo registrara los cambios en la pagina principal de flickr sin alertar cuando se cambie aleatoriamente sus gráficos.
-
<?php
-
$url = 'www.flickr.com';
-
rssPeso($url);
-
?>
El siguiente ejemplo avisa no solo de cuando cambie el contenido de la pagina de google si no que también cuando cambie su imagen.
-
<?php
-
$url = 'www.google.es';
-
?>
El ultimo ejemplo es como el anterior solo que almacena los datos temporales en la carpeta "temp" del mismo directorio.
-
<?php
-
$url = 'www.google.es';
-
?>
Cualquiera de los ejemplos necesita de las funciones linksHTML() y rssPeso() para funcionar. Para ver el resultado solo hay que introducir la dirección del archivo PHP en un lector de RSS.
La función es:
-
function rssPeso($url, $extensiones_a_revisar='', $carpeta_contenidos='./'){
-
-
$peso_total = 0;
-
-
//deteccion de http
-
-
//detectar enlaces
-
$enlaces = linksHTML($url);
-
-
//apilar contenidos adjuntos
-
foreach($extensiones_a_revisar as $ext){
-
if(is_array($enlaces[$ext])) foreach($enlaces[$ext] as $URL) $peso_total += strlen(file_get_contents($URL));
-
}
-
}
-
-
//determinar si son diferentes al tamanio anterior
-
if($read != $peso_total) {
-
//escribir el tamanio actual en el archivo
-
}
-
-
//crear RSS
-
// Header para escribir XML
-
-
//titulo de la pagina web
-
preg_match_all("!<title>(.+)</title>!U",$contenido,$titulo); $titulo = $titulo[1][0] == '' ? $url : $titulo[1][0];
-
-
// Escribimos el archivo RSS
-
echo '<?xml version="1.0" encoding="iso-8859-1"?>
-
<rss version="0.92">
-
<channel>
-
<docs>'.__FILE__.'</docs>
-
<title>Detector de cambios RSS</title>
-
<link>'.$url.'</link>
-
<generator>www.tierra0.com</generator>
-
<description>Detector de cambios RSS</description>
-
<language>es</language>
-
-
<item>
-
<title>'.$titulo.' - '.$peso_total.'Bytes</title>
-
<link>'.$url.'</link>
-
<pubDate>'.date("j/m/y h:i", filemtime($carpeta_contenidos.'/'.base64_encode($url).'.cache')).'</pubDate>
-
<description>El archivo cambio la ultima vez el '.date("j/m/y h:i", filemtime($carpeta_contenidos.'/'.base64_encode($url).'.cache')).'. Ahora tiene '.$peso_total.'Bytes, '.($peso_total-$contenido).'Bytes mas que antes.</description>
-
<!--ng:token>'.base64_encode(date("j/m/y h:i", filemtime($carpeta_contenidos.'/'.base64_encode($url).'.cache'))).'</ng:token-->
-
</item>
-
</channel>
-
</rss>';
-
}
Los usos para esta función son solo limitados por la imaginación de cada uno.. se puede utilizar para detectar cuando sale una subvención, cuando cambia un horario, cuando se actualiza un dato introduciendo una pagina de búsqueda como variable o como medio para actualizar terceros códigos PHP... Si encontráis mas usos o correcciones ya sabéis donde escribirlas
!
Hola antares500,
Mis felicitaciones por tus posts, simpre son muy útiles y buenos, por cierto son 100% originales tus posts ? es que de ser así, estás hecho todo un crack ! :)P
Si algún día tienes tiempo hablamos si eso por el chat de gmail, para compartir algunas experiencias ya q soy programador y empresario junior.
Bueno, hasta pronto.
hola Scorpion, muchas gracias y si, son 100% originales
aun que las imágenes he de reconocer que la mitad son photoshopeos de los crack de deviantart los códigos y las ideas suelen ser entre el 90% y el 100% míos (también ayuda mucho es.php.net
).
Te agrego a mi gmail y algún día me cuentas. Un saludo y gracias por el comentario! Así da gusto compartir
Hola:
Creo que en la linea 52 deberia poner $peso_total-$read en vez de $peso_total-$contenido.
Interesante la funcion