<?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 "&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 (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) . '&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