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 '... ';
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> ';
}
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:
- Open Search: Adicionando a Busca Rápida no seu site
- Exibindo mapas no seu site – Google Maps + PHP – Parte 2
- Buscando a Latitude e Longitude de um endereço – Google Maps + PHP – Parte 1
- Sistema de busca em PHP e MySQL com paginação
- Google muda o sistema de busca
Postado em Artigos, PHP, Tutoriais
Com as tags AJAX, API, Busca, Classe, cURL, Google, Google Search API, JS, JSON, Manipulação, PHP, Resultados, Scripts, Search, URL, Web, Webservice
Escrito por Thiago Belem
Gostou desse artigo?
Não se esqueça de assinar o RSS e divulgue-o para o mundo:

e a Codificação?
acho que esta em UTF-8 como trocar para ISO?
Abraços!
@Luciano
Procure sobre as funções utf8_decode e utf8_encode… Abraços
Muito legal parabens
Obrigado,e parabéns pelo seu site!
Se descobrir mais alguma coisa posta ae no seu blog q eu vou gostar!
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.
@Alex
Não copie e cole o código.. Verifique se ele se adequa ao seu sistema e se está fazendo tudo certinho… Dá uma revisada geral.
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!
@Hiei
Sobre isso não tenho como te responder… É uma API criada pelo próprio Google… Eu apenas mostrei como usá-la.
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…
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..
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…
@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.
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…
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!
@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.
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!
@fschuindt
É um plugin do WP mesmo. Vem um arquivo CSS nele que você pode modificar.