~ overflow ~

Custom Google Search “API” by PHP (No API Needed)

by z3n on Jun.16, 2009, under Coding, Tips & Hints English

Problema:

Eu estava procurando por um API para fazer buscas no google para usar em um script em php, podendo assim, manipular os resultados e urls. Depois de alguma busca achei o google search api que funciona com a extenção SOAP do php, porém, este API foi descontinuado e substituído pelo API em AJAX, que não serve o propósito, uma vez que processa os dados no cliente e não no servidor como era a minha idéia inicial.

Solução:

Pode parecer com um hack, porém é a única forma que eu encontrei, e além disso, foi muito mais fácil do que ficar procurando informações sobre o API. Este PHP faz um pedido normal ao google depois corta o resultado usando DOM , filtrando e finalmente retornando os URLs do resultado da busca. Você pode alterar o domínio do google para fazer buscas localizadas em outros países.

Problem:

I was looking for an API to do searches by google using a custom made php script, so i could display the results the way i want. I found out about a google search api that work with SOAP, however it’s been deprected and they only have the useless AJAX option, which don’t really serve my propouse since the searches would be client-side processed at AJAX, and i needed them server-side processed.

Solution:

This might looks like a hack, but there’s nothing much else we can do, although, for me, it was much easier than doing the research on the original api and finally finding out it was deprected. This PHP script will do a regular request to google, then it will process the data using DOM, cut it removing google ads and other crap, and finally return only the urls of the search. This will also make you able to search on country specific google, just change the domain and filter to get the results you want.

So here’s the PHP source that don’t depend on google happyness to work:

// (c) z3n – R1V1@090616 – z3n666@gmail.com – www.overflow.biz
  1.  
  2. if (!isset($argv[1])) { echo "Usage: ".$_SERVER['PHP_SELF']."  [start]";die; } else { $s=$argv[1]; }
  3.  
  4. $e=(isset($argv[2])) ? "&start=".$argv[2] : "";
  5.  
  6. $x=file_get_contents("http://www.google.com/search?q=".$s."&num=100".$e);
  7.  
  8. // apply DOM
  9.  
  10. $dom=new DOMDocument();
  11. @$dom->loadHTML($x);
  12.  
  13. $xpath=new DOMXPath($dom);
  14. $a=$xpath->evaluate("/html/body//a");
  15. for ($i=$k=0;$i<$a->length;$i++) {
  16.  $y=$a->item($i);
  17.  $z=$y->getAttribute('href');
  18.  // filter out google crap, wikipedia and youtube
  19.  if (($z{0} != "/") && (strpos($z,"q=cache:") === false) && (strpos($z,"youtube.com/") === false) && (strpos($z,"wikipedia.org/") === false) && (strpos($z,".google.com/") === false)) {
  20.   $_url[$k]=$z;$k++;
  21.  }
  22. }
  23.  
  24. print_r($_url);
  25. echo "Found: ".$k." urls.";

* Note: You need DOM Object support in order to run this script; This example has been developed to accept input from the CLI, you can easly change it to work inside your script or/and accept $_GET or $_POST.

*Nota: Você irá precisar de suporte a DOM para rodar este script; Este exemplo foi desenvolvido para aceitar inputs pelo CLI, porém você pode facilmente modifica-lo.

:, , , , , , , ,


No comments for this entry yet...

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!