Titre du sujet : Re: parser un fichier depuis un site externe par olivee sur 13/10/2012 21:10:33
Bonsoir voilà je viens d'essayer pas mal de calss pour parser un xml. finalement j'ai décidé d'appliquer ce code
$aurls = array( "http://www.link1.com/rss" => 154,
"http://www.link2.com/10.xml" => 155,
"http://www.link3.com" => 156,
"http://www.link4.com" => 157,
"http://www.link5.com" => 162,
"http://www.link6.com" => 163,
"http://www.link8.com" => 164,
"http://www.link7.com" => 165,
"http://www.link9.com" => 166,
"http://www.link10.com" => 167,
"http://www.link11.com" => 168,
// "http://link12.com" => 169 );
$i=0;
$multiCurl= curl_multi_init();
foreach ($aurls as $url => $v) {
$curls[$i] = curl_init();
curl_setopt($curls[$i], CURLOPT_URL, $url);
curl_setopt($curls[$i], CURLOPT_HEADER, 0);
curl_setopt($curls[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiCurl,$curls[$i]);
$i+=1; } /*** Exécute le gestionnaire de connexion */
$running=null;
do
{ curl_multi_exec($multiCurl,$running);
} while ($running > 0);
for($j=0; $j<$i; $j++){ $page[]=curl_multi_getcontent($curls[$j]);
curl_multi_remove_handle($multiCurl, $curls[$j]);
$ok = new SimpleXMLElement( $page[$j] );
foreach($ok->channel->item as $item){
$title = $item->title;
$guid = $item->guid;
$link = $item->link;
$description1 = $item->description;
$pubDate = $item->pubDate;
$Date = time();
$titleexist = " SELECT lid FROM " . $xoopsDB -> prefix( 'test_article_xml' ) . " WHERE link_articlexml = '" . addslashes($link) . "'"; $resultexist = $xoopsDB->query($titleexist); $filecount = $xoopsDB -> getRowsNum( $resultexist );
if ($filecount == 0) { //fonction insert
echo ' pas enregistre '; }
if ($filecount == 1) { //fonction ignorer
echo ' deja enregistre '; }
if ($filecount > 1) { //fonction delete
echo ' deja enregistre plusieurs fois '; }
} }
/*** Ferme les gestionnaires */
curl_multi_close($multiCurl);
ça me donne exactement se que je voulais mais ça prend trop de temps pour s’exécuter dans le mode debug ça me donne 0.12 ~~0.19 seconde pour chaque requête
$titleexist = " SELECT lid FROM " . $xoopsDB -> prefix( 'test_article_xml' ) . " WHERE link_articlexml = '" . addslashes($link) . "'";
$resultexist = $xoopsDB->query($titleexist);
$filecount = $xoopsDB -> getRowsNum( $resultexist );
c'est a dire en vérifiant si l'article est enregistré dans la base donnée ou pas. pour 50 item * 10 feed * 0.15 requête = 75 secondes. avec la méthode SELECT count(*) ça donne la même chose. j'ai mis une limite de 5 item donc le temps devient environ 6 ou 7 secondes c'est acceptable a mon avis. bon maintenant il reste 2 choses a régler. dans la fonction insert comment je peux insérer le key $v pour chaque url disons catégorie. la requête a faire sur ma base de donnée pour obtenir un array sous forme de
$aurls = array( "http://www.link1.com/rss" => 154,
"http://www.link2.com/10.xml" => 155,
"http://www.link3.com" => 156,
"http://www.link4.com" => 157,
"http://www.link5.com" => 162,
"http://www.link6.com" => 163,
"http://www.link8.com" => 164,
"http://www.link7.com" => 165,
"http://www.link9.com" => 166,
"http://www.link10.com" => 167,
"http://www.link11.com" => 168,
// "http://link12.com" => 169 );
>>pour toute autre suggestion je suis preneur. Merci
|