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

Autres composants PHP Discussion :

[Zend_Http_Client] DomDocument et la météo Google


Sujet :

Autres composants PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut [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 : 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 !

  2. #2
    Membre confirmé Avatar de fadex
    Inscrit en
    Septembre 2005
    Messages
    223
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Septembre 2005
    Messages : 223
    Par défaut
    merci bcp c'ete tres utile pour moi , mais la question est, y a il un service plus pro que celui de Google, parfois y a pas de résultat retourner par le service ( Martinvast )

    l'api yahoo lui aussi il offre juste les résultat d'une journée


    exemple ( Martinvast ) :

    Basse-Normandie -> Manche -> Cherbourg-Octeville -> Cherbourg-Octeville-Sud-Ouest -> Martinvast

    pour le moment j'ai changer le script pour quel m'envoie les prévisions de la région parente si y a pas de résultat retourné par Google.

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

Discussions similaires

  1. [Google Maps] Google ajoute la météo à l%u2019API de Google Maps
    Par Gordon Fowler dans le forum APIs Google
    Réponses: 0
    Dernier message: 06/04/2012, 12h27
  2. Google map + météo
    Par sheira dans le forum Services Web
    Réponses: 0
    Dernier message: 23/11/2009, 10h39
  3. WebService Google sur builder 5?
    Par billuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 19h43

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