Bien, sigamos con nuestra mini–serie. Necesitamos tener una hoja de cálculo con los nombres de los municipios de Gipuzkoa en una columna y las URL de los ayuntamientos de dichos municipios en la columna adyacente. Ayer vimos que eso es viable y más o menos «automatizable», siempre que dispongamos de algún servicio que nos proporcione la URL de un municipio dado su nombre como parámetro.
La información en bruto la podemos encontrar en esta web de EUDEL. El objetivo es «recortar» esa información para guardarla en una simple tabla de una base de datos (usando MySQL como SGDB). Para ello, creamos primero el esquema de nuestra tabla municipios, donde guardaremos la información:
CREATE TABLE `municipios` (
`ID` int(11) NOT NULL auto_increment,
`nombre` varchar(200) NOT NULL default »,
`url` varchar(200) NOT NULL default »,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Un simple script PHP hará el resto:
include ("datosconexion.php"); // datos de conexión a MySQL
$municipios = "http://www.eudel.net/aNG/web/eus/est/udalerriak.jsp?nIdm=1&nId=3&sNombre=Gipuzkoa";
$linea = file_get_contents($municipios); // leemos la página de EUDEL y la guardamos en el string $linea
preg_match_all("/<li>(.*)<br><a(.*)>(.*)</a></li>/», $linea, $trozos); // expresión regular para sacar nombre_URL
$i = 0;
foreach ($trozos[1] as $nombre) { // recorremos el resultado de la expresión regular
$url = $trozos[3][$i];
$sql = «insert into municipios
set ID=», nombre=’$nombre’, url=’$url'»;
mysql_query($sql) or die(«Error:» . mysql_error()); // guardamos lo obtenido en la tabla municipios
echo $sql . «n»;
$i++;
}
?>
Una vez guardadas las tuplas (nombre, url), sólo nos queda crear el servicio php correspondiente:
include ("datosconexion.php");
//
$nombre = $_GET['municipio'];
$sql = "select * from municipios
where nombre LIKE '". mysql_real_escape_string($nombre) . "%'"; // intentando evitar ataques SQL Injection
//
$result = mysql_query($sql) or die("Error:" . mysql_error());
if (mysql_num_rows($result) > 0){
$linea = mysql_fetch_array($result);
echo $linea[‘url’];
}
?>
Ok! Todo funciona. ¿Y para qué quiero esos datos? Pronto lo veréis…