Compare commits

...

18 Commits
master ... v2

Author SHA1 Message Date
spip.franck@lien-d-amis.net 6b73b6bda6 - Ce n'est plus http://trad.spip.org mais https://trad.spip.net 5 years ago
spip.franck@lien-d-amis.net d300955ba3 Contrib est en https, donc j'ajoute le "s", plus divers broutilles 5 years ago
eric@smellup.net a8b3c2930c Pointer vers la documentation de la v2 6 years ago
eric@smellup.net 326c366dbb Oups, on passe en z+1 6 years ago
eric@smellup.net b95b2299bc Correction d'un oubli de suppression du service Yahoo dans le menu de configuration : on en profite pour calculer la liste des services à partir des fichiers du répertoire services/. 6 years ago
eric@smellup.net ebd83f8ee0 Encore des notices en moins 6 years ago
eric@smellup.net a8f6de676a Renforcer le controle sur le tableau de mashup pour éviter des notices. 6 years ago
eric@smellup.net 06870fdb2d Correction d'une notice dans wwo. 6 years ago
eric@smellup.net 81b62215da Eviter une notice php en ajoutant un #SET pour initialiser la variable pluie dans le modèle previsons_24h 6 years ago
eric@smellup.net baa502e89a Correction du traitement de la date avec weather (énième!) 6 years ago
eric@smellup.net 24c7b027f0 Ne plus faire référence à la liste de tickets qui est devenu obsolète. 6 years ago
eric@smellup.net 0d0a9a8ec5 On renomme les fichiers d'utilitaires dont le nom est trop générique en les préfixant par rainette_ 6 years ago
eric@smellup.net da9a6532d2 On revient en arrière sur la normalisation du tableau de données wwo sachant que tout cela est abouti dans la version 3 en cours de développement. 6 years ago
real3t@gmail.com 4843852797 Suite aux discussion sur la liste de la Zone, mettons le protocole 6 years ago
real3t@gmail.com 5229d9143d Report de [r97817] Weather fonctionne sur cette URL ; Et pas besoin du schéma, http et https sont pris en compte. (Merci Marcimat) 6 years ago
marcimat@rezo.net 8835d7ea42 Reports de r96286 et r97807 : attraper les erreurs d'analyse XML et JSON et les loger. 6 years ago
eric@smellup.net 178fab2b2b Ajout du format id weather pour le lieu de Wunderground. 6 years ago
eric@smellup.net 38a20af284 Copie du trunk dans une branche v2 qui ne va plus évoluer. 6 years ago
  1. 5
      demo/rainette.html
  2. 1
      inc/charger_meteo.php
  3. 244
      inc/normaliser.php
  4. 40
      inc/phraser.php
  5. 0
      inc/rainette_convertir.php
  6. 4
      inc/rainette_debusquer.php
  7. 72
      inc/rainette_phraser.php
  8. 2
      lang/paquet-rainette_fr.php
  9. 14
      lang/rainette.xml
  10. 2
      lang/rainette_ca.php
  11. 2
      lang/rainette_de.php
  12. 2
      lang/rainette_en.php
  13. 2
      lang/rainette_es.php
  14. 2
      lang/rainette_fa.php
  15. 2
      lang/rainette_fr.php
  16. 2
      lang/rainette_sk.php
  17. 1
      modeles/previsions_24h.html
  18. 7
      paquet.xml
  19. 2
      prive/squelettes/navigation/configurer_rainette.html
  20. 29
      rainette_fonctions.php
  21. 17
      services/owm.php
  22. 10
      services/weather.php
  23. 37
      services/wunderground.php
  24. 220
      services/wwo.php
  25. 240
      services/yahoo.php

5
demo/rainette.html

@ -64,8 +64,7 @@
'weather', 'FRXX0076',
'owm', 'Paris,Fr',
'wwo', 'Paris,France',
'wunderground', 'Paris,France',
'yahoo', '615702'}}
'wunderground', 'Paris,France'}}
#SET{lieu, #ENV{ville, #GET{jeu/#GET{service}}}}
<body>
@ -109,7 +108,7 @@
<a name="previsions" href="#"></a>
<div class="clearfix">
<div class="clearfix">
<h3>Utilisation du mod&eacute;le <strong>rainette_previsions</strong>, pour les jours &agrave; venir (jour=3, type=x_jours, sous-modele=previsions_24h)</h3>
<h3>Utilisation du mod&eacute;le <strong>rainette_previsions</strong>, pour les jours &agrave; venir (jour=5, type=x_jours, sous-modele=previsions_24h)</h3>
[(#MODELE{rainette_previsions,code=#GET{lieu},type=x_jours,jour=5,sous_modele=previsions_24h, service=#GET{service}})]
</div>
<div class="clearfix">

1
inc/charger_meteo.php

@ -21,7 +21,6 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
* - 'weather' pour le weather.com, la valeur par défaut
* - 'wwo' pour World Weather Online
* - 'wunderground' pour Wunderground
* - 'yahoo' pour Yahoo! Weather
* - 'owm' pour Open Weather Map
*
* @return string

244
inc/normaliser.php

@ -1,244 +0,0 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_RAINETTE_SEPARATEUR_DONNEE_MULTIPLE'))
define('_RAINETTE_SEPARATEUR_DONNEE_MULTIPLE', ', ');
$GLOBALS['rainette_config']['conditions'] = array(
// Données d'observation
'derniere_maj' => array('origine' => 'service', 'type_php' => 'date'),
'station' => array('origine' => 'service', 'type_php' => 'string'),
// Températures
'temperature_reelle' => array('origine' => 'service', 'type_php' => 'float'),
'temperature_ressentie' => array('origine' => 'service', 'type_php' => 'float'),
// Données anémométriques
'vitesse_vent' => array('origine' => 'service', 'type_php' => 'float'),
'angle_vent' => array('origine' => 'service', 'type_php' => 'int'),
'direction_vent' => array('origine' => 'service', 'type_php' => 'string'),
// Données atmosphériques
'precipitation' => array('origine' => 'service', 'type_php' => 'float'),
'humidite' => array('origine' => 'service', 'type_php' => 'int'),
'point_rosee' => array('origine' => 'service', 'type_php' => ''),
'pression' => array('origine' => 'service', 'type_php' => 'float'),
'tendance_pression' => array('origine' => 'service', 'type_php' => ''),
'visibilite' => array('origine' => 'service', 'type_php' => 'float'),
'indice_uv' => array('origine' => 'service', 'type_php' => 'int'),
'risque_uv' => array('origine' => 'calcul', 'type_php' => 'string'),
// Etats météorologiques natifs
'code_meteo' => array('origine' => 'service', 'type_php' => 'int'),
'icon_meteo' => array('origine' => 'service', 'type_php' => 'string'),
'desc_meteo' => array('origine' => 'service', 'type_php' => 'string'),
// Etats météorologiques calculés
'icone' => array('origine' => 'calcul', 'type_php' => 'mixed'),
'resume' => array('origine' => 'calcul', 'type_php' => 'mixed'),
'periode' => array('origine' => 'calcul', 'type_php' => 'int'),
);
$GLOBALS['rainette_config']['previsions'] = array(
// Données d'observation
'index' => array('origine' => 'calcul', 'type_php' => 'int'),
'date' => array('origine' => 'service', 'type_php' => 'date'),
// Données astronomiques
'lever_soleil' => array('origine' => 'service', 'type_php' => 'date'),
'coucher_soleil' => array('origine' => 'service', 'type_php' => 'date'),
// Températures
'temperature_max' => array('origine' => 'service', 'type_php' => 'float'),
'temperature_min' => array('origine' => 'service', 'type_php' => 'float'),
// Données anémométriques
'vitesse_vent' => array('origine' => 'service', 'type_php' => 'float'),
'angle_vent' => array('origine' => 'service', 'type_php' => 'int'),
'direction_vent' => array('origine' => 'service', 'type_php' => 'string'),
// Données atmosphériques
'risque_precipitation' => array('origine' => 'service', 'type_php' => 'int'),
'precipitation' => array('origine' => 'service', 'type_php' => 'float'),
'humidite' => array('origine' => 'service', 'type_php' => 'int'),
'pression' => array('origine' => 'service', 'type_php' => 'float'),
'indice_uv' => array('origine' => 'service', 'type_php' => 'int'),
'risque_uv' => array('origine' => 'calcul', 'type_php' => 'string'),
// Etats météorologiques natifs
'code_meteo' => array('origine' => 'service', 'type_php' => 'int'),
'icon_meteo' => array('origine' => 'service', 'type_php' => 'string'),
'desc_meteo' => array('origine' => 'service', 'type_php' => 'string'),
// Etats météorologiques calculés
'icone' => array('origine' => 'calcul', 'type_php' => 'mixed'),
'resume' => array('origine' => 'calcul', 'type_php' => 'mixed'),
'periode' => array('origine' => 'calcul', 'type_php' => 'int'),
// Informations complémentaires
'max_jours' => array('origine' => 'calcul', 'type_php' => 'int'),
);
$GLOBALS['rainette_config']['infos'] = array(
// Lieu
'ville' => array('origine' => 'service', 'type_php' => 'string'),
'region' => array('origine' => 'service', 'type_php' => 'string'),
// Coordonnées
'longitude' => array('origine' => 'service', 'type_php' => 'float'),
'latitude' => array('origine' => 'service', 'type_php' => 'float'),
// Données démographiques
'population' => array('origine' => 'service', 'type_php' => 'int'),
// Informations complémentaires
'max_previsions' => array('origine' => 'calcul', 'type_php' => 'int'),
);
function get_donnees_service($config_service, $mode, $format, $systeme_unite, $flux) {
global $rainette_config;
$tableau = array();
$donnees_service = get_element($flux, $config_service[$mode][$format]['base']);
if ($donnees_service !== NULL) {
// Le service a renvoyé des données, on boucle sur les clés du tableau normalisé
foreach (array_keys($rainette_config[$mode]) as $_donnee) {
if ($rainette_config[$mode][$_donnee]['origine'] == 'service') {
// La donnée est fournie par le service ou n'est pas disponible. Elle n'est jamais calculée
// par le plugin
if ($cle_service = $config_service[$mode][$format]['donnees'][$_donnee]['cle']) {
// La donnée est normalement fournie par le service car elle possède une configuration
// de clé
$cle_donnee = array();
// On détermine en premier lieu si la donnée est composée d'une ou plusieurs (2)
// valeurs du service. Dans ce dernier cas la clé est écrite 'cle1+cle2' et les données
// sont toujours des chaines de caractères.
if (strpos($cle_service[0], '+') !== false) {
$cles_0 = explode('+', $cle_service[0]);
array_shift($cle_service);
foreach ($cles_0 as $_cle_0) {
$cle_donnee[] = array_merge(array($_cle_0), $cle_service);
}
} else {
// On traite le cas où le nom de la clé varie suivant le système d'unité choisi.
// Ce n'est jamais le cas pour les données composées
if ($config_service[$mode][$format]['donnees'][$_donnee]['suffixe_unite']) {
$cle_service[0] .= $config_service[$mode][$format]['donnees'][$_donnee]['suffixe_unite'][$systeme_unite];
}
$cle_donnee[] = $cle_service;
}
// On utilise donc la première clé qui est souvent la seule (cas d'une composition est rare)
// pour calculer la valeur du service.
$valeur_service = '';
foreach ($cle_donnee as $_cle_donnee) {
$valeur = get_element($donnees_service, $_cle_donnee);
if ($valeur !== NULL) {
$typer = get_typage($mode, $_donnee);
if ($rainette_config[$mode][$_donnee]['type_php'] == 'string') {
$valeur_service .= $valeur_service
? _RAINETTE_SEPARATEUR_DONNEE_MULTIPLE . $typer($valeur)
: $typer($valeur);
} else {
$valeur_service = $typer($valeur);
if ($rainette_config[$mode][$_donnee]['type_php'] == 'date') {
$valeur_service = date('Y-m-d H:i:s', $valeur_service);
}
}
}
}
// Si la valeur était disponible on la stocke sinon on met la donnée à chaine vide pour
// montrer l'indisponibilité temporaire.
$tableau[$_donnee] = $valeur_service;
} else {
// La données météo n'est jamais fournie par le service. On la positionne à NULL pour
// la distinguer avec une donnée vide car indisponible temporairement.
$tableau[$_donnee] = NULL;
}
} else {
// La données météo est toujours calculée à posteriori par le plugin indépendamment
// du service. On l'initialise temporairement à la chaine vide.
$tableau[$_donnee] = '';
}
}
}
return $tableau;
}
function initialiser_tableau_standard($mode, $config_service=array()) {
global $rainette_config;
$tableau = array();
$donnees = $rainette_config[$mode];
if ($donnees) {
foreach ($donnees as $_donnee => $_config) {
$tableau[$_donnee] = '';
if (($_config['origine'] == 'service')
and (!$config_service[$_donnee]['cle'])) {
$tableau[$_donnee] = NULL;
}
}
}
return $tableau;
}
function get_element($tableau, $indexes) {
$erreur = false;
$element = $tableau;
foreach ($indexes as $_index) {
if (isset($element[$_index])) {
$element = $element[$_index];
}
else {
$erreur = true;
break;
}
}
return ($erreur ? NULL : $element);
}
function get_configuration($mode, $donnee='', $information='') {
global $rainette_config;
if ($donnee) {
if ($information) {
$config = isset($rainette_config[$mode][$donnee][$information])
? $rainette_config[$mode][$donnee][$information]
: '';
}
else {
$config = isset($rainette_config[$mode][$donnee])
? $rainette_config[$mode][$donnee]
: array();
}
}
else {
$config = isset($rainette_config[$mode])
? $rainette_config[$mode]
: array();
}
return $config;
}
function get_typage($mode, $donnee) {
global $rainette_config;
$fonction = '';
$type_php = isset($rainette_config[$mode][$donnee]['type_php'])
? $rainette_config[$mode][$donnee]['type_php']
: '';
if ($type_php) {
switch ($type_php) {
case 'float':
$fonction = 'floatval';
break;
case 'int':
$fonction = 'intval';
break;
case 'string':
$fonction = 'strval';
break;
case 'date':
$fonction = 'strtotime';
break;
default:
$fonction = '';
}
}
return $fonction;
}
?>

40
inc/phraser.php

@ -1,40 +0,0 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* @param string $url
* @param string $utiliser_namespace
* @return array
*/
function url2flux_xml($url, $utiliser_namespace='false') {
// Acquisition des données spécifiées par l'url
include_spip('inc/distant');
$flux = recuperer_page($url);
// Tranformation de la chaine xml reçue en tableau associatif
$convertir = charger_fonction('simplexml_to_array', 'inc');
$xml = $convertir(simplexml_load_string($flux), $utiliser_namespace);
$xml = $xml['root'];
return $xml;
}
/**
* @param string $url
* @return array
*/
function url2flux_json($url) {
// Acquisition des données spécifiées par l'url
include_spip('inc/distant');
$flux = recuperer_page($url);
// Tranformation de la chaine json reçue en tableau associatif
$json = json_decode($flux, true);
return $json;
}
?>

0
inc/convertir.php → inc/rainette_convertir.php

4
inc/debusquer.php → inc/rainette_debusquer.php

@ -84,8 +84,8 @@ function rainette_dbg_comparer_services($mode='conditions', $jeu=array()) {
'weather' => 'FRXX0076',
'owm' => 'Paris,Fr',
'wwo' => 'Paris,France',
'wunderground' => 'Paris,France',
'yahoo' => '615702');
'wunderground' => 'Paris,France'
);
// Recuperation du tableau des conditions courantes
foreach($jeu as $_service => $_lieu) {

72
inc/rainette_phraser.php

@ -0,0 +1,72 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* @param string $url
* @param string $utiliser_namespace
*
* @return array
*/
function url2flux_xml($url, $utiliser_namespace = 'false') {
// Acquisition des données spécifiées par l'url
include_spip('inc/distant');
$flux = recuperer_page($url);
if (!$flux) {
spip_log("URL indiponible : $url", "rainette");
return array();
}
// Tranformation de la chaine xml reçue en tableau associatif
$convertir = charger_fonction('simplexml_to_array', 'inc');
// Pouvoir attraper les erreurs de simplexml_load_string() !!!
// http://stackoverflow.com/questions/17009045/how-do-i-handle-warning-simplexmlelement-construct/17012247#17012247
set_error_handler(function($errno, $errstr, $errfile, $errline) {
throw new Exception($errstr, $errno);
});
try {
$xml = $convertir(simplexml_load_string($flux), $utiliser_namespace);
$xml = $xml['root'];
} catch (Exception $e) {
restore_error_handler();
spip_log("Erreur analyse xml : " . $e->getMessage(), "rainette");
return array();
}
restore_error_handler();
return $xml;
}
/**
* @param string $url
*
* @return array
*/
function url2flux_json($url) {
// Acquisition des données spécifiées par l'url
include_spip('inc/distant');
$flux = recuperer_page($url);
if (!$flux) {
spip_log("URL indiponible : $url", "rainette");
return array();
}
// Tranformation de la chaine json reçue en tableau associatif
try {
$json = json_decode($flux, true);
} catch (Exception $e) {
spip_log("Erreur analyse json : " . $e->getMessage(), "rainette");
return array();
}
return $json;
}

2
lang/paquet-rainette_fr.php

@ -13,7 +13,7 @@ if (!defined('_ECRIRE_INC_VERSION')) return;
$GLOBALS[$GLOBALS['idx_lang']] = array(
// R
'rainette_description' => 'Cette nouvelle version de Rainette permet de choisir son service météo parmi weather.com, Wunderground, World Weather Online, Open Weather Map ou Yahoo. Une configuration est disponible pour chaque service en particulier pour saisir une clé d\'enregistrement. Les affichages proposées par cette version sont incompatibles avec ceux de la branche v1.
'rainette_description' => 'Cette nouvelle version de Rainette permet de choisir son service météo parmi weather.com, Wunderground, World Weather Online ou Open Weather Map. Une configuration est disponible pour chaque service en particulier pour saisir une clé d\'enregistrement. Les affichages proposées par cette version sont incompatibles avec ceux de la branche v1.
Ce plugin permet d\'afficher les conditions et les prévisions météorologiques d\'une ville donnée à partir du flux xml fourni par un des services méteorologiques supportés.
Il ne stocke aucune information en base de données ni ne gère le choix des villes.

14
lang/rainette.xml

@ -1,15 +1,15 @@
<traduction module="rainette" gestionnaire="salvatore" url="http://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/rainette/lang/" reference="fr">
<traduction module="rainette" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_plugins_/rainette/lang/" reference="fr">
<langue code="ca" />
<langue code="de" />
<langue code="en" />
<langue code="es" url="http://trad.spip.net/tradlang_module/rainette?lang_cible=es">
<traducteur nom="_Eric_" lien="http://trad.spip.net/auteur/_eric_" />
<langue code="es" url="https://trad.spip.net/tradlang_module/rainette?lang_cible=es">
<traducteur nom="_Eric_" lien="https://trad.spip.net/auteur/_eric_" />
</langue>
<langue code="fa" url="http://trad.spip.net/tradlang_module/rainette?lang_cible=fa">
<traducteur nom="Davood Hossein" lien="http://trad.spip.net/auteur/davood-hossein" />
<langue code="fa" url="https://trad.spip.net/tradlang_module/rainette?lang_cible=fa">
<traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
</langue>
<langue code="fr" />
<langue code="sk" url="http://trad.spip.net/tradlang_module/rainette?lang_cible=sk">
<traducteur nom="jaro" lien="http://trad.spip.net/auteur/jaro" />
<langue code="sk" url="https://trad.spip.net/tradlang_module/rainette?lang_cible=sk">
<traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
</langue>
</traduction>

2
lang/rainette_ca.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=ca
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=ca
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/rainette_de.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=de
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=de
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/rainette_en.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=en
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=en
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/rainette_es.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=es
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=es
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/rainette_fa.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=fa
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=fa
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

2
lang/rainette_fr.php

@ -54,7 +54,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_utilisation_owm' => 'Le service fournit gratuitement les données météorologiques sous licence CC-BY-SA 2.0 pour une utilisation commerciale ou pas. Il est demandé de créditer le service avec un lien vers le site web. Pour consulter les termes exacts d\'utilisation veuillez vous rendre sur la page <a href="http://openweathermap.org/copyright">Terms and Conditions</a>.',
'info_utilisation_wwo' => 'Le service fournit gratuitement les données météorologiques pour une utilisation commerciale ou pas. Il est demandé de créditer le service avec un lien vers le site web. Pour consulter les termes exacts d\'utilisation veuillez vous rendre sur la page <a href="http://developer.worldweatheronline.com/api_terms_and_conditions">API Terms and Conditions</a>.',
'info_utilisation_wunderground' => 'Le service fournit gratuitement les données météorologiques. Il est demandé de créditer le service avec le nom et le logo du service. Pour consulter les termes exacts d\'utilisation veuillez vous rendre sur la page <a href="http://www.wunderground.com/weather/api/d/terms.html">Weather API Terms of Service</a>.',
'info_utilisation_yahoo' => 'Le service fournit gratuitement les données météorologiques pour les usages personnel et à but non lucratif. Il est demandé de créditer le service avec le nom du service ou le logo. Pour consulter les termes exacts d\'utilisation veuillez vous rendre sur la page <a href="http://developer.yahoo.com/weather/#terms">Terms of Use</a>.',
'info_configurer_theme' => 'Choisissez le thème d\'icônes utilisé dans les affichages.',
'info_page_configurer' => 'Rainette propose une configuration pour chacun des services de météorologie intégré au plugin. Néanmoins, seuls les services utilisés dans votre site nécessitent d\'être configurés.',
'info_credits' => 'Données fournies par @service@',
@ -231,7 +230,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'titre_service_weather' => 'weather.com&reg;',
'titre_service_wwo' => 'World Weather Online',
'titre_service_wunderground' => 'Weather Underground',
'titre_service_yahoo' => 'Yahoo! Weather',
'titre_page_configurer' => 'Configuration du plugin Rainette',
// U

2
lang/rainette_sk.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de http://trad.spip.net/tradlang_module/rainette?lang_cible=sk
// extrait automatiquement de https://trad.spip.net/tradlang_module/rainette?lang_cible=sk
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) return;

1
modeles/previsions_24h.html

@ -24,6 +24,7 @@
<span><:rainette:vent|ucfirst:></span><br />
(#ENV{#ENV{periode}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{service, weather}})
</li>]
#SET{pluie, non}
[<li>
<span><:rainette:precipitation|ucfirst:></span><br />
(#ENV{#ENV{periode}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{service, weather}})

7
paquet.xml

@ -1,13 +1,12 @@
<paquet
prefix="rainette"
categorie="divers"
version="2.2.4"
etat="test"
version="2.4.7"
etat="stable"
compatibilite="[3.0.11;3.1.*]"
logo="rainette-64.png"
demonstration="demo/rainette"
documentation="http://contrib.spip.net/article3133"
developpement="http://zone.spip.org/trac/spip-zone/query?component=plugins%2Frainette&amp;group=type&amp;col=id&amp;col=summary&amp;col=owner&amp;col=type&amp;col=status&amp;col=priority&amp;col=severity&amp;report=2&amp;order=priority"
documentation="https://contrib.spip.net/article4217"
>
<nom>Rainette</nom>

2
prive/squelettes/navigation/configurer_rainette.html

@ -5,7 +5,7 @@
[(#REM) <!-- Navigation dans les pages de configuration --> ]
<ul class="liste-items sous_navigation">
<BOUCLE_navigation_cfg(DATA){liste weather,owm,wwo,wunderground,yahoo}{par cle}>
<BOUCLE_navigation_cfg(DATA){liste #VAL{liste}|rainette_lister_services}{par cle}>
[<li class="item">
(#URL_ECRIRE{#ENV{exec}}|parametre_url{service, #VALEUR}
|lien_ou_expose{

29
rainette_fonctions.php

@ -37,7 +37,7 @@ function calculer_infos($lieu, $type, $service) {
return $tableau;
else {
$tableau = unserialize($tableau);
$info = $tableau[strtolower($type)];
$info = isset($tableau[strtolower($type)]) ? $tableau[strtolower($type)] : '';
return $info;
}
}
@ -117,7 +117,7 @@ function rainette_afficher_resume($meteo) {
*/
function rainette_afficher_direction($direction) {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$direction = angle2direction($direction);
if ($direction)
@ -216,6 +216,29 @@ function rainette_afficher_unite($valeur, $type_valeur='', $precision=-1, $servi
}
function rainette_lister_services($mode = 'tableau') {
$services = array();
// On lit les fichiers php dans répertoire services du plugin sachant ce répertoire
// contient exclusivement les api de chaque service dans un fichier unique appelé
// nom_du_service.php
if ($fichiers_api = glob(_DIR_PLUGIN_RAINETTE . '/services/*.php')) {
foreach ($fichiers_api as $_fichier) {
$services[] = strtolower(basename($_fichier, '.php'));
}
}
// Par défaut la liste est fournie comme un tableau.
// Si le mode demandé est 'liste' on renvoie une chaine énumérée séparée par des virgules.
if ($mode == 'liste') {
$services = implode(',', $services);
}
return $services;
}
/**
* Charger le fichier des infos meteos jour par jour
* et rendre l'affichage pour les N premiers jours
@ -338,6 +361,6 @@ function rainette_coasser_infos($lieu, $modele='infos_ville', $service='weather'
return $texte;
}
include_spip('inc/debusquer');
include_spip('inc/rainette_debusquer');
?>

17
services/owm.php

@ -107,7 +107,7 @@ function owm_url2flux($url) {
include_spip('inc/config');
$format = lire_config('rainette/owm/format', 'xml');
include_spip('inc/phraser');
include_spip('inc/rainette_phraser');
$flux = ($format == 'xml') ? url2flux_xml($url, false) : url2flux_json($url);
return $flux;
@ -187,9 +187,10 @@ function owm_flux2conditions($flux, $lieu) {
$tableau = ($format == 'xml') ? xml2conditions_owm($flux) : json2conditions_owm($flux);
// Compléter le tableau standard avec les états météorologiques calculés
if ($tableau['code_meteo']
AND $tableau['icon_meteo']
AND isset($tableau['desc_meteo'])) {
if ($tableau
and $tableau['code_meteo']
and $tableau['icon_meteo']
and isset($tableau['desc_meteo'])) {
// Determination de l'indicateur jour/nuit qui permet de choisir le bon icone
// Pour ce service le nom du fichier icone finit par "d" pour le jour et
// par "n" pour la nuit.
@ -274,7 +275,7 @@ function xml2previsions_owm($flux, $unite) {
$maintenant = time();
if ($previsions) {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
foreach ($previsions as $_index => $_prevision) {
if (isset($_prevision['children'])) {
// Index du jour et date du jour
@ -327,7 +328,7 @@ function xml2conditions_owm($flux) {
$tableau = array();
if (isset($flux['children'])) {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$conditions = $flux['children'];
// Date d'observation
@ -404,7 +405,7 @@ function json2previsions_owm($flux, $unite) {
$maintenant = time();
if ($previsions) {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
foreach ($previsions as $_index => $_prevision) {
// Index du jour et date du jour
$tableau[$_index]['index'] = $_index;
@ -449,7 +450,7 @@ function json2conditions_owm($flux) {
$tableau = array();
if ($flux) {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$conditions = $flux;
// Date d'observation

10
services/weather.php

@ -9,7 +9,7 @@
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_RAINETTE_WEATHER_URL_BASE'))
define('_RAINETTE_WEATHER_URL_BASE', 'http://xml.weather.com/weather/local/');
define('_RAINETTE_WEATHER_URL_BASE', 'http://wxdata.weather.com/wxdata/weather/local/');
if (!defined('_RAINETTE_WEATHER_JOURS_PREVISIONS'))
define('_RAINETTE_WEATHER_JOURS_PREVISIONS', 10);
@ -76,8 +76,8 @@ function weather_flux2previsions($flux, $lieu) {
// Certaines abréviations de fuseau ne sont pas reconnues par date_create suivant la configuration du serveur
// http. On supprime cette information avant le date_create qui produit un timezone erroné mais qui ne genera
// pas le format ensuite.
$elements_date = explode(' ', $date_service);
if (!$date_maj = date_create($date_service)) {
$elements_date = explode(' ', $date_service);
array_pop($elements_date);
$date_service = implode(' ', $elements_date);
$date_maj = date_create($date_service);
@ -99,8 +99,7 @@ function weather_flux2previsions($flux, $lieu) {
// Date complete des lever/coucher du soleil
list($heure,$am_pm) = explode(' ', $p['sunr'][0]);
list($heure, $minute) = explode(':', $heure);
$minute = strval($minute);
$heure = ($am_pm == 'PM') ? strval($heure) + 12 : strval($heure);
$heure = ($am_pm == 'PM') ? strval(intval($heure) + 12) : $heure;
$interval = new DateInterval("PT${heure}H${minute}M");
$date_soleil = clone $date_prevision;
date_add($date_soleil, $interval);
@ -108,8 +107,7 @@ function weather_flux2previsions($flux, $lieu) {
list($heure,$am_pm) = explode(' ', $p['suns'][0]);
list($heure, $minute) = explode(':', $heure);
$minute = strval($minute);
$heure = ($am_pm == 'PM') ? strval($heure) + 12 : strval($heure);
$heure = ($am_pm == 'PM') ? strval(intval($heure) + 12) : $heure;
$interval = new DateInterval("PT${heure}H${minute}M");
$date_soleil = clone $date_prevision;
date_add($date_soleil, $interval);

37
services/wunderground.php

@ -71,11 +71,15 @@ function wunderground_service2url($lieu, $mode) {
// Identification et formatage du lieu
$query = str_replace(array(' ', ','), array('', '/'), trim($lieu));
$index = strpos($query, '/');
if ($index !== false) {
$ville = substr($query, 0, $index);
$pays = substr($query, $index+1, strlen($query)-$index-1);
$query = $pays . '/' . $ville;
if (preg_match('#[a-zA-Z]{4}[0-9]{4}#', $query)) {
$query = 'locid:' . strtoupper($query);
} else {
$index = strpos($query, '/');
if ($index !== false) {
$ville = substr($query, 0, $index);
$pays = substr($query, $index + 1, strlen($query) - $index - 1);
$query = $pays . '/' . $ville;
}
}
// Identification de la langue du resume.
@ -116,7 +120,7 @@ function wunderground_url2flux($url) {
include_spip('inc/config');
$format = lire_config('rainette/wunderground/format', 'json');
include_spip('inc/phraser');
include_spip('inc/rainette_phraser');
$flux = ($format == 'json') ? url2flux_json($url) : url2flux_xml($url, false);
return $flux;
@ -210,9 +214,10 @@ function wunderground_flux2conditions($flux, $lieu) {
$tableau = ($format == 'json') ? json2conditions_wunderground($flux, $tendances, $suffixes) : xml2conditions_wunderground($flux, $tendances, $suffixes);
// Compléter le tableau standard avec les états météorologiques calculés
if ($tableau['code_meteo']
AND $tableau['icon_meteo']
AND isset($tableau['desc_meteo'])) {
if ($tableau
and $tableau['code_meteo']
and $tableau['icon_meteo']
and isset($tableau['desc_meteo'])) {
// Determination de l'indicateur jour/nuit qui permet de choisir le bon icone
// Pour ce service (cas actuel) le nom du fichier icone commence par "nt_" pour la nuit.
$icone = basename($tableau['icon_meteo']);
@ -313,7 +318,7 @@ function xml2previsions_wunderground($flux, $unites) {
// La documentation indique que les directions uniques sont fournies sous forme de texte comme North
// alors que les autres sont des acronymes. En outre, la valeur semble être traduite
// --> Le mieux est donc de convertir à partir de l'angle
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$tableau[$_index][0]['direction_vent'] = (isset($_prevision['avewind'][0]['children'])) ? angle2direction($tableau[$_index][0]['angle_vent']) : '';
$tableau[$_index][0]['risque_precipitation'] = (isset($_prevision['pop'])) ? intval($_prevision['pop'][0]['text']) : '';
@ -356,7 +361,7 @@ function xml2conditions_wunderground($flux, $tendances, $suffixes) {
// La documentation indique que les directions uniques sont fournies sous forme de texte comme North
// alors que les autres sont des acronymes. En outre, la valeur semble être traduite
// --> Le mieux est donc de convertir à partir de l'angle
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$tableau['direction_vent'] = (isset($conditions['wind_degrees'])) ? angle2direction($tableau['angle_vent']) : '';
$tableau['temperature_reelle'] = (isset($conditions['temp_'.$ut])) ? floatval($conditions['temp_'.$ut][0]['text']) : '';
@ -367,7 +372,7 @@ function xml2conditions_wunderground($flux, $tendances, $suffixes) {
$tableau['point_rosee'] = (isset($conditions['dewpoint_'.$ut])) ? intval($conditions['dewpoint_'.$ut][0]['text']) : '';
$tableau['pression'] = (isset($conditions['pressure_'.$up])) ? floatval($conditions['pressure_'.$up][0]['text']) : '';
$tableau['tendance_pression'] = (isset($conditions['pressure_trend']) AND array_key_exists($conditions['pressure_trend'][0]['text'], $tendances))
$tableau['tendance_pression'] = (isset($conditions['pressure_trend'][0]['text']) AND array_key_exists($conditions['pressure_trend'][0]['text'], $tendances))
? $tendances[$conditions['pressure_trend'][0]['text']]
: '';
@ -442,7 +447,7 @@ function json2previsions_wunderground($flux, $unites) {
// La documentation indique que les directions uniques sont fournies sous forme de texte comme North
// alors que les autres sont des acronymes. En outre, la valeur semble être traduite
// --> Le mieux est donc de convertir à partir de l'angle
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$tableau[$_index][0]['direction_vent'] = (isset($_prevision['avewind'])) ? angle2direction($tableau[$_index][0]['angle_vent']) : '';
$tableau[$_index][0]['risque_precipitation'] = (isset($_prevision['pop'])) ? intval($_prevision['pop']) : '';
@ -479,13 +484,13 @@ function json2conditions_wunderground($flux, $tendances, $suffixes) {
: '';
// Liste des conditions meteo extraites dans le systeme demande
list($ut, $up, $ud, $uv) = $suffixes;
list($ut, $up, $ud, $uv, $ur) = $suffixes;
$tableau['vitesse_vent'] = (isset($conditions['wind_'.$uv])) ? floatval($conditions['wind_'.$uv]) : '';
$tableau['angle_vent'] = (isset($conditions['wind_degrees'])) ? intval($conditions['wind_degrees']) : '';
// La documentation indique que les directions uniques sont fournies sous forme de texte comme North
// alors que les autres sont des acronymes. En outre, la valeur semble être traduite
// --> Le mieux est donc de convertir à partir de l'angle
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$tableau['direction_vent'] = (isset($conditions['wind_degrees'])) ? angle2direction($tableau['angle_vent']) : '';
$tableau['temperature_reelle'] = (isset($conditions['temp_'.$ut])) ? floatval($conditions['temp_'.$ut]) : '';
@ -574,13 +579,11 @@ function meteo_wunderground2weather($meteo, $periode=0) {
'partlysunny'=> array(28,27),
'sleet'=> array(5,5),
'rain'=> array(11,11),
'sleet'=> array(5,5),
'snow'=> array(16,16),
'sunny'=> array(32,31),
'tstorms'=> array(4,4),
'thunderstorms'=> array(4,4),
'unknown'=> array(4,4),
'cloudy'=> array(26,26),
'scatteredclouds'=> array(30,29),
'overcast'=> array(26,26));

220
services/wwo.php

@ -18,162 +18,6 @@ if (!defined('_RAINETTE_WWO_SUFFIXE_METRIQUE'))
if (!defined('_RAINETTE_WWO_SUFFIXE_STANDARD'))
define('_RAINETTE_WWO_SUFFIXE_STANDARD', 'f:in:miles');
// Configuration des données fournies par le service wwo pour le mode 'conditions'.
// -- Seules les données non calculées sont configurées.
$GLOBALS['rainette_wwo_config']['conditions'] = array(
'xml' => array(
'base' => array('children', 'current_condition', 0, 'children'),
'donnees' => array(
// Données d'observation
'derniere_maj' => array('cle' => array('localobsdatetime', 0, 'text'), 'suffixe_unite' => ''),
'station' => array('cle' => array(), 'suffixe_unite' => ''),
// Températures
'temperature_reelle' => array('cle' => array('temp_', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
'temperature_ressentie' => array('cle' => array('feelslike', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
// Données anémométriques
'vitesse_vent' => array('cle' => array('windspeed', 0, 'text'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
'angle_vent' => array('cle' => array('winddirdegree', 0, 'text'), 'suffixe_unite' => ''),
'direction_vent' => array('cle' => array('winddir16point', 0, 'text'), 'suffixe_unite' => ''),
// Données atmosphériques : risque_uv est calculé
'precipitation' => array('cle' => array('precipmm', 0, 'text'), 'suffixe_unite' => ''),
'humidite' => array('cle' => array('humidity', 0, 'text'), 'suffixe_unite' => ''),
'point_rosee' => array('cle' => array(), 'suffixe_unite' => ''),
'pression' => array('cle' => array('pressure', 0, 'text'), 'suffixe_unite' => ''),
'tendance_pression' => array('cle' => array(), 'suffixe_unite' => ''),
'visibilite' => array('cle' => array('visibility', 0, 'text'), 'suffixe_unite' => ''),
'indice_uv' => array('cle' => array(), 'suffixe_unite' => ''),
// Etats météorologiques natifs
'code_meteo' => array('cle' => array('weathercode', 0, 'text'), 'suffixe_unite' => ''),
'icon_meteo' => array('cle' => array('weathericonurl', 0, 'text'), 'suffixe_unite' => ''),
'desc_meteo' => array('cle' => array('weatherdesc', 0, 'text'), 'suffixe_unite' => ''),
// Etats météorologiques calculés : icone, resume, periode sont calculés
),
),
'json' => array(
'base' => array('data', 'current_condition', 0),
'donnees' => array(
// Données d'observation
'derniere_maj' => array('cle' => array('localObsDateTime'), 'suffixe_unite' => ''),
'station' => array('cle' => array(), 'suffixe_unite' => ''),
// Températures
'temperature_reelle' => array('cle' => array('temp_'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
'temperature_ressentie' => array('cle' => array('FeelsLike'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
// Données anémométriques
'vitesse_vent' => array('cle' => array('windspeed'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
'angle_vent' => array('cle' => array('winddirDegree'), 'suffixe_unite' => ''),
'direction_vent' => array('cle' => array('winddir16Point'), 'suffixe_unite' => ''),
// Données atmosphériques : risque_uv est calculé
'precipitation' => array('cle' => array('precipMM'), 'suffixe_unite' => ''),
'humidite' => array('cle' => array('humidity'), 'suffixe_unite' => ''),
'point_rosee' => array('cle' => array(), 'suffixe_unite' => ''),
'pression' => array('cle' => array('pressure'), 'suffixe_unite' => ''),
'tendance_pression' => array('cle' => array(), 'suffixe_unite' => ''),
'visibilite' => array('cle' => array('visibility'), 'suffixe_unite' => ''),
'indice_uv' => array('cle' => array(), 'suffixe_unite' => ''),
// Etats météorologiques natifs
'code_meteo' => array('cle' => array('weatherCode'), 'suffixe_unite' => ''),
'icon_meteo' => array('cle' => array('weatherIconUrl', 0, 'value'), 'suffixe_unite' => ''),
'desc_meteo' => array('cle' => array('weatherDesc', 0, 'value'), 'suffixe_unite' => ''),
// Etats météorologiques calculés : icone, resume, periode sont calculés
),
),
);
// Configuration des données fournies par le service wwo pour le mode 'conditions'.
// -- Seules les données non calculées sont configurées.
$GLOBALS['rainette_wwo_config']['previsions'] = array(
'xml' => array(
'base' => array('children', 'weather'),
'donnees' => array(
// Données d'observation : l'index est calculé
'date' => array('cle' => array('date', 0, 'text'), 'suffixe_unite' => ''),
// Données astronomiques
'lever_soleil' => array('cle' => array(), 'suffixe_unite' => ''),
'coucher_soleil' => array('cle' => array(), 'suffixe_unite' => ''),
// Températures
'temperature_max' => array('cle' => array('tempmax', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
'temperature_min' => array('cle' => array('tempmin', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
// Données anémométriques
'vitesse_vent' => array('cle' => array('windspeed', 0, 'text'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
'angle_vent' => array('cle' => array('winddirdegree', 0, 'text'), 'suffixe_unite' => ''),
'direction_vent' => array('cle' => array('winddir16point', 0, 'text'), 'suffixe_unite' => ''),
// Données atmosphériques : risque_uv est calculé
'risque_precipitation' => array('cle' => array(), 'suffixe_unite' => ''),
'precipitation' => array('cle' => array('precipmm', 0, 'text'), 'suffixe_unite' => ''),
'humidite' => array('cle' => array(), 'suffixe_unite' => ''),
'pression' => array('cle' => array('pressure', 0, 'text'), 'suffixe_unite' => ''),
'indice_uv' => array('cle' => array(), 'suffixe_unite' => ''),
// Etats météorologiques natifs
'code_meteo' => array('cle' => array('weathercode', 0, 'text'), 'suffixe_unite' => ''),
'icon_meteo' => array('cle' => array('weathericonurl', 0, 'text'), 'suffixe_unite' => ''),
'desc_meteo' => array('cle' => array('weatherdesc', 0, 'text'), 'suffixe_unite' => ''),
// Etats météorologiques calculés : icone, resume, periode sont calculés
),
),
'json' => array(
'base' => array('data', 'current_condition', 0),
'donnees' => array(
// Données d'observation
'derniere_maj' => array('cle' => array('localObsDateTime'), 'suffixe_unite' => ''),
'station' => array('cle' => array(), 'suffixe_unite' => ''),
// Températures
'temperature_reelle' => array('cle' => array('temp_'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
'temperature_ressentie' => array('cle' => array('FeelsLike'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
// Données anémométriques
'vitesse_vent' => array('cle' => array('windspeed'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
'angle_vent' => array('cle' => array('winddirDegree'), 'suffixe_unite' => ''),
'direction_vent' => array('cle' => array('winddir16Point'), 'suffixe_unite' => ''),
// Données atmosphériques : risque_uv est calculé
'precipitation' => array('cle' => array('precipMM'), 'suffixe_unite' => ''),
'humidite' => array('cle' => array('humidity'), 'suffixe_unite' => ''),
'point_rosee' => array('cle' => array(), 'suffixe_unite' => ''),
'pression' => array('cle' => array('pressure'), 'suffixe_unite' => ''),
'tendance_pression' => array('cle' => array(), 'suffixe_unite' => ''),
'visibilite' => array('cle' => array('visibility'), 'suffixe_unite' => ''),
'indice_uv' => array('cle' => array(), 'suffixe_unite' => ''),
// Etats météorologiques natifs
'code_meteo' => array('cle' => array('weatherCode'), 'suffixe_unite' => ''),
'icon_meteo' => array('cle' => array('weatherIconUrl', 0, 'value'), 'suffixe_unite' => ''),
'desc_meteo' => array('cle' => array('weatherDesc', 0, 'value'), 'suffixe_unite' => ''),
// Etats météorologiques calculés : icone, resume, periode sont calculés
),
),
);
// Configuration des données fournies par le service wwo pour le mode 'infos'.
// -- Seules les données non calculées sont configurées.
$GLOBALS['rainette_wwo_config']['infos'] = array(
'xml' => array(
'base' => array('children', 'nearest_area', 0, 'children'),
'donnees' => array(
// Lieu
'ville' => array('cle' => array('areaname+country', 0, 'text'), 'suffixe_unite' => ''),
'region' => array('cle' => array('region', 0, 'text'), 'suffixe_unite' => ''),
// Coordonnées
'longitude' => array('cle' => array('longitude', 0, 'text'), 'suffixe_unite' => ''),
'latitude' => array('cle' => array('latitude', 0, 'text'), 'suffixe_unite' => ''),
// Données démographiques
'population' => array('cle' => array('population', 0, 'text'), 'suffixe_unite' => ''),
// Informations complémentaires : aucune configuration car ce sont des données calculées
),
),
'json' => array(
'base' => array('data', 'nearest_area', 0),
'donnees' => array(
// Lieu
'ville' => array('cle' => array('areaName+country', 0, 'value'), 'suffixe_unite' => ''),
'region' => array('cle' => array('region', 0, 'value'), 'suffixe_unite' => ''),
// Coordonnées
'longitude' => array('cle' => array('longitude'), 'suffixe_unite' => ''),
'latitude' => array('cle' => array('latitude'), 'suffixe_unite' => ''),
// Données démographiques
'population' => array('cle' => array('population', 0, 'value'), 'suffixe_unite' => ''),
// Informations complémentaires : aucune configuration car ce sont des données calculées
),
),
);
/**
* ------------------------------------------------------------------------------------------------
@ -211,7 +55,7 @@ function wwo_service2url($lieu, $mode) {
. '?key=' . $cle
. '&format=' . $format
. '&extra=localObsTime'
. '&q=' . str_replace(' ', '', trim($lieu)); //todo : ne faut-il pas remplacer par + ?
. '&q=' . str_replace(' ', '+', trim($lieu));
if ($mode == 'infos') {
$url .= '&includeLocation=yes&cc=no&fx=no';
}
@ -241,7 +85,7 @@ function wwo_url2flux($url) {
include_spip('inc/config');
$format = lire_config('rainette/wwo/format', 'xml');
include_spip('inc/phraser');
include_spip('inc/rainette_phraser');
$flux = ($format == 'xml') ? url2flux_xml($url, false) : url2flux_json($url);
return $flux;
@ -320,7 +164,6 @@ function wwo_flux2previsions($flux, $lieu) {
* @return array
*/
function wwo_flux2conditions($flux, $lieu) {
global $rainette_wwo_config;
// Identifier le format d'échange des données
include_spip('inc/config');
@ -328,17 +171,25 @@ function wwo_flux2conditions($flux, $lieu) {
// Identification des suffixes d'unite pour choisir le bon champ
// -> wwo fournit des valeurs dans les deux systemes d'unites mais pas toutes
$systeme_unite = lire_config('rainette/wwo/unite', 'm');
include_spip('inc/config');
$unite = lire_config('rainette/wwo/unite', 'm');
if ($unite == 'm')
$suffixes = explode(':', _RAINETTE_WWO_SUFFIXE_METRIQUE);
else
$suffixes = explode(':', _RAINETTE_WWO_SUFFIXE_STANDARD);
// Construire le tableau standard des conditions météorologiques propres au service
$tableau = ($format == 'xml') ? xml2conditions_wwo($flux, $suffixes) : json2conditions_wwo($flux, $suffixes);
// Initialiser le tableau des données météo directement fournies par le service
include_spip('inc/normaliser');
$tableau = get_donnees_service($rainette_wwo_config, 'conditions', $format, $systeme_unite, $flux);
// Identification des suffixes d'unite pour choisir le bon champ
// -> wwo fournit des valeurs dans les deux systemes d'unites mais pas toutes
$systeme_unite = lire_config('rainette/wwo/unite', 'm');
if ($tableau) {
// Convertir les informations exprimées en système métrique dans le systeme US si la
// configuration le demande
if ($systeme_unite == 's') {
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
// Seules la température, la température ressentie et la vitesse du vent sont fournies dans
// les deux systèmes.
$tableau['visibilite'] = ($tableau['visibilite'])
@ -379,11 +230,11 @@ function wwo_flux2conditions($flux, $lieu) {
$tableau['resume'] = $meteo;
}
}
} else {
// Traitement des erreurs de flux
$tableau['erreur'] = 'chargement';
}
// Traitement des erreurs de flux
$tableau['erreur'] = (!$tableau) ? 'chargement' : '';
return $tableau;
}
@ -394,24 +245,17 @@ function wwo_flux2conditions($flux, $lieu) {
* @return array
*/
function wwo_flux2infos($flux, $lieu) {
global $rainette_wwo_config;
// Identifier le format d'échange des données
include_spip('inc/config');
$format = lire_config('rainette/wwo/format', 'xml');
$systeme_unite = lire_config('rainette/wwo/unite', 'm');
// Initialiser le tableau normalisé des informations à partir des données du service
include_spip('inc/normaliser');
$tableau = get_donnees_service($rainette_wwo_config, 'infos', $format, $systeme_unite, $flux);
// Construire le tableau standard des informations sur le lieu et ajouter le nombre de jours de prévisions
$tableau = ($format == 'xml') ? xml2infos_wwo($flux) : json2infos_wwo($flux);
$tableau['max_previsions'] = _RAINETTE_WWO_JOURS_PREVISIONS;
if ($tableau) {
// Ajouter les informations calculées, à savoir, le nombre de jours de prévisions
$tableau['max_previsions'] = _RAINETTE_WWO_JOURS_PREVISIONS;
} else {
// Traitement des erreurs de flux
$tableau['erreur'] = 'chargement';
}
// Traitement des erreurs de flux
$tableau['erreur'] = (!$tableau) ? 'chargement' : '';
return $tableau;
}
@ -467,7 +311,7 @@ function xml2previsions_wwo($flux, $suffixes) {
$tableau[$_index][0]['direction_vent'] = (isset($_prevision['hourly'][0]['children']['winddir16point'])) ? $_prevision['hourly'][0]['children']['winddir16point'][0]['text'] : '';
$tableau[$_index][0]['risque_precipitation'] = (isset($_prevision['hourly'][0]['children']['chanceofrain'])) ? intval($_prevision['hourly'][0]['children']['chanceofrain'][0]['text']) : '';
include_spip('inc/convertir');
include_spip('inc/rainette_convertir');
$tableau[$_index][0]['precipitation'] = (isset($_prevision['hourly'][0]['children']['precipmm'])) ? floatval($_prevision['hourly'][0]['children']['precipmm'][0]['text']) : '';
if (($ur == 'in') AND $tableau[$_index][0]['precipitation'])
$tableau[$_index][0]['precipitation'] = millimetre2inch($tableau[$_index][0]['precipitation']);
@ -587,20 +431,20 @@ function json2previsions_wwo($flux, $suffixes) {
list($ut, $ur, $uv) = array_map('ucfirst', $suffixes);
$tableau[$_index][0]['temperature_max'] = (isset($_prevision["maxtemp$ut"])) ? floatval($_prevision["maxtemp$ut"]) : '';
$tableau[$_index][0]['temperature_min'] = (isset($_prevision["mintemp$ut"])) ? floatval($_prevision["mintemp$ut"]) : '';
$tableau[$_index][0]['vitesse_vent'] = (isset($_prevision["windspeed$uv"])) ? floatval($_prevision["windspeed$uv"]) : '';
$tableau[$_index][0]['angle_vent'] = (isset($_prevision['winddirDegree'])) ? intval($_prevision['winddirDegree']) : '';
$tableau[$_index][0]['direction_vent'] = (isset($_prevision['winddir16Point'])) ? $_prevision['winddir16Point'] : '';
$tableau[$_index][0]['vitesse_vent'] = (isset($_prevision['hourly'][0]["windspeed$uv"])) ? floatval($_prevision['hourly'][0]["windspeed$uv"]) : '';
$tableau[$_index][0]['angle_vent'] = (isset($_prevision['hourly'][0]['winddirDegree'])) ? intval($_prevision['hourly'][0]['winddirDegree']) : '';
$tableau[$_index][0]['direction_vent'] = (isset($_prevision['hourly'][0]['winddir16Point'])) ? $_prevision['hourly'][0]['winddir16Point'] : '';
$tableau[$_index][0]['risque_precipitation'] = NULL;
include_spip('inc/convertir');
$tableau[$_index][0]['precipitation'] = (isset($_prevision['precipMM'])) ? floatval($_prevision['precipMM']) : '';
include_spip('inc/rainette_convertir');
$tableau[$_index][0]['precipitation'] = (isset($_prevision['hourly'][0]['precipMM'])) ? floatval($_prevision['hourly'][0]['precipMM']) : '';
if (($ur == 'in') AND $tableau[$_index][0]['precipitation'])
$tableau[$_index][0]['precipitation'] = millimetre2inch($tableau[$_index][0]['precipitation']);
$tableau[$_index][0]['humidite'] = NULL;
$tableau[$_index][0]['code_meteo'] = (isset($_prevision['weatherCode'])) ? intval($_prevision['weatherCode']) : '';
$tableau[$_index][0]['icon_meteo'] = (isset($_prevision['weatherIconUrl'])) ? $_prevision['weatherIconUrl'][0]['value'] : '';
$tableau[$_index][0]['desc_meteo'] = (isset($_prevision['weatherDesc'])) ? $_prevision['weatherDesc'][0]['value'] : '';
$tableau[$_index][0]['code_meteo'] = (isset($_prevision['hourly'][0]['weatherCode'])) ? intval($_prevision['hourly'][0]['weatherCode']) : '';
$tableau[$_index][0]['icon_meteo'] = (isset($_prevision['hourly'][0]['weatherIconUrl'])) ? $_prevision['hourly'][0]['weatherIconUrl'][0]['value'] : '';
$tableau[$_index][0]['desc_meteo'] = (isset($_prevision['hourly'][0]['weatherDesc'])) ? $_prevision['hourly'][0]['weatherDesc'][0]['value'] : '';
// Previsions de la nuit si elle existe
$tableau[$_index][1] = NULL;

240
services/yahoo.php

@ -1,240 +0,0 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_RAINETTE_YAHOO_URL_BASE'))
define('_RAINETTE_YAHOO_URL_BASE', 'http://weather.yahooapis.com/forecastrss');
if (!defined('_RAINETTE_YAHOO_JOURS_PREVISIONS'))
define('_RAINETTE_YAHOO_JOURS_PREVISIONS', 5);
function yahoo_service2cache($lieu, $mode) {
$dir = sous_repertoire(_DIR_CACHE, 'rainette');
$dir = sous_repertoire($dir, 'yahoo');
$f = $dir . strtoupper($lieu) . "_" . $mode . ".txt";
return $f;
}
function yahoo_service2url($lieu, $mode) {
include_spip('inc/config');
$unite = lire_config('rainette/yahoo/unite', 'm');
$url = _RAINETTE_YAHOO_URL_BASE . '?w=' . $lieu
. '&u=' . ($unite == 'm' ? 'c' : 'f');
return $url;
}
function yahoo_service2reload_time($mode) {
static $reload = array('conditions' => 3600, 'previsions' => 7200);
return $reload[$mode];
}
function yahoo_url2flux($url) {
include_spip('inc/phraser');
$flux = url2flux_xml($url, true);
return $flux;
}
/**
* lire le xml fournit par le service meteo et en extraire les infos interessantes
* retournees en tableau jour par jour
* utilise le parseur xml de Spip
*
* ne gere pas encore le jour et la nuit de la date courante suivant l'heure!!!!
* @param array $flux
* @return array
*/
function yahoo_flux2previsions($flux, $lieu) {
$tableau = array();
$index = 0;
if (isset($flux['children']['channel'][0]['children']['item'][0]['children']['yweather:forecast'])) {
$previsions = $flux['children']['channel'][0]['children']['item'][0]['children']['yweather:forecast'];
foreach ($previsions as $_index => $_prevision) {
if (isset($_prevision['attributes'])) {
$_prevision = $_prevision['attributes'];
// 1- Identifiants du jour : index dans le tableau et la date
$tableau[$_index]['index'] = $_index;
$tableau[$_index]['date'] = (isset($_prevision['date'])) ? date('Y-m-d', strtotime($_prevision['date'])) : '';
$tableau[$_index]['periode'] = 0;
// 2 Données astronomiques
$tableau[$_index]['lever_soleil'] = NULL;
$tableau[$_index]['coucher_soleil'] = NULL;
// 3- Prévisions pour le jour
$tableau[$_index][0]['temperature_max'] = (isset($_prevision['high'])) ? floatval($_prevision['high']) : '';
$tableau[$_index][0]['temperature_min'] = (isset($_prevision['low'])) ? floatval($_prevision['low']) : '';
$tableau[$_index][0]['vitesse_vent'] = NULL;
$tableau[$_index][0]['angle_vent'] = NULL;
$tableau[$_index][0]['direction_vent'] = NULL;
$tableau[$_index][0]['precipitation'] = NULL;
$tableau[$_index][0]['risque_precipitation'] = NULL;
$tableau[$_index][0]['humidite'] = NULL;
$tableau[$_index][0]['code_meteo'] = (isset($_prevision['code'])) ? intval($_prevision['code']) : '';
$tableau[$_index][0]['icon_meteo'] = NULL;
$tableau[$_index][0]['desc_meteo'] = NULL;
$tableau[$_index][0]['icone'] = $tableau[$_index][0]['code_meteo'];
$tableau[$_index][0]['resume'] = $tableau[$_index][0]['code_meteo'];
// 4- Prévisions pour la nuit
$tableau[$_index][1] = NULL;
}
}
// Date de la mise à jour des prévisions
// -- comme toutes les informations communes elles sont stockées dans un index supplémentaire en fin de tableau
$index = count($tableau);
if ($tableau) {
if (isset($flux['children']['channel'][0]['children']['lastbuilddate'][0]['text'])) {
$date_maj = isset($flux['children']['channel'][0]['children']['lastbuilddate'][0]['text'])
? strtotime($flux['children']['channel'][0]['children']['lastbuilddate'][0]['text'])
: '';
$tableau[$index]['derniere_maj'] = date('Y-m-d H:i:s', $date_maj);
}
// On stocke le nombre max de jours de prévisions pour le service
$tableau[$index]['max_jours'] = _RAINETTE_YAHOO_JOURS_PREVISIONS;
}
}
// Traitement des erreurs de flux
$tableau[$index]['erreur'] = (!$tableau) ? 'chargement' : '';
return $tableau;
}
function yahoo_flux2conditions($flux, $lieu) {
static $tendance = array(0 => 'steady', 1 => 'rising', 2 => 'falling');
$tableau = array();
include_spip('inc/convertir');
if (isset($flux['children']['channel'][0]['children']['yweather:wind'][0]['attributes'])) {
$conditions = $flux['children']['channel'][0]['children']['yweather:wind'][0]['attributes'];
// 1- Données anémométriques : vitesse, angle et direction (16 valeurs)
// --- la direction est calculée car la valeur du service est en anglais
$tableau['vitesse_vent'] = (isset($conditions['speed'])) ? floatval($conditions['speed']) : '';
$tableau['angle_vent'] = (isset($conditions['direction'])) ? intval($conditions['direction']) : '';
$tableau['direction_vent'] = (isset($conditions['direction'])) ? angle2direction($tableau['angle_vent']) : '';
$tableau['temperature_ressentie'] = (isset($conditions['chill'])) ? floatval($conditions['chill']) : '';
}
if (isset($flux['children']['channel'][0]['children']['item'][0]['children']['yweather:condition'][0]['attributes'])) {
$conditions = $flux['children']['channel'][0]['children']['item'][0]['children']['yweather:condition'][0]['attributes'];
// 2- Données d'observation : date et station
// --- la station n'est pas précisée par le service
$date_maj = (isset($conditions['date'])) ? strtotime($conditions['date']) : '';
$tableau['derniere_maj'] = date('Y-m-d H:i:s', $date_maj);
$tableau['station'] = NULL;