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.
il suffit ensuite d'appeller la classe avec la ville (ou le code postal) et le pays souhaité
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
77class 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; } }
et ensuite de l'afficher dans la vue
Code : Sélectionner tout - Visualiser dans une fenêtre à part $meteo = Utils_GoogleWeather::getWeather($codePostal,"France");
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 <?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 !
Partager