Generar xml con posts provenientes de WordPress

Necesitábamos un script que generase un archivo xml con posts de un blog de wordpress para que quedase con la siguiente estructura:

<webdata>

<noticias>

<noticia>
<titulo>TÍTULO</titulo>
<entradilla>ENTRADILLA</entradilla>
<imagen>RUTA_IMAGEN</imagen>
<autor>AUTOR</autor>
<fecha>FECHA</fecha>
</noticia>

</noticias>

</webdata>


Aunque las funciones de WordPress ayudan a simplificar el proceso, tenemos los siguientes problemas:

  • Necesitamos extraer el texto de la entrada. La entrada contiene imágenes y estilos. Por fortuna existe una función llamada “get_the_excerpt()” que anticipa esa necesidad. Es posible que se necesite cambiar la longitud de la entradilla, para lo que habría que usar una función personalizada.
  • Queremos la ruta de la imagen. Esto es, con diferencia, lo más complicado, ya que necesitamos encontrar el atributo “src” de la imagen dentro del contenido de la entrada. Necesitamos usar una expresión regular.
  • Necesitamos la fecha y la hora. La función que devuelve la fecha no es “get_the_date()” como indicaría el patrón del resto de funciones, sino que se usa la función que sacaría la fecha por pantalla, “the_date()”, estableciendo ciertos parámetros. La llamada apropiada sería “the_date(”, ”, ”,false)”. El primer parámetro sería el formato; al dejarlo en blanco, cogería el formato por defecto, que es el que queremos. El segundo y el tercer parámetro son las etiquetas que envolverían la fecha. El último parámetro establece que no queremos que muestre el dato por pantalla.

El código sería el siguiente, incluida la carga de WordPress y la llamada a la función:

//incluimos wordpress
define(‘WP_USE_THEMES’, false);
require_once(‘./berasategui/wp-blog-header.php’);

function genera_xml_ultimos_posts ( $nombre_archivo = “” , $cantidad_posts = 5 ){

query_posts(‘showposts=’ . $cantidad_posts);

//*** CONSTRUCCIÓN DEL XML ***

$xml=”<webdata>”;
$cuenta_posts = 0;

while (have_posts()): the_post();

$cuenta_posts ++;
if ($cuenta_posts == 1){

$xml .=”<noticias>”;

}

$xml .= “<noticia>”;

//Añado el título

$xml .= “<titulo>” . get_the_title() . “</titulo>”;

//Añado la entradilla

$xml .= “<entradilla>”  . trim(get_the_excerpt()) . “</entradilla>”;

//Es necesario aislar el source de la imagen para incluir en el xml únicamente la ruta.

$data = get_the_content(__(‘(more…)’));

$pattern = ‘/<\s*img [^\>]*src\s*=\s*[\””\’]?([^\””\’\s>]*)/i’;
preg_match_all($pattern, $data, $match);

//Añado la ruta de la imagen al xml.

$xml .=”<imagen>” .  $match[1][0] . “</imagen>”;

//Añado el autor

$xml .=”<autor>” . get_the_author() . “</autor>”;

//Añado la fecha

$xml .=”<fecha>” . the_date(”, ”, ”,false) . “, ” . get_the_time() . “</fecha>”;

//Cierro la noticia

$xml .= “</noticia>”;

//En el caso de que sea la última noticia, tengo que cerrar el tag “<noticias>”

if ( $cuenta_posts == $cantidad_posts ) {

$xml .= “</noticias>”;

}

endwhile;

$xml .= “</webdata>”;

if ($nombre_archivo != “” || is_null($nombre_archivo) ) {

$fh = fopen( $nombre_archivo . ‘.xml’, ‘w+’);

}else{

$fh = fopen( ‘ultimos_posts.xml’, ‘w+’);

}

fwrite($fh, $xml);

}

genera_xml_ultimos_posts(“ultimos_posts”,3);

Publicado en PHP, Programación web, XML. Etiquetas: , , . 2 Comments »

2 comentarios to “Generar xml con posts provenientes de WordPress”

  1. Omar Says:

    Muy bueno el script; funciona perfectamente, pero he intentado incluir la categoría de las entradas y no acierto con la función. He probado con get_category(); get_cat_name() pero nada ¿Alguna idea para lograr esto? Gracias.

  2. carlos Says:

    Hola, este ejemplo lo hiciste para algún portal que solicitaba un xml, pienso…entonces siguiendo tus pautas me podria servir para olx , un portal que para publicar mis propiedades me pide lo mismo…disculpa mi ignorancia, pero donde lo insertas?? y como se comunica con el lugar del envio…saludos.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: