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 :

Une boucle pour mon parser !


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 48
    Points : 26
    Points
    26
    Par défaut Une boucle pour mon parser !
    Bonjour à tous,

    Je suis clairement une tanche en PHP ... mais je connaios suffisament asp pour pouvoir piger quelques trucs.

    Mon pbm, je parse une page html pour récup certaines valeurs (il s'agit d'une balise meteo publique).

    Voici un peu de code de cette page

    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    <div class="Info">
     
    				<div class="Titre">Relev&eacute; du 09/03/2009 - 11:54</div>
    								<div class="Data">
    					<table>
    						<tr><th colspan="2">Vent</th></tr>
    						<tr><td class="soustitre" Colspan="2"><b>Vent moyen (sur 5 min)</b></td></tr>
    						<tr>
     
    							<td class="label">Direction :</td><td class="valeur">
    																	N - 0°				
    															</td>
    						</tr>
    						<tr>
    							<td class="label">Vitesse :</td><td class="valeur">
    																	2 km/h															</td>
    						</tr>
     
    						<tr><td>&nbsp;</td></tr>
    						<tr><td class="soustitre" Colspan="2"><b>Vent maxi sur l'heure pr&eacute;c&eacute;dente</b></td></tr>
    						<tr>
    							<td class="label">Direction :</td><td class="valeur">
    																	SE - 135°															</td>
    						</tr>
     
    						<tr>
    							<td class="label">Vitesse :</td><td class="valeur">
    																	15 km/h															</td>
    						</tr>
    						<tr><td>&nbsp;</td></tr>
     
    						<tr><td class="soustitre" Colspan="2"><b>Vent mini sur l'heure pr&eacute;c&eacute;dente</b></td></tr>		
    						<tr><td class="label">Vitesse minimum :</td>
     
    							<td class="valeur">
    																	0 km/h															</td>
    						</tr>	
    						<!-- <tr><td class="label">Vitesse maxi au cours de  <br>l'heure précédente :</td>
    							<td class="valeur">km/h</td> -->
    						</tr>
     
    						<tr><td colspan="2">&nbsp;</td></tr>
    						<tr><td class="soustitre" Colspan="2"><b>Autre</b></td></tr>
    						<tr>
     
    							<td class="label">Temp&eacute;rature :</td><td class="valeur">
    																	2 °C															</td>
    						</tr>
     
    					</table>	
    					<p>Relev&eacute; mis à jour toutes les <strong>20 minutes.</strong></p>	
    				</div>
     
    				<div class="GraphVent">
    					<img alt="Graph du vent non disponible" src="./graphs/graph_vent.php?idBalise=61">
    				</div>				
    									<input class="action" type="button" value="Visualiser l'historique" onClick="document.location.href='./balise_histo.php?idBalise=61'">
    			</div>
    						<div class="Info">
    				<div class="Titre">Informations balise</div>
    				<div class="Data">
    					<table>
     
    						<tr><th colspan="2">Position</th></tr>
    						<tr><td class="label">Nom :</td><td>St Hilaire du Touvet</td></tr>
    						<tr><td class="label">Altitude :</td><td>0m</td></tr>
    						<tr><td class="label">GPS :</td><td></td></tr>
    						<tr><td class="label">Remarques :</td><td style="text-align: justify;">Aucune</td></tr>
     
    						<tr><td class="label" colspan="2">&nbsp;</td></tr>
     
    [/QUOTE]
     
    On trouve des balises td class="label" et td class="valeur" que je voudrais récupérer.
     
    J'ai donc fait (ou plutôt adapté):
    [QUOTE]
    <?php
    include_once('../../simple_html_dom.php');
     
    function scraping($url) {
        // create HTML DOM
        $html = file_get_html($url);
     
        // get title
        $ret['Titre'] = $html->find('div[class="Titre"]', 0)->innertext;
     
        // get rating
        $ret['Rating'] = $html->find('td[class="soustitre"] b', 0)->innertext;
     
    // ICI CREATION D UNE BOUCLE NECESSAIRE
     
        // get label_1
        $ret['label_1'] = $html->find('td[class="label"]', 0)->innertext;
     
        // get valeur_1
        $ret['valeur_1'] = $html->find('td[class="valeur"]', 0)->innertext;
     
    // DOUBLON
     
         // get label_2
        $ret['label_2'] = $html->find('td[class="label"]', 0)->innertext;
     
        // get valeur_2
        $ret['valeur_2'] = $html->find('td[class="valeur"]', 0)->innertext;
     
     
    // LA BOUCLE
     
     
        // get label
        foreach($html->find('td') as $div) {
     
            if($div->find('label', 0)->innertext=='Label :')
                return $ret;
     
            $key = '';
            $val = '';
     
            foreach($div->find('Label') as $node) {
                if ($node->tag=='h5')
                    $key = $node->plaintext;
     
                if ($node->tag=='valeur' && $node->plaintext!='valeur')
                    $val .= $node->plaintext;
            }
     
            $ret[$key] = $val;
        }
     
        // clean up memory
        $html->clear();
        unset($html);
     
        return $ret;
    }
     
     
    // -----------------------------------------------------------------------------
    // test it!
    $ret = scraping('http://www.balisemeteo.com/balise.php?idBalise=61');
     
    foreach($ret as $k=>$v)
        echo '<strong>'.$k.' </strong> : '.$v.'<br>';
    ?>
    Ce qui évidemment ne marche pas ... j'imagine que c'est tout bete, mais je ne maitrise pas !

    Si quelqu'un pouvait m'expliquer le pbm ou me filer un pti coup de pouce, ce serait top !

    Merci bcp

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 48
    Points : 26
    Points
    26
    Par défaut
    foreach($html->find('td[class="label"]') as $td) {
    echo $td->innertext . '<br>';
    }
    Ceci affiche bien la liste des label mais je n'arrive pas a ajouter la recup des valeurs a la boucle.

    Si quelqu'un sait .

    Merci

  3. #3
    Membre averti
    Avatar de onet
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    365
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2002
    Messages : 365
    Points : 344
    Points
    344
    Par défaut
    Salut,

    tu ne peux pas récupérer la valeur de la boucle dans un foreach.

    Si tu as besoin d'aoivr l'id, utilise plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $max = $mon_tab;
    for($i=0; $<$max; $i++{
         echo $mon_tab[$i];
    }
    Sinon, dans ton cas, tu peux aussi faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $i = 0;
    foreach($html->find('td[class="label"]') as $td) {	
            echo $td->innertext . '<br>';
    echo $i++;
    }
    Onet

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 48
    Points : 26
    Points
    26
    Par défaut
    Super !

    Merci Bcp, je vais me debrouiller avec !


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

Discussions similaires

  1. Besoin d'une boucle pour finir mon projet
    Par k8vxs dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/04/2015, 14h59
  2. je sais pas utilisé une boucle pour ?
    Par napz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2006, 01h09
  3. [ImageMagick] Une boucle pour ImageLine ?
    Par isa150183 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/11/2005, 18h41
  4. une IHM pour mon programme fortran
    Par mehdouchi dans le forum Fortran
    Réponses: 5
    Dernier message: 09/09/2005, 16h00

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