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

EDI, CMS, Outils, Scripts et API PHP Discussion :

créer un script permettant d'entrer des informations automatiquement et de lire des pages internet


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut créer un script permettant d'entrer des informations automatiquement et de lire des pages internet
    Bonjour à tous,

    Je viens vers vous car j'aurais besoin de créer un script qui s'apparente à un robot. Tout d'abord j'espère être dans le bon topic.

    Voila je vais essayer d'être bref et concis. Imaginez un site internet ayant accès à une base de donnée. Ce site comprend une barre de recherche. Lorsqu'on tape quelque chose dans cette barre de recherche, une liste de liens apparaît.

    Alors ce que je veux c'est créer un script qui soit capable de se connecter à ce site, taper dans la barre de recherche, une recherche quelconque puis (et là ca commence à se compliquer) d'une part répertorier chaque lien et les renvoyer, tout en cliquant dans chaque lien pour aller récupérer une info particulière (ou plusieurs si besoin).

    Quel est le langage le plus approprié ?

    Je précise que je me débrouille en PHP. J'espère que ce sera suffisant comme langage...

    cdlt Globolite.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    tu peux le faire avec php et curl.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    En effet merci pour la réponse. Curl permet d'obtenir le résultat recherché. Attention néanmoins à savoir utilise Regex

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut cURL pour extraire des données d'une page html
    Bonjour à tous,

    Je continue un topic que j'avais déjà commencer. Alors je souhaite en fait extraire des données d'une page html. J'ai trouvé sur interne un script plutôt pas mais le soucis c'est que j'arrive pas à l'adapter à ce que je veux faire.

    Alors voici le code. (vous pouvez l'essayer ça fonctionne directement

    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
    <?php
     
     
     
    function getHTML($url,$timeout)
    {
           $ch = curl_init($url); // initialize curl with given url
           curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // set  useragent
           curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // write the response to a variable
           curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects if any
           curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // max. seconds to execute
           curl_setopt($ch, CURLOPT_FAILONERROR, 1); // stop when it encounters an error
           return @curl_exec($ch);
    }
     
    $html=getHTML("http://www.egyptian-planet.com/news-90.html",10);
     
    preg_match_all('/<img .*src=["|\']([^"|\']+)/i', $html, $matches);
    foreach ($matches[1] as $key=>$value) {
        echo $value."<br>";
    }
     
     
    ?>
    Le résultat est que ça affiche l'adresse des images. Bon je suis pas loin de ce que je veux mais je n'arrive pas à adapter le bout de code à ce que je veux.

    En fait c'est la partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('/<img .*src=["|\']([^"|\']+)/i', $html, $matches);
    En fait je comprends pas qu'est-ce que c'est que tous ces signes... Je vois bien que ça permet d'obtenir le bon résultat mais pour modifier ça... je vous raconte pas.

    Par exemple sur la page où je veux extraire des données, les données se trouvent entre les balises suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="application?number=XX2365236">bla bla bla bla</a>

    je veux récupérer le bla bla bla bla sachant qu'il y a plein de <a href="......

    du coup il faut tous le récupérer....


    Merci d'avance pour votre aide !!

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    regarde ce cours pour apprendre à utiliser les expressions régulières :
    http://g-rossolini.developpez.com/tutoriels/php/regex/

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Merci pour la réponse. Je m'empresse de lire le cours et de tenter de résoudre mon problème. Je maintiens cette page de forum ouverte en attendant...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut cURL : click automatique sur une page et récupération à nouveau de l'HTML
    Bonjour à tous,

    J'ai à nouveau une question concernant cURL mais dans un registre très différent. Il s'avère que le site sur lequel je cherche à récupérer des données est bourré de petits obstacles...

    Je m'explique. Le site en question est un moteur de recherche. Lorsqu'on tape une recherche tout ne s'affiche pas sur 1 page. Il y a par exemple 50 résultats sur la page et par exemple 8 pages.

    Le soucis c'est que la première page est simple à obtenir. Mais quand j'essaye de copier l'URL de la 2ème page dans mon code pour aller récupérer l'HTML et bien là ça ne marche pas !

    Et ça me récupère un HTML certes, mais ça me m'affiche :

    INVALID QUERY

    THE PAGE YOU TRIED TO REACH CAUSED AN ERROR

    Object must not be null
    Pourtant si je prends l'URL de la deuxième page (et ainsi de suite pour les autres pages) et que je le mets dans mon navigateur et bien ça fonctionne, ça affiche directement la page 2 de la recherche ce qui me semble du coup bien bizarre...



    Bref la solution à mon avis est de faire en sorte que dans le code, il y a un clique qui se passe sur la page 2 et ainsi de suite... puis récupérer à chaque clique l'HTML...

    Sauriez-vous si c'est la meilleure solution, ou déjà si c'est une solution tout court ?

    Ensuite connaissez-vous des scripts/fonctions qui pourraient m'aider pour coder un machin comme ça ?

    Merci d'avance à tous !

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    il y a peut-être des cookies envoyé par le navigateur pour que ça fonctionne.
    regarde les entêtes envoyés par le navigateur pour savoir ce qu'il se passe

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Alors pour vérifier je n'ai pas été voir dans le entêtes. Ce que j'ai fait c'est que je suis allé sur la page en question et j'ai demandé à afficher les informations sur la page.

    Il s'avère en effet que la page utilise des cookies. Apparemment le système a besoin de me reconnaître pour me laisser accéder à la page 2 et ainsi de suite...

    Voici le contenu du cookie en question : 06199F1544EA1312576AEB578D38F2B8.RegisterPlus_prod_0

    Il y a un deuxième cookie qui me paraît moins intéressant mais peut-être sera t-il nécessaire. C'est un cookie de langue.

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    quand tu fais ta 1re requête sur le serveur, tu peux récupérer ce cookie dans les entêtes et l'envoyer ensuite lors de la 2e requête
    regarde l'aide de la fonction http://php.net/curl_setopt pour savoir comment faire ces 2 choses

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Alors j'ai réussis à reproduire un cookie de session. En fait il suffit de demander à cURL d'envoyer le cookie. J'utilise pour ma part cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_COOKIE, "NOM_DU_COOKIE=VALEUR_DU_COOKIE");
    du coup j'arrive en effet à accéder aux pages suivantes. Le petit soucis c'est que la session expire. La solution que tu propose consiste à récupérer le cookie au moment où celui-ci est envoyé par le serveur vers le client. Mais je t'avoue que je ne sais pas récupérer la valeur du cookie au moment où il arrive sur la machine.

    Alors je me suis dit qu'alternativement je pourrais récupérer le fichier cookie pour en obtenir sa valeur. Alors comme j'utilise mozilla, je vais chercher le fichier cookie à l'aide du script suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_COOKIEFILE, "C:\Users\Pro\AppData\Roaming\Mozilla\Firefox\Profiles\profile.default\cookies.sqlite")
    Cependant ça ne marche pas...

    Du coup aurais-tu une idée de comment je pourrais récupérer la valeur du cookie au moment où celui-ci arrive au client ou bien carrément charger le fichier cookie ?

    Merci d'avance !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Sincèrement les cookies c'est vraiment kafkaien !
    Il y a quelques minutes je pouvais retrouver dans le fichier cookies.sqlite la valeur du cookie en question et voila que maintenant cette valeur n'y est plus malgré le fait que je relance la session avec le site en question.

    En plus les cookies sont difficilement accessible. Par exemple sous IE l'accès m'est tout simplement refusé par windows. Dans mozilla, le fichier cookies.sqlite est du charabia et je n'arrive même plus à y retrouver le cookie qui m'intéresse.

    Du coup est-il possible de choper le cookie intéressant dès qu'il entre sur la machine client ?, cela éviterait d'aller rechercher des choses dans le dossier cookie.

    Ou si possible aller chercher dans le fichier cookie, le bon cookie et sa valeur pour pouvoir envoyer quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $strcookie = $nom_du_cookie."=".$valeur_du_cookie;

  13. #13
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par Globolite Voir le message
    La solution que tu propose consiste à récupérer le cookie au moment où celui-ci est envoyé par le serveur vers le client. Mais je t'avoue que je ne sais pas récupérer la valeur du cookie au moment où il arrive sur la machine.
    comme tu le dis le cookie est envoyé au client.
    dans le cas de ton code, le client n'est pas la navigateur mais ton script PHP donc c'est dans la réponse de curl_exec que tu trouveras le cookie

    pour récupérer les entêtes HTTP où se trouve le cookie, il faut utiliser l'option CURLOPT_HEADER

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Merci Mathieu,

    Je tente ça !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 76
    Points : 54
    Points
    54
    Par défaut
    Je reviens sur cette page de forum, alors j'ai trouvé la solution pour les cookies. Comme il me l'a été suggéré dans ce forum, la solution consiste à récupérer le cookie dans cURL à l'aide de curl_exec().

    Je sais pas si ma solution est la meilleure mais voici comment j'ai fait (et ça marche) :

    Je fais en sorte que la page que je chercher à lire affiche les cookies. Pour ceux qui ne savent pas, ces cookies se trouvent dans le HEADER.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl_setopt($ch, CURLOPT_HEADER, true);

    Il suffit que la ligne ci-dessus soit sur "true" et c'est réglé. Puis grâce à une regexp j'ai récupéré la valeur du cookie que je cherchais et puis ensuite on en fait ce que l'on veut du cookie. Perso j'ai créé une deuxième fonction getHTML dans laquelle j'envoie le cookie récupéré et la j'accède à toutes les pages du moteur de recherche que je cherche à parcourir puisque je lui donne une session valide enregistrée dans ce "cookie".

    Pour plus d'infos n'hésitez pas à demander !

    merci à Mathieu encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/12/2016, 17h55
  2. Réponses: 25
    Dernier message: 11/06/2011, 16h32
  3. Réponses: 6
    Dernier message: 31/08/2007, 11h13
  4. VB6 comment lire des information ds WebBrowser
    Par mqsi dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 01/11/2006, 17h49

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