Ejemplo de un filtrador de noticias : fetching

Escrito el 22/October/2007 por juan_belon

Hoy aprenderemos cómo cargar una página web externa y "pelar" el contenido de la "patata" para quedarnos sólo con lo que nos interesa así como formatear el resultado.

Lo primero que necesitamos para realizar nuestro script es una URL objetivo y el fichero de caché donde se escribirá cada día,para ello declaramos las siguientes variables:


<?php
$f 
‘/ruta_completa_al_directorio_de_caché/granada.xml';
$url "http://es.noticias.yahoo.com/rss/granada.xml";

?>


de forma que lo primero que haremos será comprobar si disponemos de tal fichero para descargarlo en caso de que no sea así:

___PHP___

if (!file_exists($f) //Existe el fichero?
|| (date("d/m/Y",filemtime($f))-date("d/m/Y"))<0) //si,existe, tiene más de un día?
{ //en tal caso lo borramos
@unlink($f); //Recordar que @ se pone para que no se disparen posibles errores
//damos por supuesto que tanto el directorio como el fichero tiene permisos de escritura
$contenido = file_get_contents($url);
$fp = fopen($f,'w');
fwrite($fp,$contenido);
fclose($fp);
}
___PHP___

Una vez dispuesto el contenido que queremos "maquillar" primero extrayéndole la información que necesitamos,leemos el fichero final en la misma variable por aquello de la eficiencia en espacio,reutilizando la misma variable (si es que se hubiera utilizado anteriormente):


<?php
$contenido 
file_get_contents($f);

?>


Con el contenido en memoria empezamos a "recortar" el contenido que nos interesa:

___PHP___
preg_match_all('/<item>.*<\/item>/isU',$contenido,$noticias);
___/PHP___

con esta expresión regular obtenemos todos los items del canal RSS de forma que nos quedamos con las $noticias (un array), del contenido, ahora sólo tenemos que iterar entre dichos elementos para ir extrayendo los títulos,enlaces y html que tiene cada uno de los items…

___PHP___
echo ‘<ul>';
$n = sizeof($noticias[0]);
for ($i=0; $i<$n; $i++){
preg_match("/<title>.*<\/title>/isU",$noticias[0][$i],$titulo);
$titulo = str_replace(array("<title>","</title>"),"",$titulo[0]);
preg_match('/<guid (.*)>(.*)<\/guid>/isU',$noticias[0][$i],$enlace);
$enlace = preg_replace('(<guid isPermaLink="false">)',"",$enlace[0]);
$enlace = ‘<a href="http://es.noticias.yahoo.com'.
utf8_decode(str_replace("</guid>","",$enlace)).'">ver</a>';
preg_match('/<media:text type="html">(.*)<\/media:text>/isU',$noticias[0][$i],$html);
$html = (str_replace(array('<media:text type="html">','</media:text>'),"",$html[0]));
$titulo = utf8_decode(str_replace(array('<![CDATA[',']]>'),array(""),$titulo));
echo ‘<li>'.$titulo.'<br>'.$html.'<br>'.$enlace.'<br></li>
‘;
}
echo ‘</ul>';

___/PHP___

Ésto convierte todo el XML en un nuevo código HTML con una lista (<UL></UL>) de elementos con noticias y enlaces más una pequeña descripción en HTML.

Espero que os haya servido la explicación.

Saludos.

Truco para renombrar varios ficheros

Escrito el 04/October/2007 por juan_belon

Éste truco es útil cuando tenemos muchos ficheros con un patrón, por ejemplo, imágenes en un idioma, que empiezan por es_[nombre_imagen].[extensión], para renombrarlos a otro idioma, por ejemplo: en_[nombre_imagen].[extensión]…y para hacerlo utilizaremos una expresión regular super simple.:D
Para renombralos todos de golpe en una sóla instrucción simplemente hacemos la llamada:


<?php
rename
(‘y/es_/en_/',"*");

?>


o bien podemos hacer uso del comando de GNU/Linux con la instrucción adecuada para ello:


<?php
chdir
(RUTA_COMPLETA_AL_DIRECTORIO_DE_LOS_FICHEROS);
shell_exec("rename 'y/es_/en_/' * ");

?>


Así que podemos crearnos una función simple para renombrar ficheros masivamente, que quedaría tal que así:


<?php
function renombra_ficheros($original,$cambio){
return 
rename‘y/'.$original.‘/'.$cambio.‘/',"*");
}

?>


Si alguien tiene otra idea, simplemente la comenta XD

Ejemplos de webs 2.0

Escrito el 03/October/2007 por juan_belon

Lista de las mejores webs 2.0 de código libre :

  • Senseidav 2.0 theta : tu comunidad de arte en la red
  • eGourmet demo prototype 0.1 beta
  • Pionono.es : tu tienda de piononos granadinos online y para toda España
  • …¿quién da más?