<?php
// Interfaz PHP a la API de búsqueda de Google
// Copyleft 2005, Reven Sánchez
// versión 1.0a - 17 Marzo 2005
// Licencia Creative Commons by-sa-nc (http://creativecommons.org/licenses/by-nc-sa/2.1/es/)
// Permitida su redistribución/re-utilización/edición siempre que se mantenga esta licencia
// y que no sea redistribuido con fines comerciales.
// Utiliza este script según creas necesario. Modificalo a tu gusto!
//
// Sería un detalle un agradecimiento o link a www.reven.org
// También donaciones a través de http://www.reven.org/colabora/
error_reporting(E_ALL & ~E_NOTICE);
// Cronometraremos el script
$timeparts = explode(' ',microtime());
$starttime = $timeparts[1].substr($timeparts[0],1);
// Parámetros de configuración
$clave = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
/* Tu clave para utilizar la API de Google. Si no tienes una visita
https://www.google.com/accounts/NewAccount?continue=http://api.google.com/createkey&followup=http://api.google.com/createkey */
$site = "www.miweb.com"; // El sitio que deseas buscar. Normalmente el tuyo
// Si no se especifica buscará la web entera
$spelling = 0; // Cambia a 1 para que la búsqueda devuelva sugerencias ortográficas
// FIN Parámetros de configuración
$estescript = $_SERVER['PHP_SELF'];
$apiurl = "http://api.google.com/search/beta2";
// Obtenemos la búsqueda
$q = stripslashes ($HTTP_GET_VARS['q']);
$start = 0 + (stripslashes ($HTTP_GET_VARS['start'])); // Sumo cero para cambiar su tipo a entero: "truco"
include ("header.php"); // Editar este archivo para ajustar a nuestro sitio
if (!$q) { // Si no está definido 'q' entonces hay que dar un formulario
echo <<<EOT
<h2>Búsqueda</h2><br /><br /><br />
<form style="display: inline;" method="get" action="$estescript">
<p style="display: inline;">
<input maxlength="255" name="q" size="40" />
<input type="submit" value="Buscar!" />
</p>
</form>
EOT;
}else{ // Haz la búsqueda
include_once('nusoap.php'); // el que hace la magia
$fullquery = "$q site:$site";
// Significado de los parámetros en http://www.google.com/apis/reference.html#searchrequest
$APIparams = array("key" => $clave,
"q" => $fullquery,
"start" => $start,
"maxResults" => 10, // máximo 10
"filter" => false,
"restrict" => "",
"safeSearch" => true,
"lr" => "",
"ie" => "",
"oe" => "");
// Crear un nuevo cliente SOAP
$Client = new soapclient($apiurl);
// Obtener los resultados
$QueryResult = $Client->call("doGoogleSearch", $APIparams, "urn:GoogleSearch");
// Ver la documentación de la API de Google -> http://www.google.com/apis/reference.html#search_results_format
// Simplemente asignamos los resultados que queremos a variables. Se pueden asignar los que queramos
// Yo he dejado fuera los que no me importan, como ortografía, filtros, etc.
$total = $QueryResult["estimatedTotalResultsCount"];
$primero = $QueryResult["startIndex"];
$ultimo = $QueryResult["endIndex"];
$aproximado = "aproximadamente "; // Si los resultados son muchos tendremos un número aproximado
$tiempogoogle= $QueryResult["searchTime"];
if ($QueryResult["estimateIsExact"]){$aproximado = "";} // Pero si el número es exacto, eliminamos este término
if ($total > 0) { // Si hay resultados...
echo "<h2>Resultados</h2>\n";
// Esto muestra cosas adicionales que google devuelve en la búsqueda, como p.ej. "La palabra "a" es muy común..."
// echo $QueryResult["searchComments"];
// echo $QueryResult["searchTips"];
echo "<h4>";
damemaslinks();
echo "$primero - $ultimo de $aproximado $total resultados</h4>\n";
// Los resultados en sí
$QueryResult = $QueryResult["resultElements"]; // una matriz que contiene los resultados en sí. Ver API.
for ($i = 0; $i < count($QueryResult); $i++) {
$element = $QueryResult[$i];
$snippet[$i] = $element["snippet"];
$snippet[$i] = str_replace("<br>","",$snippet[$i]); // quitamos los <br> que incluye el resultado
// para que texto se ajuste a nuestro 'lay-out'
$url[$i] = $element["URL"];
$title[$i] = $element["title"];
$tamaño = $element["cachedSize"];
if ($title[$i] == "") {$title[$i] = str_replace("http://","",$url[$i]);} // Si no hay título, usa URL
echo '<p><a href="' . $url[$i] . '">' . $title[$i] . '</a><br />'."\n";
if ($snippet[$i] != "") {
echo $snippet[$i].'<br />'."\n ";
}
echo '<span>' . $url[$i] . " ($tamaño)" . '</span>';
echo "\n</p>\n";
}
echo ' <h4>';
damemaslinks();
echo " </h4>\n";
}else{ // No hay resultados
echo "<h2>No se encontraron resultados</h2>\n";
echo "<p>Lo siento, no se han encontrado páginas que contengan el término \"$q\".</p>\n";
}
} //fin de búsqueda
include ("footer.php");
// El usuario ya tiene el resultado, ahora lo logeamos
// Esto es experimental y no se incluye el script para ver los resultados.
// Si decides activarlo, puedes cambiar el formato de lo logeado.
// De lo contrario, quita este bloque completamente.
/*
$gestor = fopen("/var/www/searchlog.txt", "a"); // Edita esta ruta!!
$linealog = strftime("%H.%M.%S-%d.%m.%Y")."#"."$start"."#"."$q"."\n";
fwrite($gestor, $linealog);
fclose($gestor);
*/
// Fin del bloque log
// Funciones
// Links a los resultados sucesivos si hay más de 10
function damemaslinks(){
global $estescript,$q,$total,$ultimo,$primero;
if ($ultimo - $primero < 9) $total = $ultimo;
if ($total > 10) {
if ($primero < 40) {
$x = 0;
} else {
$x = round (max (0, min ($primero - 40, $total - 96) / 10));
}
echo "<span style=\"float:right;\">\n";
for ($i = $x; $i < $x + 10; $i++) {
if ($i != round ($primero / 10)) {
echo ("<a href=\"$estescript".'?q=' . urlencode($q) . '&start=' . ($i * 10) . '">');
echo ( ($i + 1) . "</a> \n");
} else {
echo ($i + 1) . " \n";
}
if (max (10, ($i + 1) * 10) >= $total) break;
}
echo "</span>\n";
}
}
// Final del script
// En footer.php podemos incluir funciones de php para mostrar información de depuración de la búsqueda.
// Yo lo he hecho así porque me gusta que la salida HTML empiece en header.php y termine en footer (y no en
// el propio script; en mi opinión es más sencillo controlar que generamos HTML válido).
// Por ello la función que toma el tiempo final y da el tiempo de ejecución del script está en footer.php.
// De todas formas por si sirve de referencia, aquí está:
/*
$timeparts = explode(' ',microtime());
$endtime = $timeparts[1].substr($timeparts[0],1);
$tiempoempleado = bcsub($endtime,$starttime,6);
*/
?>
Volver