IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] file_get_contents + preg_match = pas rapide


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Par défaut [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 ) 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 ( 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 ).

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    je ne crois pas que le probleme vienne de php, mais plutot des contraintes liées au réseau.

    Si tu veux récuperer les informations de 20 sites internets, il faut interroger les 20 serveurs en question, et donc additionner le temps de génération de chaque page de chaque serveur... donc forcement ca augmente vite.

    Deux choses posent problemes en plus :

    * Du point de vue ethique, as tu demandé la permission d'extraires des données aux sites "sources" ? Ce genre de comportement n'est pas tres bien vu en général...
    * Du point de vue technique, ton script reste dépendant de l'architecture des sites sources. Si un site modifie son code html, ton preg echouera et tu devra retoucher ton site...

    Il me semble donc mieux de contacter chaque site "source" afin d'obtenir leur consentement pour la récupération des données, et, eventuellement, s'ils sont gentils, et s'ils ont le temps, l'idéal serait qu'ils te fournissent une page en xml facile a parser avec juste les infos qui t'interessent.

    Cela ne résoud pas completement le probleme technique du temps d'execution, meme si ca devrait deja le réduire un peu.
    Pour cela, je verrais bien une sorte de cache avec rafraichissement tournant :
    A la 1ere execution de la page, tu va rechercher les infos du site n°1
    A la 2eme execution de la page, tu va rechercher les infos du site n°2, etc...

    Ainsi, si tu as 20 sites "sources", tes informations ne seront a jour qu'au bout de 20 rechargement de page... mais d'un autre coté, je pense pas que les sites en questions evoluent toutes les 3 minutes non plus... peut etre 3 fois par jour max non ?

    Apres tu peux optimiser le rechargement avec qqchose comme ca :
    Charger X sites a chaque execution de page, X étant un chiffre connu fixé arbitrairement, ou encore adaptable au temps d'execution restant. L'idée étant d'afficher ta page (avec les données en cache, donc pas a jour), puis une fois la page chargée, apres la balise </html>, tu rajoute un morceau de script qui va recharger les pages de ton cache *tant que tu as encore du temps dans la limite des 30 secondes*. Tu peux utiliser fsockopen plutot que file_get_contents afin de spécifier un timeout de connection, afin d'etre sur que tu ne dépasse pas le temps restant. Cela suppose evidemment de mesurer entre autre le temps d'execution de la page depuis le début, afin de calculer le temps qu'il te reste réellement !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Hello,

    Je pense que les sites autorisant ce genre de manoeuvre propose justement des flux RSS, Atom... Ces technologies sont là pour ça.

    Tu devrais plutôt t'orienté vers un lecteur RSS PHP.

    Concernant ton application en elle-même, je suis du même avis que Fladnag, il s'agit d'une communication client-server, avec les contraintes de temps que ça implique et les fonctions utilisées...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2003
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2003
    Messages : 217
    Par défaut
    Sinon, tu peux utiliser un cron ou un webcron et stocker les informations.

  5. #5
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Par défaut 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.

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    bah, si c'est pour un usage strictement personnel, pourquoi pas, mais tu n'est alors pas limité par le temps d'execution par exemple, puisque si le serveur tourne chez toi, rien ne t'empeche d'utiliser set_time_limit(0);
    Apres c'est a toi de voir combien de fois tu veux des informations "fraiches".
    Pour ce qui est des achats sur le net, je pense pas que tu cherches a acheter des trucs tout les matins (enfin si c'est le cas tant mieux pour toi ;o)

Discussions similaires

  1. [RegEx] mise a jour ereg > preg_match pas moyen de trouver comment faire
    Par atc666 dans le forum Langage
    Réponses: 4
    Dernier message: 31/05/2015, 01h03
  2. [POO] franchir le pas
    Par taffMan dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2007, 14h33
  3. [POO]Classe ou pas classe
    Par loverdose dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2007, 18h49
  4. [POO] ne fonctionne pas
    Par pongping dans le forum Langage
    Réponses: 3
    Dernier message: 13/04/2007, 13h45
  5. glInterleavedArrays : Rapide ou pas ?
    Par Argh! dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/12/2003, 06h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo