<?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 + (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 
"&nbsp;</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 (0min ($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) . '&amp;start=' . ($i 10) . '">');
                    echo ( (
$i 1) . "</a>&nbsp;&nbsp;\n");
                } else {
                    echo (
$i 1) . "&nbsp;&nbsp;\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