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:
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é 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> </td></tr>
<tr><td class="soustitre" Colspan="2"><b>Vent maxi sur l'heure précé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> </td></tr>
<tr><td class="soustitre" Colspan="2"><b>Vent mini sur l'heure précé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"> </td></tr>
<tr><td class="soustitre" Colspan="2"><b>Autre</b></td></tr>
<tr>
<td class="label">Température :</td><td class="valeur">
2 °C </td>
</tr>
</table>
<p>Relevé 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"> </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