Wswin et php

Forum dédié à la mise en ligne de vos données météos relevées avec WsWin.
Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Wswin et php

Message par Tudgur » 03 sept. 2011, 10:12

Bonjour à tous.

Période bien calme sur le forum...
Sur ma config, toutes les 5min, wswin crée 30 fichiers et 3 de plus toutes les 30min.
Pour les graphiques, on ne peut pas grand chose, mais pour les customs...
L'idée, déjà utilisée par d'autres, est de créer un custom en php qui contient toutes les données utilisées dans les différents fichiers affichés sur le site. Wswin aurait alors moins de fichiers à créer et il y aurait moins de fichiers à transférer.

Je ne suis pas un costaud du php, et j'aimerais donc l'avis des spécialistes.

Je demande à Wswin la création d'un custom variables.php qui aurait la structure suivante :

Code : Tout sélectionner

<?php
$tab['date'] = 02;
$tab['heure'] = 10;
$tab['minute'] = 35;
$tab['temp'] = 21.3;
$tab['pression'] = 1015.4;
$tab['soleil_txt'] = 'temps ensoleillé';
//etc
//etc
?>
Puis sur le serveur, les différents fichiers qui feront appels aux données du tableau.
Par exemple, mini_conditions_actuelles.php (en haut à droite de ma bannière) serait :

Code : Tout sélectionner

<?php include('variables.php'); ?>
 à <?php
echo $tab['heure'];
?>h<?php
echo $tab['minute'];
?> : 
<span class="t70"><?php
echo $tab['temp'];
?>°C</span>  
Que pensez-vous de cette méthode ?
Y a-t-il d'autres façons de procéder, plus simples, plus rapides, plus efficaces, plus "carrées" ?
Merci pour votre aide.
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 04 sept. 2011, 10:44

Bonjour Tudgur,

C'est effectivement, je pense, la méthode la plus rationelle : en ce qui concerne les tags, wswin ne calcule plus qu'un seul fichier, et cela évite de calculer plusieurs fois le même tag qui apparaitrait dans plusieurs pages différente du site web.

J'utilise aussi cette méthode.

Cordialement

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 04 sept. 2011, 14:16

Salut Jacques et merci beaucoup pour ta réponse.
J'ai un peu avancé le boulot mais, comme je l'ai dit, je n'y connait pas grand chose en php...
Je bute sur quelques problèmes.

Dans les fichiers txt de wswin, permettant de créer les custom, j'avais déjà du code php ( source Lud29).
C'est le cas pour l'heure locale (pour les minutes, pas de problème), par exemple en été :

Code : Tout sélectionner

//heure locale
<?php $val=(%ws_calc[+]=%ws_hour2%~2~0%);
$val24=$val-24;
if($val>23)
{
echo "$val24";
}
else
{
echo "$val";
}
?>

et pour les rafales sur 10min :

Code : Tout sélectionner

<?php $liste ="%ws_arraygust[10]% ";
$tableau = explode(" ", $liste);
rsort($tableau);
$max= $tableau[0] * 1.852;
$max= round($max*10) / 10;
echo "$max";
?>
Je ne vois pas comment remplir cette ligne :

Code : Tout sélectionner

...
//heure locale
$tab['heure'] = %ws_calc[+]=%ws_hour2%~2~0%;
....
de même que celle-ci :

Code : Tout sélectionner

...
$tab['rafale_10min'] = ' ';
...
Si tu as une solution, je suis preneur !
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 04 sept. 2011, 15:03

L'utilisation de tags de calcul (%ws_calc%) ou de comparaison (%ws_compare%) est très pratique si on utilise que du html. Par contre, pour les pages codées en php, ces calculs et comparisons peuvent être faits directement en php. Cela libère ainsi wswin de ces calculs.

Pour ton tag %ws_calc[+]=%ws_hour2%~2~0% , tu peux par exemple mettre dans ton fichier custom :

Code : Tout sélectionner

...
$tab['heureUTC'] = %ws_hour%;        //heure UTC donnée par wswin
$tab['heure'] = ($tab['heureUTC'] + 2) % 24;      //heure locale = heure UTC + 2 modulo 24
...
Pour afficher l'heure locale dans une de tes pages, il suffira de mettre "echo $tab['heure'];

Pour les rafales 10 min, tu peux mettre dans ton custom :

Code : Tout sélectionner

...
$liste ="%ws_arraygust[10]% ";
$tableau = explode(" ", $liste);
rsort($tableau);
$max= $tableau[0] * 1.852;
$max= round($max*10) / 10;
$tab['rafale_10min'] = $max;
...

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 04 sept. 2011, 16:24

Merci beaucoup Jacques pour ton aide si précieuse !
Un petit détail concernant l'affichage des minutes :
Dans mon fichier variables.txt, j'ai :

Code : Tout sélectionner

$tab['minute'] = %ws_minute2%;
et dans mon fichier console.php :

Code : Tout sélectionner

<?php
echo $tab['minute'];
?>
Je n'ai pas vu ce que cela donnait à 17h00 mais à 17H05 j'avais en réalité 17h5 !
où est passé le zero ? faudrait-il écrire :

Code : Tout sélectionner

$tab['minute'] = '%ws_minute2%';
(avec des guillemets simples)

J'aurais une autre aide à te demander concernant un autre fichier, mais chaque chose en son temps...
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 04 sept. 2011, 16:29

Tudgur a écrit : faudrait-il écrire :

Code : Tout sélectionner

$tab['minute'] = '%ws_minute2%';
(avec des guillemets simples)
Oui. Si tu ne mets pas de guillemets, la variable est considérée comme numérique, donc 05 = 5. Avec les guillemets, la variable est une chaîne de caractères et le format restera tel quel.

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 05 sept. 2011, 07:49

OK, c'est bon !
Pour le fichier qui me posait problème, c'est aussi résolu.
Reste une bricole que je traine depuis un long moment : j'utilise le tag %longdate% de wswin qui donne aujourd'hui "lundi 5 septembre 2011". Le problème c'est que le tag fonctionne avec l'heure du PC, c'est à dire en UTC.
Donc, en été par exemple, ce tag est faut de 0h00 à 1h55...
Y a-t-il une possibilité d'afficher cette date en local, sachant qu'elle doit bien correspondre à une date de relevé ?
Ceci dit, le nombre de visiteurs dans cette période, peut être considéré comme nu,l et c'est la raison pour laquelle je ne me suis jamais attaqué au problème.
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 05 sept. 2011, 12:29

Tudgur a écrit : Reste une bricole que je traine depuis un long moment : j'utilise le tag %longdate% de wswin qui donne aujourd'hui "lundi 5 septembre 2011". Le problème c'est que le tag fonctionne avec l'heure du PC, c'est à dire en UTC.
Donc, en été par exemple, ce tag est faut de 0h00 à 1h55...
Y a-t-il une possibilité d'afficher cette date en local, sachant qu'elle doit bien correspondre à une date de relevé ?
...
Oui on peut le faire en php . Pour la lisibilité, je met à nouveau certaines variables de ton custom que nous avions discuté plus heut :

Code : Tout sélectionner

....
$tab['année']  = "%ws_year%";
$tab['mois']  = "%ws_month%";
$tab['jour']  = "%ws_day%";
$tab['heureUTC'] = "%ws_hour%*;
$tab['minute'] = "%ws_minute%*;
...
date_default_timezone_set('Europe/Paris');
setlocale(LC_TIME, "fr_FR");
$tab['longdate']=strftime("%A%e %B %G", strtotime($tab['jour']."-".$tab['mois']."-".$tab['année']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC"));
...
La variable $tab['longdate'] contiendra la date (heure locale) sous la forme "lundi 5 septembre 2011"

Si tu veux afficher la date et l'heure (corrigée en heure locale) - par exemple "lundi 5 septembre 2011 à 13h20" :

Code : Tout sélectionner

...
$tab['longdate']=strftime("%A%e %B %G à %Hh%M", strtotime($tab['jour']."-".$tab['mois']."-".$tab['année']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC"));
...

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 05 sept. 2011, 14:10

Là je ne saisis pas tout...
Ces date et l'heure (corrigées en heure locale), par exemple "lundi 5 septembre 2011 à 13h20", seront-elles celles du dernier relevé de Wswin ?

Dans ton script, n'est-ce pas le serveur qui va donner "longdate" en heure locale ?
Et dans le cas où wswin ou le PC plante , un visiteur peut alors s'imaginer que le site est à jour...
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 05 sept. 2011, 18:32

Tudgur a écrit :Là je ne saisis pas tout...
Ces date et l'heure (corrigées en heure locale), par exemple "lundi 5 septembre 2011 à 13h20", seront-elles celles du dernier relevé de Wswin ?
Oui, ce sont bien celles du dernier relevé de Wswin. J'écris à nouveau le code à mettre dans ton fichier custom, en décomposant la dernière ligne en 2 parties et en ajoutant des commentaires :

Code : Tout sélectionner

....
$tab['année']  = "%ws_year%";
$tab['mois']  = "%ws_month%";
$tab['jour']  = "%ws_day%";
$tab['heureUTC'] = "%ws_hour%*;
$tab['minute'] = "%ws_minute%*;

// la variable $tab contient la date et l'heure provenant des tags de wswin. Ce sont sont la date et heure du dernier relevé de Wswin.
...
date_default_timezone_set('Europe/Paris');        // indique au php le fuseau horaire par défaut
setlocale(LC_TIME, "fr_FR");      //indique au php que la date doit être écrite en français . nom des jours, des mois...etc

$heure_wswin_UTC = strtotime($tab['jour']."-".$tab['mois']."-".$tab['année']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC");
// la fonction php strtotime transforme une date exprimée en chaine de caractère en date "binaire". La date et heure sont ceux de la
// variable $tab, et sont donc ceux indiqués par les tags  de wswin.
// La chaine de caractère résultante  de $tab['jour']."-".$tab['mois']."-".$tab['année']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC" 
// sera par exemple :  "05-09-2011 19:13:00 UTC", indiquant donc une heure UTC

$tab['longdate']=strftime("%A%e %B %G", $heure_wswin_UTC );
// la fonction strftime va exprimer une date/heure binaire (ici variable $heure_wswin_UTC  définie ci-dessus)
// selon le format spécifié et dans le fuseau horaire par défaut - ici le fuseau horaire de Paris définit ci-dessus.
// La chaine "%A%e %B %G" indique le format désiré : %A = nom du jour, %e = date du jour précédé d'un espace, %B = nom du mois et %A = année
// Donc la variable $tab['longdate'] contiendra, en reprenant l'exemple ci dessus  "lundi 5 septembre 2011".
// En utilisant la chaine de formatage "%A%e %B %G à %Hh%M", la variable $tab['longdate'] sera "lundi 5 septembre 2011 à 21h13", 
// avec %H indiquant l'heure et %M indiquant les minutes.
...
Dans le code de mon post précédent, j'avait directement combiné les 2 dernières étapes pour simplifier le code (mais pas la compréhension de celui-ci...!).

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 05 sept. 2011, 21:30

Merci beaucoup pour toutes ces explications.
j'ai modifié mon custom comme ceci :

Code : Tout sélectionner

.......
$tab['annee'] = %ws_year%;
$tab['mois_txt'] = '%monthtxt%';
$tab['jour']  = '%ws_day%';
$tab['heureUTC'] = '%ws_hour%';
$tab['minute'] = '%ws_minute2%';

date_default_timezone_set('Europe/Paris');        // indique au php le fuseau horaire par défaut
setlocale(LC_TIME, "fr_FR");      //indique au php que la date doit être écrite en français . nom des jours, des mois...etc
$tab['longdate']=strftime("%A%e %B %G à %Hh%M", strtotime($tab['jour']."-".$tab['mois']."-".$tab['annee']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC"));
...
mais j'obtiens : "jeudi 1 janvier 1970 à 01h00" ????? même après avoir enlevé l'accent de année !
Serait-ce dû au mélange de guillemets simples et doubles.
Dans ton script, il y a aussi des * au lie de ", c'est normal ?

Code : Tout sélectionner

$tab['heureUTC'] = "%ws_hour%*;
$tab['minute'] = "%ws_minute%*;
Et pour finir, si ce code fonctionne, le passage heure d'été / heure d'hiver est-il automatique puisqu'il n'y a plus de +2 ou +1 dans le script ?
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 06 sept. 2011, 06:34

Dans ton script, il y a aussi des * au lie de ", c'est normal ?
non, c'est une faute de frappe...

Essaie $tab['annee'] =' %ws_year%'; (avec guillemets) au lieu de $tab['annee'] = %ws_year%; .

et je ne vois pas la définition de $tab['mois'] : $tab['mois'] = "%ws_month%"; dans ton extrait de code. Est-il ailleurs?

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 06 sept. 2011, 08:18

Salut Jacques;

Bien vu, je n'avais que $tab['mois_txt'] = '%monthtxt%';
Par contre le non du jour et la date ne sont pas séparés.
Dans tes commentaires, il y a ceci :
"// La chaine "%A%e %B %G" indique le format désiré : %A = nom du jour, %e = date du jour précédé d'un espace, %B = nom du mois et %A = année"
où tu dis %A = nom du jour et %A = année ???
%e indique simplement la date du jour ou la date du jour plus une espace devant ?
J'ai donc mis %A %e au lieu de %A%e et ça marche.

Mais le changement heur d'été heure d'hiver se fait-il automatiquement ?

Toute cette chaine est-elle nécessaire pour récupérer seulement l'heure et les minutes, type "à 10h45"
$tab['heure_locale']=strftime("à %Hh%M", strtotime($tab['jour']."-".$tab['mois']."-".$tab['annee']." ".$tab['heureUTC'].":".$tab['minute'].":00 UTC"));
ou seulement :
$tab['heure_locale']=strftime("à %Hh%M", ".$tab['heureUTC'].":".$tab['minute'].":00 UTC"));

Merci beaucoup.
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

jackT
Participation 4
Participation 4
Messages : 641
Enregistré le : 29 mars 2007, 11:24
Localisation : Sciez (74)
Contact :

Re: Wswin et php

Message par jackT » 06 sept. 2011, 08:55

Pour le formatage final de la date ou heure avec la fonction strftime , voir ici les différents champs utilisables. Je me suis effectivement trompé, en ce qui concerne l'année : c'est %G (année sur 4 chiffres).

Pour l'affichage de l’heure uniquement - selon le fuseau horaire définit par défaut :

$tab['heure_locale']=strftime("à %Hh%M", strtotime($tab['heureUTC'].":".$tab['minute'].":00 UTC"));

...tu avais oublié le strtotime.

Normalement, le changement heure d'hiver/heure d'été doit être automatique - à vérifier fin octobre...

Tudgur
Participation 6
Participation 6
Messages : 1770
Enregistré le : 13 mai 2007, 16:47
Localisation : 29880 Plouguerneau
Contact :

Re: Wswin et php

Message par Tudgur » 06 sept. 2011, 09:15

Je ne connaissais pas le site donné en lien : très bien, je l'ai mis en favori !
J'y lis : "%e : numéro du jour du mois. Les chiffres sont précédés d'un espace (de ' 1' à '31')"
comme tu me l'as indiqué et pourtant il n'y avait d'espace avant le n° du jour...

Maintenant c'est OK mais que se passe-t-il lors du changement d'heure (été / hiver) ?
Cordialement.

Tudgur
http://meteo-plouguerneau.fr" onclick="window.open(this.href);return false;

Répondre