Revista Empresa

Obtener XML desde MySQL y PHP

Publicado el 17 septiembre 2010 por Albertllueca

Obtener XML desde MySQL y PHP

He tenido problemas para poder sacar información de una base de datos (MySQL) alojada en un hosting externo donde tenemos instalado un Joomla!. La conexión a la base de datos daba errores, y como a grandes problemas, grandes soluciones, decidimos construir un PHP que devolviera un XML con la información que queriamos, eso si, alojandolo en el servidor donde teniamos la base de datos, ya que el acceso via LOCALHOST si que respondia correctamente.

Hicimos dos scripts uno donde sacabamos la información de los contenidos (tabla #__content) y otro que nos mostraba el contenido de los eventos subidos con el componente EventList (las tablas afectadas fueron #__eventlist_venue y #__eventlist_events).

Para los dos scripts tenemos partes comunes como por ejemplo la cabecera y la conexión a la base de datos, veamoslo en un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
header ('Content-type: text/xml');
echo ('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
');
echo ('<rss version="2.0">
');
echo ('<eventos>
');
mysql_query("SET NAMES 'utf8'");
$link = mysql_connect("localhost", "usuario", "password");
mysql_select_db("basededatos", $link);
$result = mysql_query("SELECT * FROM jos_eventlist_events order by id desc limit 5;", $link);

El siguiente paso seria recorrer el resultado para poder pintar el XML correctamente, esto lo haremos con un WHILE,

1
while ($row = mysql_fetch_array ($result))

Para obtener el contenido también queremos sacar la primera imagen del mismo para poder disponer de la URL para poder usarla, así como limpiar el HTML del texto introductorio, para evitar problemas al escribir el XML, un ejemplo de esto seria (esto iria dentro del bucle WHILE):

1
2
3
4
5
6
 
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $row['introtext'], $matches);
$first_img = $matches [1] [0];
 
 
$nombre = strip_tags($row['introtext']);

En la parte de eventos tenemos que hacer una consulta a otra tabla dentro del WHILE ya que el nombre del sitio lo tenemos en un tabla diferente, el codigo para obtenerlo seria:

1
2
3
4
5
6
7
8
9
10
$queryVenue = "SELECT venue FROM jos_eventlist_venues where id = "$row['locid']" order by id desc limit 5;";
$resultVenue = mysql_query($queryVenue, $link);
echo ('<lugar>
');
while ($rowVenue = mysql_fetch_array ($resultVenue))
{
echo $rowVenue['venue'];
} echo ('</lugar>
');      
$nombre = strip_tags($row['introtext']);

Para finalizar deberemos de liberar el mysql con el siguiente comando:

1
mysql_free_result($result);

Un ejemplo del resultado del XML seria el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<rss version="2.0">
	<enredos>
		<enredo>
			<title>
			700 anys de Fira a Gandia</title>
			<introtext>
			el proper dijous 30 de setembre comen&#65533;aran la Fira i les Festes de Gandia, capital de La Safor, que duraran fins al diumenge 3 d&rsquo;octubre. La Fira enguany t&#65533; la particularitat de complir 700 anys
			</introtext>
			<url>
			http://enredarse.com/index.php?option=com_content&view=article&id=562&catid=44&lang=es
			</url>
			<imagen>
			</imagen>
		</enredo>
	</enredos>
</rss>

Y con este codigo podemos recuperar los contenidos y los eventos para poder mostrarlos en otro sistema como puede ser Sharepoint.

(Los ficheros de ejemplo los puedes descargar aquí)


Volver a la Portada de Logo Paperblog