23
Resultados de busca do Google no seu site
Filed Under (PHP, Programação) by Alex P. Torres on 23-11-2009
Tagged Under : api, biblioteca, busca, buscador, classe, google, mais, PHP, programacion, sites, web, webservice
Aprenda usar a API do Google para fazer buscas atraves de seu site.
esta classe foi desenvolvida por Thiago Belem
Eu somente utilizei e gostei como funciona muito bom..
<?php
/**
* API de busca do Google
*
* @author Thiago Belem (<a href="mailto:contato@thiagobelem.net">contato@thiagobelem.net</a>)
* @link <a href="http://thiagobelem.net/blog/">http://thiagobelem.net/blog/</a>
* @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 nesta pagina você modifica a seu gosto.
<?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).
