[POO] file_get_contents + preg_match = pas rapide
Bonjour
Je voudrais une poser une question relative à php ( en général ) et plus particulièrement sur deux commandes, celles citées dans l'objet.
Sur wamp en local je me suis mis a griffonner un bout de code qui a pour but, très grossièrement, de ramener le code source d'une page dans une variable ( file_get_contents ) et d'appliquer un preg_match(all) sur la page.
Après je suis en mesure de savoir si j'ai d'autres pages à aspirer ( code source ) ce que mon programme fait sans broncher.
Le but final est bien entendu de pouvoir récupérer des infos sur les sites ( à la volée ) pour peut etre ( j'en suis pas là encore je débute :roll: ) me construire des flux rss ou atom ou autres afin de ne plus avoir besoin de glaner de l'info sur le web à coup de clic clic.
Mais le problème numéro 1 c'est la vitesse d'execution : quand il faut aspirer une cinquantaine de page ( très courant pour le contexte ) qu'est ce c'est long !! Très très long !
Ca plante pas ( :D ouf ) mais j'en ai facilement pour plusieurs minutes d'execution ! :?
Mes terrains de reflexion sont : changer de php à perl (?) ou un langage comme delphi ( que je connais aussi bien que php ( le strict minimum pour m'en sortir ) ? Ajax pour ne récupérer que les flux pile poile et le code source intéressant.
Redecouper le php en fonctions et autres techniques de dévelloppeurs confirmé ( mais ca resoudra pas la lenteur des file_get_contents quand il y en a 50 pages et + )
Quoiqu'il en soit le programme ne fonctionnera qu'en local sur mon PC sur XP.
Mon problème numéro 2 c'est le file_get_contents et la gestion d'erreur ; quand ca plante pour une page je suis marron ; j'ai essayé d'utiliser un package de PEAR ( je me rappelle plus du nom ) qui sur leur site semble être pile poile ce qu'il me faut. Après plusieurs essais je n'arrive toujours pas à me servir du patch. Aurriez vous un exemple concret de A a Z pour m'aider à l'implementer correctement ?
Enfin pour terminer j'ai quand même envie de balancer un vieux brouillon ( = version 0.1 a améliorer optimiser réécrire ??? ) ; il s'agit d'un script a base de boucles conditions et file_get_contents + preg_match ; Plus précisemment pour celui ci un code qui va me chercher les infos des produits d'un rayon d'un magasin ( désolé pour la pub dans le code source vraiment :( :( )
Je suis en ce moment en train d'essayer de mettre une version 0.2 de ce programme donné en exemple ci-bas qui couplé a mysql pour la gestion des rayons ( avec des champs et des séparateurs en guise de sérialisation ) me permettrai quelque soit le magasin et quel que soit le rayon de me donner les infos des produits.
Mais tous mes programmes sont de la meme veine, alors toute proposition d'amélioration est la bienvenue. Je ne pourrais que m'améliorer ( d'un point de vue php ).
Ok pour les contraintes client serveur
Je voudrais juste revenir sur quelques points si possible.
Tout d'abord tout ce que j'envisage et mets en place comme scripts php sur mon wamp est pour un usage strictement perso. J'insiste je n'ai pas de site internet.
Il y a plusieurs contextes sur internet qui me poussent ( comme bien d'autres internautes je pense ) a prendre de l'info. En ce qui me concerne les principaux qui me viennent a l'esprit sont : achat sur internet , surveillance de mes blogs préférés , actualités officielle et "officieuse", tris de flux RSS trouvés a droite a gauche.
ACHAT SUR INTERNET
Quel magasin propose tous ses produits du catalogue en un flux RSS bien fait et exhaustif ? est ce vraiment là son intérêt ( nous faire gagner du temps ) ou son interet se situe plutot a nous noyer dans ses rayons pour nous faire acheter ?
D'ailleurs a ce propos , reunir plusieurs sources de plusieurs sites dans un script et trier les produits afin d'eliminer les doublons et les produits non en vente ne me parait completement déplacé.
Par exemple pour une clé usb mp3 de marque X et de modèle Y , le script détecte sa présence dans 86 rayons de 56 magasins et me fait un résumé a l'ecran de toutes les descriptions produits - de toutes les images relatives au produit - de tous les commantaires clients ... Benh au moins AVEC DE L'INFORMATION je sais a quoi m'en tenir ... J'achete ou j'achete pas.
Les comparateurs de prix ne me conviennent pas , ne donnent pas beaucoup d'infos et tous ce qui les interessent et de me vendre la camelote.
SURVEILLANCE DE MES BLOG PREFERES
Sur ce point aucun problème il y a moins de rubriques a surveiller que les magasins. Il proposent des flux mais ne me conviennent pas car peu exhaustifs - et ne font pas tous état des commantaires laissés pour chaque article.
TOUT CA POUR DIRE
Que les flux RSS sont une bonne idée mais ne sont pas "convenables" pour un utilisateur comme moi qui les considèrent un peu limite surtout dans le domaine du commerce sur internet.
Il y a rien de mieux que de prendre le contrôle de son ordinateur et coder. Si pour ca je dois continuer a aspirer le web sans consentement ( ! puisque je n'obtiendrais pas complètement ce que je veux en contactant les équipes ) pour obtenir de l'information je continuerai a le faire sans hésiter.
file_get_contents VS Curl
J'ai regardé du côté de Curl
Si je m'attendais 8O
Est ce que les 2 bouts de code pourrait etre equivalent ?
CURL
Code:
1 2 3 4 5 6 7 8
|
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.myurl.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);
?> |
FILE_GET_CONTENTS
Code:
1 2 3
|
$url = "http://mama.html";
$result = file_get_contents($url); |
Et en deux mots ( je regarderais la doc dès que j'aurais le temps ) est ce suffisant pour recupérer un NULL ou -1 en cas d'erreur sur $result ?
Pour le moment je suis en train de réessayer une dernière fois PEAR ( pour un patch de file_get_contents ) ; je risque rien a apprendre 2 ou 3 trucs dessus - au pire je n'aurais perdu qu'une soirée de plus :( - même si maintenant je me dis que maitriser CURL serait tip top