Page 1 sur 1

Scan du duplicate content - Script PHP

Posté : 22 mai 2012, 16:30
par Notorio
Bonjour à tous !

Je n'ai pas trouvez la section pour me présenter alors en bref : Gaetano Notorio, 21 ans, etudiant en licence e-commerce. et je suis NUL en PHP

Voici ma requète :

Dans le cadre d'un projet, une entreprise m'a chargé de automatisé la recherche de contenu dupliqué sur la toile par rapport au contenu qu'il ont. A savoir que le contenu dupliqué est niusible au référencement naturel. Bref !

J'ai donc trouvez un script PHP permettant de justement trouvez ce contenu dupliqué via l'API de google pour ceux qui connaisse.

Ce code le voici :
<?php

header("Content-Type: text/html; charset=UTF-8");
$body="";
if(isset($_POST['text_origin']))
   {
      $text_origin = stripslashes($_POST['text_origin']);

      // D�tection en parse direct sur la requ�te exacte (entre guillemet)
      $url_parse = "http://www.google.fr/search?q=".urlencode('"'.$text_origin.'"')."&hl=fr&prmd=ivns&filter=0";

      if ($text_origin)// R�cup�ration des donn�es
         {
            $fp = fopen($url_parse,"r");// On parse la page
            if ($fp != FALSE)
               {
                  while (!feof($fp))
                     {
                        $body .= fgets($fp, 4096);
                     }
               }

            if(strpos($body, 'yellow_warning.gif') == '')// On v�rifie si des r�sultats existent
               {
                  if(strpos($body, '<h3 class="r"><a href="http://') != '')//On v�rifie que les limiteurs existent
                     {
                        preg_match_all('#<h3 class="r"><a href="http://(.*)"#Uis', $body, $listing);// On extrait les url
                        $nb_res = sizeof($listing[1]);// Comptage des tubes de $listing
                        $url_DC = "<h2>Pages plagiant le texte</h2><table border=0>";
                        for ($i=0; $i < $nb_res; $i++)
                           {
                              $url_DC.= "<tr><td style=\"width:50px;text-align:right;color:red;font-weight:bold;\">100,00%</td><td style=\"width:10px;\"></td><td><a href=\"http://".$listing[1][$i]."\">".$listing[1][$i]."</a></td></tr>";
                           }
                     }
                  else
                     {
                        $nook_code = "Google a modifi� son code source. L'expression r�gli�re du preg_match_all doit �tre modifi� !";
                     }
               }

            if ($fp != FALSE){fclose($fp);}

            if (!isset($listing))
               {
                  $listing[1][0] = "no-url";
                  $url_DC = "<h2>Pages plagiant le texte</h2><table border=0>";
               }

            for ($boucle=0;$boucle<=10;$boucle++)
               {
                  $start = $boucle*8;

                  $url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=".urlencode($text_origin)."&start=".$start."&rsz=large";
                  $ch = curl_init();
                  curl_setopt($ch, CURLOPT_URL, $url);
                  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                  //curl_setopt($ch, CURLOPT_REFERER, "http://www.castlemaniac.com/");
                  $body = curl_exec($ch);
                  curl_close($ch);

                  $json = json_decode($body, true);// Tableau associatif.

                  $nb_results_json = sizeof($json['responseData']['results']);// Nb de tube dans "results"
                  for ($i=0; $i < $nb_results_json; $i++)// Extraction "content"
                        {
                           $content = $json['responseData']['results'][$i]['content'];
                           $url_page_DC = str_replace("http://", "", $json['responseData']['results'][$i]['url']);
                           
                           if(!in_array($url_page_DC, $listing[1]))
                              {
                                 //Traitement de "content"
                                 $content_origin = strip_tags($content);// Suppression des tags <b>
                                 $content_origin = preg_replace('#[.]#', '', $content_origin);// Suppression des .
                                 $content_origin = preg_replace('#[\s]+#', ' ', $content_origin);// Suppression des espaces multiples
                                 $content_origin = preg_replace('#^[\s]|[\s]$#','',$content_origin);// Suppression des espaces en d�but et fin de chaine
                                 $nb_word = explode(" ", $content_origin);// Mise des mots dans un tableau
                                 $nb_word_content_origin = sizeof($nb_word);// Comptage des mots
                                 
                                 // Traitement du texte en gras de "content"
                                 $text_bold = "";
                                 preg_match_all('#<b>(.*)</b>#Uis', $content, $bold);// R�cup�ration du texte en gras
                                 $nb_result_bold = sizeof($bold[1]);// Nombre de tube dans $bold
                                    for ($j=0; $j < $nb_result_bold; $j++)// Mise en commun des tubes et nettoyage
                                       {
                                          $bold[1][$j] = preg_replace('#[.]#', '', $bold[1][$j]);// Suppression des .
                                          if (!empty($bold[1][$j]))$text_bold.= $bold[1][$j]." ";//Mise des r�sultat dans une seule variable
                                       }
                                 $text_bold = preg_replace('#[\s]+#', ' ', $text_bold);// Suppression des espaces multiples
                                 $text_bold = preg_replace('#^[\s]|[\s]$#','',$text_bold);// Suppression des espaces en d�but et fin de chaine
                                 $nb_word = explode(" ", $text_bold);// Mise des mots dans un tableau
                                 $nb_word_text_bold = sizeof($nb_word);// Comptage des mots

                                 $taux = round(($nb_word_text_bold*100)/$nb_word_content_origin,2);
                                 
                                 $tab_url_DC_partiel[$url_page_DC] = $taux;
                              }
                        }
                  if ($nb_results_json < 8)break;// Limitation des requ�tes si r�ponse vide.
               }
            arsort($tab_url_DC_partiel, SORT_NUMERIC);// Classement d�croissant du taux
            foreach($tab_url_DC_partiel as $key=>$val)
               {
                  if ($val == 100)$style = "color:red;font-weight:bold;";// Style du tableau
                  elseif ($val < 100 && $val >= 50)$style = "color:red;";// Style du tableau
                  else $style ="";// Style du tableau
                  $val = number_format($val, 2, ',', ' ');// Mise ne forme du taux
                  $url_DC.= "<tr><td style=\"width:50px;text-align:right;".$style."\">".$val."%</td><td style=\"width:10px;\"></td><td><a href=\"http://".$key."\">".$key."</a>--> API</td></tr>";
               }
            $url_DC.= "</table>";
         }
   }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<form action="" method="post">
   <label>Phrase test :</label><br />
   <input type="text" name="text_origin" />
   <input type="submit" name="submit" value="Ok" />
</form>
<?php
if(isset($_POST['text_origin']))
   {
   ?>
      <h1 style="text-align:center;">D�tection du DC dans l'index Google</h1>
       <cite>Texte � identifier</cite><blockquote style="padding:5px;margin:10px;border:1px red dotted;background:aliceblue;font-weight:bold;"><?php echo $text_origin; ?></blockquote>
       <?php if (!empty($nook_code))// Alerte
         {
         ?>
            <div style="text-align:center;padding:5px;margin:10px;border:1px red solid;background:aliceblue;font-weight:bold;font-color:red;"><?php echo $nook_code; ?></div>
         <?php
         }
      ?>
       <?php echo $url_DC; // Affichage tableau  ?>
   <?php
   }
   ?>
</body>
</html>

Lorsque vous l'éxécuté et que vous rentré un texte, il vous trouve le contenu dupliqué de ce dernier en affichant le pourcentage et le lien vers l'url ou il ya le contenu dupliqué. Comme vous pouvez le voir ci-dessous :

Image

Mes questions sont les suivante :


Comment je peux arrêter la boucle lorsque le taux est en dessous de 30 % ? et donc ne pas sonder la toile pour les requetes en desous de 30 % mais que celle entre 30 et 100
Comment ne pas faire prendre en compte les url commençant par : http://www.imagera.fr/ ? imagera.fr est le site sur lequel on se base pour savoir si le contenu est dupliqué donc aucun utilité à le prendre en compte.

Je vous remercie d'avance pour l'aide que vous pouvez m'apporter et vous répondrais dans la minute ou vous posterez vos réponse.

BONNE CHANCE !

Re: Scan du duplicate content - Script PHP

Posté : 22 mai 2012, 19:14
par Ryle
En ce qui concerne ta première question, tu ne peux pas. En effet, ce n'est qu'une fois que tu as effectué la requête sur le site qui diffuse l'information, que tu connaîtras le pourcentage de texte redondant. En revanche, de la même manière que tu affiches les résultats entre 50 et 100% de correspondance en rouge en modifiant le style en fonction de la valeur du pourcentage, tu pourrais aussi ajouter un test pour ne pas afficher le site en fonction de cette même valeur. Au lieu de systématiquement afficher le résultat, tu pourrais mettre un truc du genre :

Code : Tout sélectionner

SI (ta_valeur > 30) Affiche la ligne de résultat FIN SI
En l'occurrence dans ton cas, tu l'ajoutes à $url_DC ou pas.

Et pour le filtre sur le site qui sert de référence, il faut voir si l'api google te le permet. Sinon, là encore, il sera interrogé systématiquement. Mais de la même manière, lorsque tu traites les résultats, tu peux ne pas afficher la ligne et le lien quand l'url (valeur que tu as dans $key) comprend ce site.

Vala, tu as toutes les infos... reste plus qu'à te mettre au php, mais ça reste des modif abordables pour un débutant :)

Re: Scan du duplicate content - Script PHP

Posté : 22 mai 2012, 23:39
par Notorio
Bon alors ça va être un bon coup de If et else si je comprend bien :)

MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D