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 :

Incrémentation et boucle du script [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut Incrémentation et boucle du script
    Bonjour,

    j'ai un script qui parse des pages qui fonctionne très bien, le seul problème c'est que je voudrais automatiser le script pour incrémenter l'url et le numéro de page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $html = new simple_html_dom();
    $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
    je n'arrive pas à exécuter le script pour incrémenter le $i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $total_execute = 91;
    while ($i <= $total_execute) {
     
    $html = new simple_html_dom();
    $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
    ...
    Déroulement de mon script
    ...
        $i++;
    }
    Mais je n'ai uniquement que les 60 premières.
    Savez vous comment je pourrai le boucler jusqu'à mon $total_execute ?
    Merci

  2. #2
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Je ne sais pas ce que renvoie comment fonctionne la classe simple_html_dom mais en gros tu veux concaténer le résultat, non ? Là à chaque boucle, $html est écrasé...

    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
    $total_execute = 91;
    $i = 0; // oubli de copier ou il n'est pas de le code original ?
    $all_html = ''; // chaîne vide au départ
     
    while ($i <= $total_execute) {
     
        $html = new simple_html_dom();
        $html->load_file('https://fqdn/'.$i.'/?sort_by=rating&items_per_page=60');
     
        // Déroulement de mon script
     
        $all_html .= $html->getText(); // ou getHtml() ou concat() ou je sais pas quelle autre méthode de simple_html_dom()
        $i++;
    }
     
    // ici $all_html contient toutes les pages

    Si tu peux publier le code de simple_html_dom ou mettre un lien vers une doc, je pourrais donner une réponse plus assurée =)
    Sinon j'ajouterais qu'une boucle for traditionnelle a une sémantique plus forte pour une itération sur un certain nombre d'éléments (for($i = 0 ; $i <= $total_execute ; $i++)), mais ça devrait bien marcher avec while aussi.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    J'ai également testé avec la boucle for mais sans succès.

    https://simplehtmldom.sourceforge.io/ simple_html_dom
    En gros il faudrait qu'à chaque tour j'incrémente mon numéro de page pour parser celle-ci mais ca ne fonctionne pas de cette façon apparemment.

  4. #4
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Ton incrémentation me semble correcte (tu peux vérifier en faisant un echo "$i "; dans la boucle par exemple.
    Le code que je t'ai proposé me paraît bon, alors. Juste remplacer $html->getText(); par $html->plaintext;.

    Si tu veux reprendre le html dans le parser pour traiter le DOM, tu peux toujours faire $dom = str_get_html($all_html); après la boucle.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    J'ai également fait le echo "$i "; dans la boucle, au début il m'affiche mon numéro de page: 2 et tout à la fin du parse 61 et je comprends pas d'ou sort le nombre.
    Mon code complet :


    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    <?php
     
    require_once 'simple_html_dom.php';
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; /* on définie les options d'erreurs que l'on souhaite */
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=Acteurs;charset=utf8", '', '', $pdo_options);
     
    $total_execute = 91;
     
    for($i = 2 ; $i <= $total_execute ; $i++){
     
    $url = 'https://fqdn/'.$i'./?sort_by=rating&items_per_page=98';
     
    $html = new simple_html_dom();
    $html->load_file($url);
     
     
    	function remplace_les_mois($phrase){
     
    		$origine = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November","December");
    		$remplace = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre");
     
    		$newphrase = str_replace($origine, $remplace, $phrase);
    		return $newphrase;
    	}
     
     
    	function remplace_les_cheveux($phrase){
     
    		$origine = array("Bald", "Brown", "Bleached", "Blond", "Black", "Grey", "Red");
    		$remplace = array("Chauve", "Brune", "Blanc", "Blonde", "Noir", "Gris", "Rousse");
     
    		$newveuch = str_replace($origine, $remplace, $phrase);
    		return $newveuch;
    	}
     
    	function remplace_nationalite($phrase){
     
    		$origine = array("Argentinian", "Australian", "Austrian", " Belarussian", " Belgian", "Brazilian ", "Canadian", "Costa Rican", "Czech", "Danish", "Estonian", "Finnish", "French", "German", "American", " Hungarian", "Indonesian", "Japanese");
    		$remplace = array("Argentine", "Australienne", "Autrichienne", "Biélorusse", "Belge", "Brésilienne", "Canadienne", "Costaricaine", "Tchèque", "Danoise", "Estonienne", "Finlandaise", "Française", "Allemande", "Américaine", "Hongroise", "Indonésienne", "Japonaise");
     
    		$newnation = str_replace($origine, $remplace, $phrase);
    		return $newnation;
    	}
    	//} 
    		$i=0;
    		foreach($html->find('.models-list-item') as $article) {
     
    			$item['nom'] = $html->find('p.title', $i)->plaintext;
    			$item['date de naissance'] = $html->find('ul.model-info-list', $i)->children(0)->plaintext;
    			$item['Lieu de naissance'] = $html->find('ul.model-info-list', $i)->children(1)->plaintext;
    			$item['De'] = $html->find('ul.model-info-list', $i)->children(2)->plaintext;
    			$item['Genre'] = $html->find('ul.model-info-list', $i)->children(3)->plaintext;
    			$item['Nationalité'] = $html->find('ul.model-info-list', $i)->children(4)->plaintext;
    			$item['Cheveux'] = $html->find('ul.model-info-list', $i)->children(5)->plaintext;
    			$item['infos'] = $html->find('ul.model-info-list', $i)->children(6)->plaintext;
    			$item['photos']= $html->find('img.thumb', $i)->src;
    			$item['id'] = $html->find('a.thumb-model-link', $i)->href;
    			$articles[] = $item;
    			$i++;
     
    			$id_nom = substr($item['id'], 13);
     
    			$id_actrice = substr($item['id'], 8, 4);
    			echo $id_actrice.'</b>';
     
    			echo '<b>'.$item['nom'].'</b><br />';
    			$nom = $item['nom'];
     
    			$texte = htmlspecialchars($item['date de naissance']);
    			$date = str_replace('Birthday', 'Date de Naissance', $texte);
    			$new_date = remplace_les_mois($date);
    			echo $new_date.'<br />';
     
     
    			$texte2 = htmlspecialchars($item['Lieu de naissance']);
    			$ville = str_replace('Birthplace', 'Ville de Naissance', $texte2);
    			echo $ville.'<br />';
     
     
    			$texte3 = htmlspecialchars($item['De']);
    			$active = str_replace('Years Active', 'Active de', $texte3);
    			$actives = str_replace('-', 'à', $active);
    			echo $actives.'<br />';
     
     
    			$texte4 = htmlspecialchars($item['Genre']);
    			$Ethnicity = str_replace('Ethnicity', 'Ethnicité', $texte4);
    			echo $Ethnicity.'<br />';
     
     
    			$texte5 = htmlspecialchars($item['Nationalité']);
    			$Nationalite = str_replace('Nationality/Heritage', 'Nationalité', $texte5);
    			$newnationalite = remplace_nationalite($Nationalite);
    			echo $newnationalite.'<br />';
     
     
    			$texte6 = htmlspecialchars($item['Cheveux']);
    			$Couleurs = str_replace('Hair Color', 'Couleurs de cheveux', $texte6);
    			$newcouleurs = remplace_les_cheveux($Couleurs);
    			echo $newcouleurs.'<br />';
     
     
    			$texte7 = htmlspecialchars($item['infos']);
    			$films = str_replace('Films:', '', $texte7);
     
    			$film = 'Films: <a href="http://fqdn/search/?q='.$id_nom.'">'.$films.'</a><br />';
     
    			$photos = '<img src='.$item['photos'].' alt="'.$item['nom'].'"><br /><br />';
     
     
    			$requete = $bdd->prepare('INSERT INTO `Actrices`(`id_actrice`, `nom`, `date_de_naissance`,`de`, `ville`, `genre`, `nationalite`, `cheveux`, `infos`, `photos`) VALUES (:id_actrice, :nom, :date_de_naissance, :de, :ville, :genre, :nationalite, :cheveux, :infos, :photos)');
    	        $requete->execute(array(':id_actrice'=>$id_actrice, ':nom'=>$nom, ':date_de_naissance'=>$new_date, ':de'=>$actives, ':ville'=>$ville , ':genre'=>$Ethnicity, ':nationalite'=>$newnationalite, ':cheveux'=>$Couleurs, ':infos'=>$film, ':photos'=>$photos));
     
    		}
    }
     
    ?>

  6. #6
    Membre expérimenté Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 100
    Par défaut
    Tes function, tu veux pas les déclarer en dehors de la boucle (avant), ça fait pas très propre dedans...

    Sinon tu fais un $i = 0; en plein dans la boucle avant le foreach, forcément que ça peut pas s'incrémenter ^^
    Je ne comprends même pas comment l'exécution sort de la boucle...
    Renomme l'un des deux $i ($page et $listItemIndex seraient des noms plus sémantiques).

    Pense aussi au temps d'exécution du script, il manque peut être un set_time_limit(0); (https://www.php.net/manual/fr/functi...time-limit.php) en début de script.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    les fonctions doivent être définies en dehors de toute boucle (for, foreach,...).

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

Discussions similaires

  1. [Batch] Incrémentation variable sur un script
    Par Tiffany2015 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/07/2015, 10h23
  2. incrémentation par boucle
    Par Timi493 dans le forum Excel
    Réponses: 2
    Dernier message: 22/06/2015, 08h27
  3. précision de l'incrément dans boucle for
    Par ewaca dans le forum C#
    Réponses: 4
    Dernier message: 15/02/2014, 18h20
  4. [XL-2010] Incrémenter une boucle
    Par idhmida dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2014, 16h07
  5. Piloter Simulink en boucle avec script
    Par nico974_0 dans le forum Simulink
    Réponses: 9
    Dernier message: 26/07/2012, 13h21

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