Publicidade (Anuncie Aqui)

Resultados de busca do Google no seu site

Resultados de busca do Google no seu site

Hoje estava eu aqui, sem nada pra fazer, e resolvi mostrar pra vocês como é fácil usar a API de buscas do Google (Google Search API).

Fiz uma classe que vocês vão poder usar para pegar o resultado de busca do Google e exibir no seu site, na formatação que preferir.

A Classe – Versão 1.1

<?php

/**
 * API de busca do Google
 *
 * @author			Thiago Belem (contato@thiagobelem.net)
 * @link			http://blog.thiagobelem.net/
 * @version			1.1
 */
class googleSearchAPI {
	protected $url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&start=%s&q=%s';
	var $resultado, $pagina, $keywords;

	function __construct() {
		if (!function_exists('curl_init')) {
			trigger_error('A biblioteca cURL não está instalada!');
			return false;
		}
		if (!function_exists('json_decode')) {
			trigger_error('A biblioteca para manipulação de JSON não está instalada!');
			return false;
		}
	}

	/**
	 * Pega o resultado HTTP de uma URL
	 */
	protected function httpRequest($url) {
		$cURL = curl_init($url);
		curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($cURL, CURLOPT_FOLLOWLOCATION, true);
		$resultado = curl_exec($cURL);
		$resposta = curl_getinfo($cURL, CURLINFO_HTTP_CODE);
		curl_close($cURL);
		return $resultado;
	}

	/**
	 * Executa a busca
	 */
	function busca($keywords = null, $pagina = 1, $site = null) {
		$keywords = (is_null($keywords)) ? $this->keywords : $keywords;
		$start = (is_null($pagina)) ? 0 : (($pagina - 1) * 8);

		$bkeywords = (!is_null($site)) ? ($keywords . ' site:' . $site) : $keywords;

		$url = sprintf($this->url, (int)$start, urlencode($bkeywords));
		$resultado = $this->httpRequest($url);
		if (!$resultado) {
			trigger_error('Não foi possível acessar a URL de busca:<br />' . $url);
			return false;
		}
		$resultado = json_decode($resultado, true);

		$this->resultado = $resultado['responseData'];
		$this->keywords = $keywords;
		$this->pagina = $pagina;
	}

	/**
	 * Pega os resultados encontrados
	 */
	function resultadoSites() {
		return $this->resultado['results'];
	}

	/**
	 * Pega o total de sites encontrados
	 */
	function resultadoTotal() {
		return $this->resultado['cursor']['estimatedResultCount'];
	}
}

?>

Exemplo de Uso

<?php

$keywords = 'Thiago Belem';
$pagina = (isset($_GET['p'])) ? (int)$_GET['p'] : 1;

$gs = new googleSearchAPI();
//$gs->busca($keywords, $pagina); // Busca normal
$gs->busca($keywords, $pagina, 'thiagobelem.net'); // Busca em um site específico

$total = $gs->resultadoTotal();

echo "Total estimado de resultados: " . $total;
echo "<br />";
echo "<h2>Pagina: " . $gs->pagina . "</h2>";

foreach ($gs->resultadoSites() as $item) {
	echo "<h3>" . $item['title'] . "</h3>";
	echo "<p>" . $item['content'] . "</p>";
	echo '<a href="' . $item['unescapedUrl'] . '">' . $item['visibleUrl'] . "</a>";
}

echo "<hr />";

// Paginadores:

if (($pagina - 5) > 1) echo '...&nbsp;';

for ($n = 1; $n <= ceil($total / 8); $n++) {
	if (($n < ($pagina - 5)) OR ($n > ($pagina + 5))) continue;
	echo '<a href="?q='.$keywords.'&p='.$n.'">'.$n.'</a>&nbsp;';
}

if (($pagina + 5) < $total) echo '...';

?>

Infelizmente essa API de busca do Google só retorna 8 resultados por vez (uma limitação do Google mesmo)… mas você tem acesso a todas as páginas que precisar.. É só mudar o valor da variável $pagina (do exemplo).

[15.07.09] Atualização: Atualizei pra v1.1: Busca em um site específico

Espero que tenham gostado! ;)

Você também vai gostar de ler:

Postado em Artigos, PHP, Tutoriais

Com as tags , , , , , , , , , , , , , , , ,

Escrito por Thiago Belem

Gostou desse artigo?

Não se esqueça de assinar o RSS e divulgue-o para o mundo:

17 Comentários ou trackbacks

  1. Luciano disse:

    e a Codificação?
    acho que esta em UTF-8 como trocar para ISO?
    Abraços!

  2. Hiei disse:

    Obrigado,e parabéns pelo seu site!
    Se descobrir mais alguma coisa posta ae no seu blog q eu vou gostar!

  3. alex disse:

    ola esta dnod um problema na 9º pagina :

    Warning: Invalid argument supplied for foreach() in F:\SITES\www\buscador\index.php on line 52

    estive vendo mais não entendi o problema ainda.

  4. Hiei disse:

    Reparei que esse sistema não ta trazendo os mesmos resultados do Google.
    O que devo fazer para trazer o mesmo resultado?
    Quero unir vários buscadores!

  5. Olá Thiago,

    Se puder dar uma força na configuração da restrição da pesquisa em apenas um site pre-configurado.

    tentei de tudo aqui mas nada….

    Grande abraço…

  6. Resolvi essa parte já… Obrigado!

    No fim do código você disse que não tem condições de aumentar os registros, que o máximo é 4, mas disse que tem como navegar entre as páginas.

    Eu criei a navegação de links tipo <>
    funciona perfeitamente, utilizei o número que vem do $gs->resultadoTotal(); dividi por 4 dentro do ceil() para dar numero inteiro e com base nisso criei a paginação.

    O problema é que quando passo para a segunda página ele muda esse número. Tipo se pesquisei pela palavra ‘teste’ e deu 23 resultados encontrados, quando passo para a segunda página esse número muda pra 5.

    Muito estranho! peço desculpas pelas amolações, mas é que preciso muito dessa classe.

    Agradeço desde já..! Até mais..

    Se puder me adicionar no msn ae.. eu uso o YahooMessenger do Webmail
    é só adicionar lá.

    Valew..

  7. Desculpe a quantidade de comentários…. mas esqueci de falar:

    tentei fazer isso aqui pra usar mais palavras:

    $keywords = ‘Phelipp+de+avila’;

    $keywords = explode(“+”, $keywords);

    Mas dá esse erro:

    Warning: urlencode() expects parameter 1 to be string, array given in /home/****/public_html/busca.class.php on line 32

    Obrigado…

    • Thiago Belem disse:

      @Phelipp
      Se você mudar a forma que a classe trabalha você vai precisar mudar em outros lugares também, não só no explode… Eu testei a classe com mais de uma palavra e funcionou normalmente… Verifica se não é algo que vc tá fazendo errado. ;)

  8. Thiago… consegui colocar pra funcionar…

    mas quando busco por mais de uma palavra não funciona.
    o que eu posso fazer para resolver isso?

    Obrigado desde já e até mais…

  9. Olá Thiago!

    Adicionei no meu sistema a classe e me aparece o seguinte erro:

    Fatal error: Class ‘googleSearchAPI’ not found in /home/*****/public_html/index.php on line 769

    Porém adicionei a classe sim… tanto é que local ela não funciona e me o erro:

    Notice: A biblioteca cURL não está instalada! in C:\xampp\htdocs\..\busca.class.php on line 11

    Fatal error: Call to undefined function curl_init() in C:\xampp\htdocs\..\busca.class.ph on line 19

    Fico no aguardo de uma ajuda sua…

    Você conheçe alguma técnica ou algum sistema de busca “pronto” que faça a busca através dos textos das páginas tipo do google pra colocar internamente no site.

    Grande abraço, até mais.. Você está de parabéns, o site tá ótimo!

    • Thiago Belem disse:

      @Phelipp
      1 – Você incluiu o arquivo com a classe antes de tentar usá-lo pra uma busca?
      2 – Sobre o “biblioteca não instalada” você precisa instalar o cURL pra isso tudo funcionar.

  10. fschuindt disse:

    Nossa, muito bacana isso XD
    Cara, outra coisa que eu gostei foi desse seu plugin de códigos do WP, pra fazer highlight… Pode me dizer se ele é plugin mesmo ou se já é do theme?
    Se ele for plugin, tem como configurar as cores?

    Valeu!

Deixe um comentário

XHTML: Você pode usar essas tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Atenção: O seu comentário precisará ser aprovado antes de ser publicado

Trackbacks e Pings