Web Services e PHP: Google em qualquer site, com a sua cara.
Olá pessoal. A idéia desta matéria é apresentar como adicionar uma busca do Google num determinado site, com a sua cara. Ou seja, você a montará da maneira como quiser, até mesmo sem o usuário que entrar no site souber que a busca é do Google.
Talvez você ainda não tenha entendido, então, vamos pelo começo. O Google, como sempre, está sempre por dentro de novas tecnologias. Com o surgimento dos Web Services não foi diferente.
Através do site www.google.com/api, temos acesso à API do Google, onde você se cadastra e tem acesso em como utilizar os serviços web disponibilizados pelo Google.
Bom, para quem quiser mais informações, pode acessar o link acima e dar uma estudadinha.
Acredito que, talvez ainda não tenha comentado isto, mas uma das principais idéias dos Web Services é de ser uma aplicação Programador-Programados. Isso quer dizer que, nesse caso, o Google cria a função que atua como servidor e simplesmente te diz como você pode acessá-la.
A resposta desta função será apenas um conjunto de variáveis de texto, onde você receberá esses parâmetros e organizará da maneira que lhe convier, com o seu próprio visual.
Entenderam a idéia da coisa? Um outro exemplo, você possui um e-commerce, e faz envios de mercadoria pelo correio. Bom, como vou calcular o frete?
O site dos correios também lhe fornecem um Web Services para este caso, então você simplesmente criaria um cliente que acessaria o serviço dos correios e retornaria apenas uma variável $valor. Isto permite que você adicione no seu site da maneira que quiser, sem ter que criar frames, etc. etc. etc., acho que nem preciso comentar o ganho disto.
Exemplo simplificado: (estes dados não existem na verdade)
$soapclient = new soapclient(“http://www.correios.com.br/webservice/server.php”,false);
$res = $client->call('checkSW',array('cepOrigem'=>$cepOri,'cepDestino'=>$cepDest));
echo $res;
|
Neste caso, o server.php iria retornar apenas o cálculo da tarifa entre os dois ceps, e com está variável de retorno, você adicionaria da maneira que quisesse em seu site, respeitando cores, estilos, etc...
Vamos ao Sr. Google:
<?php
// include a API nusoap // Lembre-se! A extension soap.dll/soap.so deve estar COMENTADA (;soap.ext) no arquivo php.ini include("nusoap.php"); // instancia a classe Soap Cliente para se conectar ao Server do Google $soapclient = new soapclient("http://api.google.com/search/beta2");
class clsGoogleApi {
var $theResultSet; // pega os resultados da busca como dados pelo google api
var $theResults=array(); var $theRowShown=0; // Seta o índice à última fileira mostrada var $theMaxResults; // Seta o parâmetro dado dos resultados máximos ao construtor var $flgError = false; // indica se houver erro ou não var $theSearchQuery; // pergunta para a busca var $theEstimatedResultsCount; // número dos resultados encontrou pelo Api
function clsGoogleApi($search_what,$start,$maxResults) {
global $soapclient;
$params = array( 'key' => 'tbZF6P1QFHJB23E5zqVwgyytmQPuVkLC', // chave da licença de Google. Para pegar a sua própria chave, acesse www.google.com/api 'q' => $search_what, // termo da busca 'start' => $start, // apartir do resultado 'maxResults' => $maxResults, // mostrar um total de resultados 'filter' => false, // remove resultados similares 'restrict' => '', // restrição a determinado assunto 'safeSearch' => false, // remover conteúdo adulto 'lr' => '', // retringir a um certo idioma 'ie' => '', // input encoding 'oe' => '' // output encoding ); // invocando os métodos do servidor $this->theResultSet=$soapclient->call("doGoogleSearch", $params, "urn:GoogleSearch", "urn:GoogleSearch"); $this->theMaxResults=$maxResults;
// imprimindo os resultados
if ($this->theResultSet['faultstring']) { echo $this->theResultSet['faultstring']."<br>"; $this->flgError=true; } else { $this->flgError=false; $this->theRowShown=0; $this->theSearchQuery=$this->theResultSet['searchQuery']; $this->theEstimatedResultsCount=$this->theResultSet['estimatedTotalResultsCount']; if (is_array($this->theResultSet['resultElements'])) { $this->theResults=array(); foreach ($this->theResultSet['resultElements'] as $r) { $result["URL"]=$r['URL']; $result["cached-size"]=$r['cachedSize']; $result["snippet"]=$r['snippet']; $result["directory category"]=$r['directoryCategory']; $result["related information present"]=$r['relatedInformationPresent']; $result["directory title"]=$r['DirectoryTitle']; $result["summary"]=utf8_decode($r['summary']); $result["title"]=utf8_decode($r['title']); $this->theResults[]=$result; } } } } function getResultNextItem() { $result=$this->theResults[$this->theRowShown]; $this->theRowShown++; if (($this->theRowShown > $this->theMaxResults) or ($this->theRowShown > $this->theEstimatedResultsCount)) { $result=false; } return $result; } } ?> |
Criando um form simples de busca :
<form action="clsgoogleapi.php" method="post" name="form1">
Palavra/Frase: <input name="palavra" type="text" id="palavra" size="40"> Resultados por Página: <select name="resultados" id="resultados"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> <option value="7">7</option> <option value="8">8</option> <option value="9">9</option> <option value="10">10</option> </select> <input type="submit" name="Submit" value="Buscar"> </form> |

Pegando os resultados (adicione estas linhas após a classe):
$palavra = $_POST['palavra'];
if(empty($palavra)) $palavra = $_GET['palavra']; $resultados = $_POST['resultados']; if(empty($resultados)) $resultados = $_GET['resultados']; $myQuery=new clsGoogleApi($palavra,$inicio,$resultados);
if ($myQuery->flgError) {
echo "Error!"; } else { echo "Buscando por <b>". $myQuery->theSearchQuery."</b> encontrou <b>".$myQuery->theEstimatedResultsCount."</b> resultados<hr>"; $item=$inicio; echo "<ul>"; while ($result=$myQuery->getResultNextItem()) { $item++; echo "<li> $item - ".$result["title"]." (<a href=".$result["URL"].">".$result["URL"].")</a><br>".$result["snippet"]."(".$result["cached-size"].")"; } echo "</ul>"; } |
Personalizando os resultados da busca, com paginação: (desculpem o código, mas esta bem precário, apenas para demonstração)
echo "<a href=busca.php>BUSCAR OUTRA COISA</a><br><br>";
$pagina = $_GET['pagina'];
$palavra = $_POST['palavra'];
if(empty($palavra)) $palavra = $_GET['palavra']; $resultados = $_POST['resultados']; if(empty($resultados)) $resultados = $_GET['resultados'];
if($pagina=="") {
$pagina="1"; }
$inicio=$pagina-1;
$inicio=$resultados*$inicio; $inicio = (int) $inicio; $resultados = (int) $resultados; echo "Página = $pagina<br>Início = $inicio<br>Resultados por páginas = $resultados<br>"; $myQuery=new clsGoogleApi($palavra,$inicio,$resultados);
if ($myQuery->flgError) {
echo "Error!"; } else { echo "Buscando por <b>". $myQuery->theSearchQuery."</b> encontrou <b>".$myQuery->theEstimatedResultsCount."</b> resultados<hr>"; $item=$inicio; echo "<ul>"; while ($result=$myQuery->getResultNextItem()) { $item++; echo "<li> $item - ".$result["title"]." (<a href=".$result["URL"].">".$result["URL"].")</a><br>".$result["snippet"]."(".$result["cached-size"].")"; } echo "</ul>"; } $menos=$pagina-1; // Calculando página posterior $mais=$pagina+1; // Cálculos para a mostragem de páginas $p_ini=$mais-1; $p_ini=$resultados*$p_ini; echo "<a href='?palavra=$palavra&pagina=$menos&resultados=$resultados'>anterior</a>"; echo " - "; echo "<a href='?palavra=$palavra&pagina=$mais&resultados=$resultados'>proxima</a>"; |
Resultado:

Ai está o google no meu site com a minha cara, como podem ver ta bem feinho, hehe.
Bom pessoal, desculpem não ter comentado, mas como descrevi no inicio da matéria, o tempo está curto, porém, o código é bem acessivel e fácil de entender, e lembrem-se, qualquer dúvida, www.google.com/api.
Nenhum comentário:
Postar um comentário