[Zend_Http_Client] DomDocument et la météo Google
Bonjour
Souhaitant afficher la meteo fournie par l'APi de google (http://www.google.fr/ig/api?weather=Paris,France ) et étant débutant sous Zend j'ai un peu galéré. D'autant que j'ai eu du mal à trouver des exemples.
Comme maintenant j'ai bien reussi, je vous mets la classe que j'ai créé pour récupérer la meteo et la mettre dans un array avec les prévisions a 4 jours.
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
| class Utils_GoogleWeather
{
public static function getWeather ($ville,$pays) {
$meteo = array();
// appel de google meteo
$client = new Zend_Http_Client('http://www.google.fr/ig/api?weather='.$ville.",".$pays, array(
'maxredirects' => 0,
'timeout' => 30));
$response = $client->request();
if ($response->isSuccessful())
$fullText = $response->getBody();
else{
$meteo['erreur']="Le service est indisponible";
return $meteo;;
}
// il manque l'encodage ca fait planter DomDocument
// donc on le rajoute
$fullText = ereg_replace("<\?xml version=\"1\.0\"\?>","<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>",$fullText);
$dom = new DomDocument;
$dom->loadXML($fullText);
// récupération du message d'erreur si la ville n'est pas trouvée
if ($erreur = $dom->getElementsByTagName('problem_cause')->length >0) {
$meteo['erreur']="Ville : ".$ville.",".$pays. " non disponible";
return $meteo;;
}
// récupération des info générales
$forecast_information = $dom->getElementsByTagName('forecast_information')->item(0);
$meteo['city'] = $forecast_information->getElementsByTagName('city')->item(0)->getAttribute("data");
$meteo['date_time'] = $forecast_information->getElementsByTagName('current_date_time')->item(0)->getAttribute("data");
// récupération des conditions actuelles
$current_conditions = $dom->getElementsByTagName('current_conditions')->item(0);
$meteo['condition']= $current_conditions->getElementsByTagName('condition')->item(0)->getAttribute("data");
$meteo['temp'] = $current_conditions->getElementsByTagName('temp_c')->item(0)->getAttribute("data");
$meteo['humidite'] = $current_conditions->getElementsByTagName('humidity')->item(0)->getAttribute("data");
$meteo['icon'] = $current_conditions->getElementsByTagName('icon')->item(0)->getAttribute("data");
$meteo['vent']= $current_conditions->getElementsByTagName('wind_condition')->item(0)->getAttribute("data");
// récupération des prévisions
$listePrevisions = $dom->getElementsByTagName('forecast_conditions');
$i=0;
foreach($listePrevisions as $prev) {
$date = $prev->getElementsByTagName('day_of_week')->item(0)->getAttribute("data");
$high = $prev->getElementsByTagName('high')->item(0)->getAttribute("data");
$low = $prev->getElementsByTagName('low')->item(0)->getAttribute("data");
$icon = $prev->getElementsByTagName('icon')->item(0)->getAttribute("data");
$condition = $prev->getElementsByTagName('condition')->item(0)->getAttribute("data");
$meteo['jour'.$i]=array (
'date'=>$date,
'max'=>$high,
'min'=>$low,
'icon'=>$icon,
'condition'=>$condition,
);
$i++;
}
return $meteo;
}
} |
il suffit ensuite d'appeller la classe avec la ville (ou le code postal) et le pays souhaité
Code:
$meteo = Utils_GoogleWeather::getWeather($codePostal,"France");
et ensuite de l'afficher dans la vue
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php
if (isset ($this->meteo['erreur'])) {
echo ("<b>Erreur : ".$this->meteo['erreur']."</b><br>");
} else {
echo ("<b>".$this->meteo['city']."</b><br>");
//echo ($this->meteo['date_time']."<br>");
echo ("Conditions : ".$this->meteo['condition']."<br>");
echo ("Température : ".$this->meteo['temp']."°C<br>");
echo ($this->meteo['humidite']."<br>");
//echo ($this->meteo['icon']."<br>");
echo ($this->meteo['vent']."<br>");
for($i=0;$i<4;++$i) { ?>
<div class="metday">
<span class="mettxt"><?php echo ("<b>".$this->meteo['jour'.$i]['date']."</b> : ".$this->meteo['jour'.$i]['max']."°C/".$this->meteo['jour'.$i]['min']."°C"); ?></span>
<span class="metico"><img src="<?php echo $this->baseUrl();?>/public<?php echo ($this->meteo['jour'.$i]['icon']); ?>" alt="<?php echo $this->meteo['jour'.$i]['condition']; ?>" /></span>
</div>
<?php
}
}
?> |
Voila, j'espère que ca pourra aider quelqu'un...comme bien des message m'ont aidé, mis bout à bout à venir a bout de cette météo !