Google search parser

Contenu du snippet

Un petit script qui permet d'intégrer le moteur de recherche google à son site sans passer par leur API... peut être très utile pour un intranet par exemple ;)

Source / Exemple :

<?php
/**
* Google search parser est un module permettant d'afficher les résultats de recherche google sans passer par leur api
* Réalisation : Nans Stefanini -> http://nans.stefanini.free.fr
* Blog : http://www.22h22.fr
*/


//renvoie une url longue raccourcie
function ShortDisplayURLggp($FullPath,$MaxLenght=65)
{
	If (strlen($FullPath) > $MaxLenght)
	{
		//Suppression des arguments et fragment si nécessaire
		if (strpos($FullPath,"#",0) > 0) $FullPath = substr($FullPath,0,strpos($FullPath,"#",0));
		if (strpos($FullPath,"?",0) > 0) $FullPath = substr($FullPath,0,strpos($FullPath,"?",0));

		If (strlen($FullPath) > $MaxLenght)
		{
			// Decompose l'URL
			$FullPathParsed=parse_url($FullPath);
			// Parties minimales
			$RootPath = $FullPathParsed['scheme'].'://'.$FullPathParsed['host'];
			// Slash de fin si dossier
			if (substr($FullPathParsed['path'],-1) == '/')
			{
				$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1);
				$isFolder = TRUE;
			}
			else
			{
				$isFolder = FALSE;
			}
			$PathBaseName = basename($FullPathParsed['path']);
			$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen($PathBaseName)-1);
			// Pas besoin de citer l'index
			if (($PathBaseName == 'index.html') OR ($PathBaseName == 'index.php') OR ($PathBaseName == 'index.php3'))
			{
				$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen($PathBaseName)-1);
				$PathBaseName = basename($FullPathParsed['path']);
				$isFolder = TRUE;
			}

			if ($PathBaseName == '')
			{
				if (strlen($RootPath) > $MaxLenght) $RootPath = $FullPathParsed['scheme'].'://'.ShortDisplayHostggp($FullPathParsed['host'],$MaxLenght - strlen($FullPathParsed['scheme']) - 3);

				return $RootPath;
			}
			else if ($FullPathParsed['path'] == '')
			{
				return $RootPath.'/?/'.$PathBaseName;
			}
			else if ((strlen($RootPath)+strlen($PathBaseName)+3) >= $MaxLenght)
			{
				return $RootPath.'/?/'.$PathBaseName;
			}
			else
			{
				// Reduction du chemin
				while ((strlen($RootPath)+strlen($PathBaseName)+strlen($FullPathParsed['path'])+3) > $MaxLenght)
				{
					$FullPathParsed['path'] = substr($FullPathParsed['path'],0,-1*strlen(basename($FullPathParsed['path']))-1);
				}

				if ($FullPathParsed['path'] == '')
				{
					return $RootPath.'/?/'.$PathBaseName;
				}
				else
				{
					return $RootPath.$FullPathParsed['path'].'/?/'.$PathBaseName;
				}
			}
		}
		Else
		{
			return $FullPath;
		}

	}
	Else
	{
		return $FullPath;
	}
}

function ShortDisplayHostggp($FullHost,$MaxLenght=80)
{
	If (strlen($FullHost) > $MaxLenght)
	{
		if (substr_count($FullHost,'.') >= 2)
		{
			return $FullHost;
		}
		else if (substr_count($FullHost,'.') == 1)
		{
			$extension = substr($FullHost,strpos($FullHost,".",0));
			$FullHost = substr($FullHost,0,strpos($FullHost,".",0));
			$FullHost = substr($FullHost,0,10).'(?)'.substr($FullHost,-1*(10+3+1+strlen($extension))).'.'.$extension;
		}
		else
		{
			$FullHost = substr($FullHost,0,$MaxLenght-3).'(?)';
		}
	}
	else
	{
		return $FullHost;
	}
}

function ShortDisplayNameggp($FullName,$MaxLenght=50)
{
	If (strlen($FullName) > $MaxLenght)
	{
		$FullName = substr($FullName,0,$MaxLenght-3).'(?)';
		return $FullName;
	}
	else
	{
		return $FullName;
	}
}

?>
<?php




function googlesearch($req, $start='0',$lg='fr') {

$index = @file_get_contents('http://www.google.fr/search?q='.urlencode($req).'&hl='.$lg.'&start='.$start);
//echo 'http://www.google.fr/search?q='.urlencode($req).'&hl='.$lg.'&start='.$start;
$index = str_replace ('<b>', '', $index);
$index = str_replace ('</b>', '', $index);

/*
Résultats <b>1</b> - <b>10</b> sur un total d'environ <b>1 780</b> pour <b>cogestar</b>  (<b>0,15</b> second
Résultats <b>61</b> - <b>66</b> sur <b>66</b> pour <b>cogestar</b>.  (<b>0,79</b> secondes) */
  // nombre de liens trouvés
   preg_match_all('%sur[\s]*(un total d\'environ)* (([0-9 ]*)*) pour%si', $index, $nbliens);
 
 /*
   echo '<pre>';
   print_r($nbliens);
   echo '</pre>';

*/
$nblien = $nbliens[2][0];
$nblien = str_replace (' ', '', $nblien);


// si la requette ne retourne rien on quite la fonction
if (!isset($nblien)) {
  return 'false';
  break;
}

 preg_match_all('%\<div class=g\>(.*?)(\</div\>)%si', $index, $out);
            
 
 /*
 echo '<pre>';
 print_r($out);
 echo '</pre>';
*/

$tabfin = array();
foreach ($out[1] as $key => $value) {
  
  /*
     preg_match_all('%(\<h2 class=r.*\>)?(.*)?\</h2\>%si', $value, $out2);
   
    echo '<pre>';
    print_r($out2);
    echo '</pre>';
*/

  // description
  $q = '\<td class="j"\>.*(\>)(..*)\<br';
   // preg_match_all('%%si', $value, $out3);
  
  
  // liens et titre
  $p = '\<h2 class=r\>\<a href="(.*?)".*\>(..*)\</h2\>';
  
  // lien titre + description
  preg_match_all('%'.$p.'.*'.$q.'%si', $value, $out2);
  
  /*
  echo '<pre>';
    print_r($out2[1]);
    print_r($out2[2]);
    print_r($out2[4]);
    echo '</pre>';
  echo '<br /><br /><br />';
  */
  
  $tabfin[$key]['lien'] = $out2[1][0];
  $tabfin[$key]['titre'] = $out2[2][0];
  $tabfin[$key]['description'] = $out2[4][0];
  $tabfin[$key]['nbliens'] = $nblien;
  
  /*
  // pour rechercher les liens verts
   preg_match_all('%\<span class=a\s*\>\s*([-A-Z0-9+&@#/=~_|!:,.;\%]*)?.*(\</span\>)%si', $value, $out3);
 echo '<pre>';
    print_r($out3);
    echo '</pre>';
    */
    
 
}
/*

      */ 
   
   /*
    echo '<pre>';
    print_r($tabfin);

    echo '</pre>';
  echo '<br /><br /><br />';
  */
  
  

   
   
return $tabfin ;
 
  
}




/* exemple de fonctionnement */


?>
<form action="" method="get" >
<input type="text" size="40" name="req" id="req" value="<?php if (isset ($_GET['req']) ){ echo $_GET['req'] ; }?>">
<input type="submit" name="submit" value="Rechercher google"  >
</form>
<script>
  document.getElementById("req").focus();
</script>
<?php
if (!isset ($_GET['pagestartgg']) ){
$_GET['pagestartgg'] = 0;
}

if (isset($_GET['req'])) {

$tabgg =  googlesearch($_GET['req'],$_GET['pagestartgg']);

echo 'Résultats de votre recherche : ';
echo '<a href="http://www.google.fr/search?q='.urlencode($_GET['req']).'&start='.$_GET['pagestartgg'].'" target="_blank">Voir sur google</a><br /><br />';

foreach ($tabgg as $key => $value) {
  echo '<strong><a href="'.$value['lien'].'">'.$value['titre'].'</a></strong><br />'.$value['description'].'<br /><a href="'.$value['lien'].'">'.ShortDisplayURLggp($value['lien']).'</a><br /><br />';
}

$nbliens = $tabgg[0]['nbliens'];
echo '<br />';

// mise en place des pages
$nbpage = round($nbliens/10);
echo '<strong>'.$nbpage. ' pages </strong><br />';

$ideb = ($_GET['pagestartgg']/10)-10 ;
$ideb < 0 ? $ideb = 0: '';
$page = ($_GET['pagestartgg']/10);
//echo 'page '.($_GET['pagestartgg']/10).'<br />';


$nbpage < $ideb ? $ideb = $nbpage : '';
//echo 'ideb '.$ideb.'<br />';

$ifin = $ideb + 15 ;
$ifin > $nbpage ? $ifin = $nbpage : '';

echo '<a href="?pagestartgg=0"><<</a>   ';
  for ($i = $ideb; $i<=$ifin; $i++) {
    if ($page == $i)  echo '<strong>  ' ;
    echo '<a href="?pagestartgg='.($i*10).'&req='.urlencode($_GET['req']).'">'.($i+1).'</a> ';
      if ($page == $i)  echo '  </strong>' ;
  }
echo '   <a href="?pagestartgg='.$nbpage.'">>></a> ';

}
?>

Conclusion :

Ce code parse le code html des résultats renvoyés par google sur une requette... donc le jour ou ils changeront radicalement de mise en page ça risque de ne plus fonctionner ... m'enfin je pense que c'est pas demain la veille :)
Au debut du code deux trois fonctions qui ne sont pas de mo mais qui sont utiles pour la mise en page des url trop longues ;)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.