Bonjour Bonour, je suis en deuxième année à l'exia et je fais un stage.
Je dois faire un parse pour récupérer des articles d'un site en partenariat avec l'entreprise.
Mais il est lent, très lent et j'aimerais des conseils d'optimisations.
Merci bien.

/*
Il y a une page pour la mode homme et une pour la mode femme, sur chaque page une liste de news (les dernières news sont en haut)
On ouvre la première page, on récupère le premier lien vers une news, que l'on traite :
On récupère : -la date,(On standardise la date puis on vérifie si l'article n'est pas trop vieux)
-le titre,
-le résumer,(on vérifie grace au titre et le résumer si la news n'est pas déjà dans la base)
-le numéro de page de la news dans l'url pour chercher le nbr de page qui compose la news
-La news elle-même
-Si il y a d'autres pages on récupère la suite de la news que l'on concatène avec le début de la news
Puis on fait tout un travail de traitement sur l'article que l'on a : changement du jeu de caractère, on enlève les balises, on ajoute des slashes
Puis on récupère les images; s'il y en a on créé un dossier qui porte le nom de la date now, on redimensionne les images si besoin puis on les mets dans le dossier du jour.
On remplace dans l'article le chemin de l'image par le chemin de la nouvelle image qui est sur le dd du serveur
On envoie le tout dans la base de données
*/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<?php
 
 
set_time_limit(0);
 
require_once('resize.php');
require_once('directory.php');
//require_once("db.class.php");
 
$compteur = 1;
while( $compteur < 2) // On utilise un compteur car il y a deux pages de liste de news
{
    $compteur++;
    $url_2 = "http://(...).com/manasp.asp?id=20000".$compteur."&page=1";
    $content_liste_news =  file_get_contents($url_2);  // On ouvre url
    preg_match_all("|http://(...)/News/Detail/.*?\.htm|", $content_liste_news, $url_liste_news); // On récupère la liste des urls
    //connection à la base de donnée
    $link = mysql_connect("(...)", "(...)", "");
    mysql_select_db("(...)",     $link);
    //Pour chaque article, on récupère le titre, la date et le résumé
    foreach($url_liste_news[0] AS $url_news)
    {
         eregi('([0-9]+)-([0-9]+)-([0-9]+)',$url_news,$date_news_test); // on récupère la date qui ce trouve dans l'url et on la traite pour pouvoir travailler dessus
         $date_news = $date_news_test[0];// on réutilisera $date_news plus tard
         $var0 = strlen($date_news_test[2]);
         if( $var0 == 1)
         {    
           $date_news_test[2] = '0'.$date_news_test[2];
         }
         $var1 = strlen($date_news_test[3]);
         if($var1 == 1)
         {    
           $date_news_test[3] = '0'.$date_news_test[3];
      }
      $date_news_test = $date_news_test[1].'-'.$date_news_test[2].'-'.$date_news_test[3];
        $now    = date("Y-m-d", mktime(0, 0, 0, date("m"), date("d") - 5, date("Y")));
        if($date_news_test < $now)
        {
            echo "ON NE PREND PAS LES NEWS DE PLUS DE 5 JOURS\n";
            break;
      }
        $content_news    = file_get_contents($url_news);
        eregi('<td height="58" align="center" valign="bottom" class="hangzhoushangchang style9" style="padding:20px 5px 0px 5px"><h1 title="(.*)">.*</h1></td></tr>',$content_news , $titre_news); //on récupère le titre de la news
        $titre_news = $titre_news[1];
        eregi("<h2>(.+)</h2>", $content_news, $resume_news); //on récupère le petit résumé en haut de news
        $resume_news = $resume_news[1];
 
      $titre_news = iconv('gb2312','UTF-8', $titre_news);
      $resume_news = iconv('gb2312','UTF-8', $resume_news);
        // on vérifie que la news n'est pas déjà présente dans la base.
        $reponse    = mysql_query('SELECT id FROM news WHERE titre = "'.$titre_news.'" AND resume = "'.$resume_news.'"');
        $donnees = mysql_num_rows($reponse);
        if ($donnees != 0)
        {
            echo "NEWS DEJA PRESENTE \n";
            continue;
        }
        eregi("http://(...).com/News/Detail/".$date_news."/(.+).htm", $url_news, $id_page);//On récupére le numéro de page de la news
        $id_page = $id_page[1];
 
        preg_match_all("|".$id_page."-[0-9]*|",$content_news, $id_nbrpage); // je cherche le nombre de page de l'article
        $id_nbrpage = array_unique($id_nbrpage[0]); // J'enlève les doublons du tableau.
 
      //echo'<pre>';
      //print_r($id_nbrpage);
        //echo'<pre/>';
 
        //Je cherche la news
        eregi('<table width="600" height="58" border="0" cellpadding="0" cellspacing="0">(.*)<td height="24" align="center" valign="top" class="text11" style="padding-left:30px;padding-right:30px;padding-top:5px;letter-spacing:1px;line-height:18px; height:auto;border-top:#cdcdcd 1px dotted"><span class="small_title">', $content_news, $news);
      $news = $news[1];
        // echo 'Strlen news avant : '.strlen($news).'<br>';
        if($id_nbrpage != '') //si l'article à d'autre(s) page(s) alors...
        {
           //  echo 'Nombre de page: '.count($id_nbrpage).'<br/>'; 
            foreach($id_nbrpage AS $id_nbrpage2)//... pour chaque page, on l'ouvre et cherche la news
            {
                $url = "http://content.chinasspp.com/News/Detail/".$date_news."/".$id_nbrpage2.".htm";
                //    echo $url.'<br/>';
                $content = file_get_contents($url);
 
                // On cherche la suite de la news que l'on va concaténer avec le début de la news
                eregi('<table width="600" height="58" border="0" cellpadding="0" cellspacing="0">(.*)<td height="24" align="center" valign="top" class="text11" style="padding-left:30px;padding-right:30px;padding-top:5px;letter-spacing:1px;line-height:18px; height:auto;border-top:#cdcdcd 1px dotted"><span class="small_title">', $content, $news_suite);
                $news_suite = $news_suite[1];             
                $news .= $news_suite;    
          }
        }
        //on change le jeu de caractère de la chaine pour que le navigateur affiche correctement le texte.
      $news = iconv('gb2312','UTF-8', $news); 
      //On enlève des info en fin d'article qui nous interesse pas
        $news = str_replace('border=0','', $news);
        preg_match_all('|<td height="25" align="center" valign="middle" class="small_title">.*?<br><br><\/td>|',$news, $var_del);
        $news = str_replace($var_del[0],'', $news); 
        preg_match_all('|<td height="24" valign="top".*?</a></span></td>|',$news, $var_del2);     
        $news = str_replace($var_del2[0],'', $news);
        //on enlève toutes les balises sauf <img>
        $news = (strip_tags($news, '<img>')); 
        $news = str_replace('&nbsp;','',$news);
        $news    = '<p style="text-align: justify;">'.$news.'</p>';
        $news = addslashes($news);
        $titre_news = addslashes($titre_news);
    $resume_news = addslashes($resume_news);
 
        //Allez maintenant occupons nous des images.
        preg_match_all('|http://(...).com/News/pic/([0-9]+)\.(.{3})|',$news,$tab_image_news);
        $nbr_image = count($tab_image_news[0]);
        if ($nbr_image != 0)
        {
            create_dir('...:/.../.../.../image/'.$date_news_test.'/');
            for ($i = 0; $i < $nbr_image ;  $i++)
          {
              resizeImg($tab_image_news[0][$i], 500, 5000, $tab_image_news[1][$i], 'C.../.../.../.../image/'.$date_news_test.'/');
              $news = str_replace($tab_image_news[0][$i],'...:/.../.../.../image/'.$date_news_test.'/'.$tab_image_news[1][$i],$news);
            }
        }        
        echo'<pre>';
        print_r($news);
         echo'<pre/>';
         $reponse = mysql_query("INSERT INTO news (id, titre, resume, texte) VALUES ('','".$titre_news."','".$resume_news."','".$news."' )");
        echo mysql_error($link) ; 
    }
}    
?>