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 : 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
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 : Sélectionner tout - Visualiser dans une fenêtre à part
$meteo = Utils_GoogleWeather::getWeather($codePostal,"France");
et ensuite de l'afficher dans la vue

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&eacute;rature : ".$this->meteo['temp']."&deg;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>&nbsp;:&nbsp;".$this->meteo['jour'.$i]['max']."&deg;C/".$this->meteo['jour'.$i]['min']."&deg;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 !