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 :

Fonction d'extraction dans une boucle while [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Fonction d'extraction dans une boucle while
    Bonjour,
    J'ai une fonction d'extraction de données sur des pages web qui ne renvoie plus rien quand elle est appelée dans une boucle while .
    Avec l'URL dans une variable OK

    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
    function extraction($string, $start, $end)
    {
    $pos = stripos($string, $start);
    $str = substr($string, $pos);
    $str_two = substr($str, strlen($start));
    $second_pos = stripos($str_two, $end);
    $str_three = substr($str_two, 0, $second_pos);
    $unit = trim($str_three);
    return $unit;
    }
    ///////////////////////////////
    function url($url)
    {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERAGENT,'Googlebot/2.1 (+http://www.google.com/bot.html)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curl_scrap_time = curl_exec($ch);
    curl_close($ch);
    $text = $curl_scrap_time;
    $start0 = '<table class="infobox_v2">';
    $end0 = '</table>';
    $unit0 = extraction($text, $start0, $end0);
    return $unit0;
    }  
    ///////////////////////////////
     
      $page_suivante = "https://fr.wikipedia.org/wiki/Pont_Yavuz_Sultan_Selim";
     
      echo url($page_suivante);
    Par l'intermédiaire d'une boucle while plus aucune sortie

    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
    function extraction($string, $start, $end)
    {
    $pos = stripos($string, $start);
    $str = substr($string, $pos);
    $str_two = substr($str, strlen($start));
    $second_pos = stripos($str_two, $end);
    $str_three = substr($str_two, 0, $second_pos);
    $unit = trim($str_three);
    return $unit;
    }
    ///////////////////////////////
    function url($url)
    {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERAGENT,'Googlebot/2.1 (+http://www.google.com/bot.html)');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curl_scrap_time = curl_exec($ch);
    curl_close($ch);
    $text = $curl_scrap_time;
    $start0 = '<table class="infobox_v2">';
    $end0 = '</table>';
    $unit0 = extraction($text, $start0, $end0);
    return $unit0;
    }  
    //////////////////////////////////////////////
    if (!$fp = fopen("liens_a_suivre","r")) {
    echo "Echec de l'ouverture du fichier";
    exit;
    }
    else {
     while(!feof($fp)) {
      $Ligne = fgets($fp,255);
      echo url($Ligne);
     }
     fclose($fp); 
    }
    Dans le fichier "liens_a_suivre" exemple :

    Je sèche grave, merci par avance pour votre bienveillance à l'égard d'un néophyte en PHP.
    Cordialement

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça ne marche pas parce que tu renseignes le second paramètre de fgets ce qui a pour conséquence que fgets te renvoie des chaînes de 254 octets (voir la doc), au lieu de te renvoyer une ligne comme il le fait par défaut. Ça n'a donc rien à voir avec le while mais avec ta façon d'utiliser fgets. Retire ce deuxième paramètre.

    Une remarque sur ta fonction extraction: ce n'est pas de cette manière qu'on parse du html, il y a des outils pour ça. Ici DOMDocument et DOMXPath seront les outils les mieux appropriés pour obtenir ce que tu souhaites en t'évitant les écueils d'une approche sauvage à coup de fonctions de manipulation de chaîne. Le html est un langage structuré, appuie toi sur cette structure. (des tutoriels sont disponibles sur le site et ailleurs).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonsoir et merci pour votre réponse,
    J'ai retiré le second paramètre de fgets sans aucun changement sur le résultat, un => echo $Ligne; me renvoi les lignes mais toujours rien avec echo url($Ligne);
    Retour de echo $Ligne;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    https://fr.wikipedia.org/wiki/Dilma_Rousseff
    https://fr.wikipedia.org/wiki/Attentat_de_Cizre_du_26_ao%C3%BBt_2016
    https://fr.wikipedia.org/wiki/Pont_Yavuz_Sultan_Selim
    https://fr.wikipedia.org/wiki/Pont_Yavuz_Sultan_Selim
    En parallèle je vais regarder la portabilité dans le code de ma page de ce que vous me recommandez, pour ne pas alourdir mon commentaire j'ai extrait qu'une partie.

    Cordialement

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Il faut que tu enlèves le caractère \n ou la séquence \r\n à la fin de chaque ligne. Pour cela, utilise la fonction rtrim.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Candidat au Club
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webplanneur
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [RÉSOLU]
    Super, un grand MERCI CosmoKnacki, cela fait plus d'une semaine que je cherchais une solution.

    Cordialement

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

Discussions similaires

  1. fonction mail dans une boucle while
    Par tjoce dans le forum Langage
    Réponses: 5
    Dernier message: 23/04/2010, 18h39
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 6
    Dernier message: 17/06/2005, 16h51
  5. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51

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