Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#426 Le 27/04/2013, à 17:40

ljere

Re : [Conky] Alternative à weather.com (3)

oui c'est bien ça j'ai fais une upgrade depuis la beta, mais ça n'explique donc pas tous les problèmes que vous rencontrez tous.
merci pour les astuces


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#427 Le 27/04/2013, à 18:38

franz256

Re : [Conky] Alternative à weather.com (3)

Tout simplement parce que en faisant une upgrade vous avez conservé quelques anciens fichiers qui permettent à conky de fonctionner. Avec une install complète on perd justement les fichiers nécessaires. Il suffit de trouver lesquels manquent pour rétablir la situation mais ça c'est une autre histoire. A suivre donc.....


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#428 Le 27/04/2013, à 20:58

Ehcor8

Re : [Conky] Alternative à weather.com (3)

Bjr,
j'ai mis en partage conky system et Accuweather style jpdipsy.  Tous deux fonctionnent chez moi avec 13 04  32bits (j'ai installé aussi qques dépendances python 3 et bs4 mais je ne sais plus lesquelles), mais tjrs une seule mise à jour en initial. par contre se remet à jour avec
sh -c "~/Accuweather/start-recmeteo.sh"   ou guy-recmeteo
https://www.dropbox.com/sh/7pkh7es3xyjlmqf/xwSdmvzYTz

Hors ligne

#429 Le 27/04/2013, à 21:08

Didier-T

Re : [Conky] Alternative à weather.com (3)

Bonsoir à tous;
Je ne pourrais pas beaucoup aider pendant deux semaines (en conger dans l'hérault).
en ce qui concerne 13.04, j'ai vu qu'il avait adopté le noyau 3.8, hors depuis le 3.7 un peu de ménage a été fait (par exemple les 386 ne sont plus supportés).

je me demande si un retour en 3.4 du noyau ne réglerait pas beaucoup de soucis.
ljere, jpdipsy, pourriez-vous nous donner la version de vos noyaux.

@ Milou32,
pour ton souci de conky qui joue à cache-cache, modifie dans le conkyrc
ceci

own_window_type desktop

en ceci

own_window_type normal

sa devrait réglé ton souci.

Hors ligne

#430 Le 27/04/2013, à 21:31

ljere

Re : [Conky] Alternative à weather.com (3)

mon noyau est le dernier  3.8.0-19-generic


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#431 Le 27/04/2013, à 23:24

milou32

Re : [Conky] Alternative à weather.com (3)

Merci Didier, ça fonctionne

Hors ligne

#432 Le 28/04/2013, à 06:30

jpdipsy

Re : [Conky] Alternative à weather.com (3)

ljere a écrit :

mon noyau est le dernier  3.8.0-19-generic

tout pareil pour moi.

Hors ligne

#433 Le 28/04/2013, à 07:33

Didier-T

Re : [Conky] Alternative à weather.com (3)

jpdipsy a écrit :
ljere a écrit :

mon noyau est le dernier  3.8.0-19-generic

tout pareil pour moi.

mauvaise pioche, on finira par trouver

Hors ligne

#434 Le 28/04/2013, à 08:43

jpdipsy

Re : [Conky] Alternative à weather.com (3)

des news,des news,des news ....... (à l'origine c'est du blues pour ceusses qui aiment)

Bon ça s'éclairci.

Après une install de 12.10 suivie d'une mise à niveau vers 13.04 ,installation de mon pack en oubliant pas de lancer verif_dépendances.sh pour l'installation des lib python qui vont bien on se retrouve avec un recmeteo qui veut bien nous faire une mise à jour complète mais toujours pas de mise à jour partiel donc la solution que je donnais précédemment de modifier recmeteo en supprimant la boucle pour les mises à jour partielles et de lancer start-recmeteo.sh par cron fonctionne.
Je vais essayer dans la journée (vu le temps annoncé) de faire un script dédié 13.04  qui rendra le tout fonctionel.

un shoot shoot
à +

Hors ligne

#435 Le 28/04/2013, à 09:29

milou32

Re : [Conky] Alternative à weather.com (3)

Sniff.... Ce matin plus de mise à jour alors que tout marchait nickel jusqu'à maintenant

Hors ligne

#436 Le 29/04/2013, à 12:57

milou32

Re : [Conky] Alternative à weather.com (3)

Hier j'ai retéléchargé le pack de Didier-T, j'ai remplacé les fichiers .cfg, et .py (je l'avais fait il y a une semaine, je ne pense pas qu'il y ait eu des modifs depuis), et après un redémarrage de l'ordinateur, les mises à jour se font normalement big_smile

Dernière modification par milou32 (Le 29/04/2013, à 12:59)

Hors ligne

#437 Le 29/04/2013, à 17:01

franz256

Re : [Conky] Alternative à weather.com (3)

Bonjour à vous tous,

Une grande nouvelle : le pack meteo2.lua v1.08 fonctionne sous ubuntu 13.04 64 bits Gnome-shell 3.6.3.1 !
Comment ? C'est ce que je vais essayer de vous décrire explicitement.

1, installer python-beautifulsoup : sudo apt-get install python-beautifulsoup
installer python-urllib3 : sudo apt-get install python-urllib3
installer python3-urllib3 : sudo apt-get install python3-urllib3

2, éditer meteo2.lua et modifier comme ceci :

- ligne 25 ajouter %ù %û%Ù%Û dans local pat,
- lignes 732 et 733 remplacer recmeteo_python_2.py par recmeteo.py (faire un Menu > Rechercher et remplacer).
Enregistrer et quitter.

3, éditer et modifier recmeteo.py comme ceci :

- ligne vierge (7) ajouter : import urllib2
- ligne 8 changer : from urllib.request ... en from urllib2 ….comme ceci : from urllib2 import Request, urlopen
- ligne vierge (17) ajouter : from BeautifulSoup import BeautifulStoneSoup
- ligne vierge (18) ajouter : import sys
- ligne vierge (19) ajouter : reload(sys)
- ligne vierge (20) ajouter : sys.setdefaultencoding("utf-8")
Enregistrer et quitter

Et voilou. Lancer votre conky dans un terminal pour vérifier que cela fonctionne correctement.
J'espère avoir été clair et je me tiens à votre écoute pour vos tests.

Dernière modification par franz256 (Le 30/04/2013, à 08:35)


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#438 Le 29/04/2013, à 17:11

Didier-T

Re : [Conky] Alternative à weather.com (3)

merci franz256, si les retours de test sont positif (et je ne doute pas qu'ils le seront), je modifierai le pack de distribution dès mon retour de congé.

Hors ligne

#439 Le 29/04/2013, à 17:26

franz256

Re : [Conky] Alternative à weather.com (3)

Merci à toi Didier-T,
C'est grâce à toi que j'ai un conky fonctionnel sur mon bureau et ce depuis plusieurs années. En effet je suis tes pérégrinations depuis un certain temps déjà même si je ne me suis pas manifesté. Alors encore un grand merci à notre gourou.


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#440 Le 29/04/2013, à 18:26

jpdipsy

Re : [Conky] Alternative à weather.com (3)

franz256 a écrit :

Bonjour à vous tous,

Une grande nouvelle : le pack meteo2.lua v1.08 fonctionne sous ubuntu 13.04 64 bits Gnome-shell 3.6.3.1 !
Comment ? C'est ce que je vais essayer de vous décrire explicitement.

1, installer python-beautifulsoup : sudo apt-get install python-beautifulsoup
installer python-urllib3 : sudo apt-get install python-urllib3

2, éditer meteo2.lua et modifier comme ceci :

- ligne 25 ajouter %ù %û%Ù%Û dans local pat,
- lignes 732 et 733 remplacer recmeteo_python_2.py par recmeteo.py (faire un Menu > Rechercher et remplacer).
Enregistrer et quitter.

3, éditer et modifier recmeteo.py comme ceci :

- ligne vierge (7) ajouter : import urllib2
- ligne 8 changer : from urllib.request ... en from urllib2 ….
- ligne vierge (17) ajouter : from BeautifulSoup import BeautifulStoneSoup
- ligne vierge (18) ajouter : import sys
- ligne vierge (19) ajouter : reload(sys)
- ligne vierge (20) ajouter : sys.setdefaultencoding("utf-8")
Enregistrer et quitter

Et voilou. Lancer votre conky dans un terminal pour vérifier que cela fonctionne correctement.
J'espère avoir été clair et je me tiens à votre écoute pour vos tests.

Du coup à t'on encore besoin de bs4 ?

Ps : Heurement qu'ils y en a qui bossent lol

Hors ligne

#441 Le 30/04/2013, à 07:48

jpdipsy

Re : [Conky] Alternative à weather.com (3)

@franz256

tel que tu présentes la modif de recmeteo chez moi le lancement de recmeteo (py 3)  ne fonctionne pas
ImportError: No module named 'urllib2'

Donc après installation des librairies en version 3 de:
python3-urllib3 python3-bs4 et installation de python-beautifulsoup
modifications tel que

import urllib
from os import path, makedirs, system
from time import time, sleep, strftime, localtime
from re import search, compile, findall
from sys import argv
from gc import collect, get_objects
from bs4 import BeautifulSoup
from subprocess import Popen
from BeautifulSoup import BeautifulStoneSoup
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

recmeteo télécharge bien mais le traitement butte sur des problèmes d'encodage

File "/home/jp/Accuweather/scripts/recmeteo.py", line 271, in traitement
    texte_bu = td.text.replace("\n", "").replace(chr(160), "")
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa0 in position 0: invalid start byte

donc je vois pas comment ça peut fonctionner chez toi

edit : un truc qui m'énerve pas mal sur ubuntu 13.04 chez moi lorsque j'édite un script (avec gedit et geany lorsque ouvert à partir de Files ex:nautilus) si je lance le script dans un terminal l'éditeur se ferme à confirmer chez vous ?

Dernière modification par jpdipsy (Le 30/04/2013, à 08:03)

Hors ligne

#442 Le 30/04/2013, à 08:07

franz256

Re : [Conky] Alternative à weather.com (3)

Jpdipsy,

Je continue mes recherches.
1, A première vu il te manque la ligne 8 :  from urllib2 import Request, urlopen
2, D'après ce que j'ai compris (je ne connais pas python mais Php) c'est un problème ascii comme indiqué dans ton message (UnicodeDecodeError). J'ai remédié à ce détail en décommentant la ligne 271 : td=td.text.replace(" ", "").
3, Dans recmeteo.py il faut remplacer tous les chr(160) par &nbsp qui veut dire la même chose mais en Html.

Bonne journée à toi.:)


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#443 Le 30/04/2013, à 08:07

Didier-T

Re : [Conky] Alternative à weather.com (3)

Il me semble que le plus simple serait que franz256 colle ses scripts modifier sur la discussion.
d'autant que si je ne me trompe pas urllib2 n'existe que pour python2, et donc je suppose que le nom des scripts avaient été modifié par franz256.

A+

Hors ligne

#444 Le 30/04/2013, à 08:13

franz256

Re : [Conky] Alternative à weather.com (3)

Voici mes scripts :

recmeteo.py

#! /usr/bin/python3
# -*- coding: utf-8 -*-
# Par Didier-T Forum Ubuntu.fr
# Ajout notification par jpdipsy Forum Ubuntu.fr
# Ajout notification via DBus par ti_tux Forum Ubuntu.fr
# Ajout création repsauv si inexistant par jpdipsy Forum Ubuntu.fr

import urllib2
from urllib2 import Request, urlopen
from os import path, makedirs, system
from time import time, sleep, strftime, localtime
from re import search, compile, findall
from sys import argv
from gc import collect, get_objects
from bs4 import BeautifulSoup
from subprocess import Popen
from BeautifulSoup import BeautifulStoneSoup
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


Version='1.24'

homedir = path.expanduser('~')

#### initialisation des variables
adressWeb="http://www.accuweather.com/fr/fr/luneville/135044/weather-forecast/135044"
repsauv= "~/.conky/conky-meteo/meteo/repsauv"
huitHeures="oui"
nbFoisHuit=8
matin="oui"
apresmidi="oui"
soiree="oui"
nuit="oui"
nbJour=15
interval=30
notifi="non"
externe = None
Id = "sans"

for a in argv:
    if search("adressWeb=", a) is not None:
        adressWeb=compile("adressWeb=(.*)").search(a).group(1)
    if search("repsauv=", a) is not None:
        repsauv=compile("repsauv=(.*)").search(a).group(1)
    if search("huitHeures=", a) is not None:
        huitHeures=compile("huitHeures=(.*)").search(a).group(1)
    if search("nbJour=", a) is not None:
        nbJour=compile("nbJour=(.*)").search(a).group(1)
    if search("interval=", a) is not None:
        interval=compile("interval=(.*)").search(a).group(1)
    if search("notify=", a) is not None:
        notifi=compile("notify=(.*)").search(a).group(1)
    if search("matin=", a) is not None:
        matin=compile("matin=(.*)").search(a).group(1)
    if search("apresmidi=", a) is not None:
        apresmidi=compile("apresmidi=(.*)").search(a).group(1)
    if search("soiree=", a) is not None:
        soiree=compile("soiree=(.*)").search(a).group(1)
    if search("nuit=", a) is not None:
        nuit=compile("nuit=(.*)").search(a).group(1)
    if search("externe=", a) is not None:
        externe=compile("externe=(.*)").search(a).group(1)
    if search("nbFoisHuit=", a) is not None:
        nbFoisHuit=compile("nbFoisHuit=(.*)").search(a).group(1)
    if search("id=", a) is not None:
        Id=compile("id=(.*)").search(a).group(1)

nbJour=int(nbJour)
interval=int(interval)
repsauv=repsauv.replace("~", homedir)
notifi=str.lower(notifi)
huitHeures=str.lower(huitHeures)
nbFoisHuit=int(nbFoisHuit)
str.decode('utf-8')

#### fin initialisation des variables

#### Fonction de traitement des fichiers
def traitement(adress, fichier, repsauv):
#    fiche = open(fichier, "w")
    #pour debug
    current_balise=None
    x=1
    while current_balise is None:
#        user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Ubuntu/12.04 Chromium/18.0.1025.168 Chrome/18.0.1025.168 Safari/535.19'
#        url=Request(adress, headers={'User-Agent': user_agent})
#        currentCond=urlopen(url)
        d=Popen(['/usr/bin/wget', '-q', '-t', '10', '--random-wait', '-O', repsauv+'/page' ,adress])
        d.wait()
        d=Popen(['/bin/sed', '-i.bak', '2, /<!-- \/\.feed-tabs -->/d', repsauv+"/page"])
        d.wait()
        currentCond = open(repsauv+"/page", "r").read()
        currentCond1 = open(repsauv+"/page.bak", "r").read()
        soup = BeautifulSoup(currentCond)
        soup1 = BeautifulSoup(currentCond1)
#        currentCond.close()
        #si autres que huit heures
        table=soup.find_all('table')
        current_balise=soup.find(id="details")
        if current_balise is None:
            sleep(1)
            x=x+1
            print("problème de récupération de donées\n essais n°"+str(x)+"\npage : "+adress)
#    print(current_balise.prettify()+"\n")
    information="\n"
    if search("huitHeures", fichier) is None:
        # recherche vent
        divs=current_balise.select("[class~=wind-box-lg]")
        if len(divs) == 0:
            divs=current_balise.select("[class~=wind-box-sm]")
        i=0
        for div in divs:
            i=i+1
            ventd=compile("var d = '(.*)';").search(str(div)).group(1).replace("W", "O")
            ventf=compile("var s = '(.*)';").search(str(div)).group(1)
            information=information+"direction"+str(i)+": "+ventd+"\n"
            information=information+"vitesse"+str(i)+": "+ventf+"\n"
        #info dans l'image
        inf=current_balise.select("[class~=info]")
        icone=current_balise.select("[class~=icon]")
        i=0
        #recherche icone
        for ic in icone:
            i=i+1
            information=information+"icone"+str(i)+": "+str(ic).replace('<div class="icon i-', '').replace('"></div>', '')+"\n"
        i=0
        #récupération date + historique
        if search("Jour", fichier) is not None or search("CC", fichier) is not None:
            histo=soup.find(id="feature-history")
            #récupération date
            date=histo.find_all('th')
            jour=compile("(.*)/(.*)/(.*)").search(date[4].get_text())
            information=information+"jour: "+jour.group(1)+"\n"
            information=information+"mois: "+jour.group(2)+"\n"
            information=information+"année: "+str(int(jour.group(3))+1)+"\n"
            #récupération historique
            hi=histo.select("[class~=hi]")
            for v in hi:
                hivalue=v.get_text().split("\n")
            information=information+"maxjour: "+hivalue[2]+"\n"
            information=information+"maxnormal: "+hivalue[3]+"\n"
            information=information+"maxrecord: "+hivalue[4]+"\n"
            information=information+"max1ans: "+hivalue[5]+"\n"
            lo=histo.select("[class~=last]")
            for v in lo:
                lovalue=v.get_text().split("\n")
            information=information+"minjour: "+lovalue[2]+"\n"
            information=information+"minnormal: "+lovalue[3]+"\n"
            information=information+"minrecord: "+lovalue[4]+"\n"
            information=information+"min1ans: "+lovalue[5]+"\n"
            #info dans l'image
            if search("Jour", fichier) is not None:
                infs=inf[0].get_text().split("\n")
                information=information+"Tempjour: "+findall('-?\d+', infs[0])[0]+"\n"
                information=information+"RealFeeljour: "+findall('-?\d+', infs[1])[0]+"\n"
                information=information+"Précipitationsjour: "+findall('-?\d+', infs[2])[0]+"\n"
                infs=inf[1].get_text().split("\n")
                information=information+"Tempnuit: "+findall('-?\d+', infs[0])[0]+"\n"
                information=information+"RealFeelnuit: "+findall('-?\d+', infs[1])[0]+"\n"
                information=information+"Précipitationsnuit: "+findall('-?\d+', infs[2])[0]+"\n"
                lever_coucher=soup.select("[class~=time-period]")
                i=0
                for p in lever_coucher:
                    spans=p.find_all('span')
                    i=i+1
                    x=0
                    for span in spans:
                        if i == 1:
                            span_nom="Soleil "
                        else:
                            span_nom="Lune "
                        if search('start', str(span)) is not None:
                            information=information+span_nom+"lever: "+span.get_text()+"\n"
                        if search('time', str(span)) is not None:
                            information=information+span_nom+"durée: "+span.get_text()+"\n"
                        if search('finish', str(span)) is not None:
                            information=information+span_nom+"coucher: "+span.get_text()+"\n"


            p=current_balise.find_all('p')
            i=0
            x=0
            for pv in p:
                i=i+1
                if i==5 or i==10:
                    x=x+1
                    information=information+"cond"+str(x)+": "+pv.get_text()+"\n"


        #localisation si condition courante
        if search("CC", fichier) is not None:
            ville=soup1.select("[class~=current-city]")[0].get_text().split(",")[0]
            longi=compile("lon: '(.*)',").search(str(soup1)).group(1)
            lat=compile("lat: '(.*)',").search(str(soup1)).group(1)
            information=information+"ville: "+ville+"\n"
            information=information+"lat: "+lat+"\n"
            information=information+"long: "+longi+"\n"
            #info alerte
            alerte=soup.select("[class~=forecast-status]")
            if str(alerte) != "[]":
                p=alerte[0].find_all('p')
                a=p[0].find_all('a')
                clic=a[0].get_text()
                information=information+"alerte: "+p[0].get_text().replace(clic, "").replace("\n","").replace("\r", "").replace("&nbsp", "").rstrip().lstrip()+"\n"
            else:
                information=information+"alerte: RAS\n"
            #info dans l'image
            inf=inf[0].get_text()
            cond=inf[:inf.find(findall('-?\d+', inf)[0])]
            inf=inf.replace(cond, "")
            infs=inf.split(" ")
            information=information+"cond:"+cond+"\n"
            information=information+"Temp: "+infs[0]+"\n"
            information=information+"RealFeel: "+infs[2]+"\n"

        if search("Matin", fichier) is not None or search("AM", fichier) is not None or search("Soiree", fichier) is not None or search("Nuit", fichier) is not None:
            infs=inf[0].get_text().split("\n")
            i=0
            infsc=["","","",""]
            for inf in infs:
                if inf!="":
                    infsc[i]=inf
                    i=i+1
            information=information+"cond:"+infsc[0]+"\n"
            information=information+"max: "+infsc[1]+"\n"
            information=information+"min: "+infsc[2].replace("Mn ", "")+"\n"
            information=information+"RealFeelmax: "+findall('-?\d+', infsc[3])[0]+"\n"
            information=information+"RealFeelmin: "+findall('-?\d+', infsc[3])[1]+"\n"
            
            #info conditions générales
            cc=current_balise.find_all('li')
            for inf in cc:
                inf=inf.get_text()
                inf=inf.replace(compile('^ *').search(inf).group(0), "").replace("\n", "")
                if search(":", inf) is not None:
                    information=information+inf+"\n"
        elif search("Jour", fichier) is not None:
            i=0
            cc=current_balise.find_all('li')
            for inf in cc:
                inf=inf.get_text()
                inf=inf.lstrip().replace("\n", "").replace(" \r", "")
                if search(": ", inf) is not None:
                    i=i+1
                    if i <= 7:
                        inf=inf.replace(":", " jour:")
                    else:
                        inf=inf.replace(":", " nuit:")
                    information=information+inf+"\n"
        else:
            cc=current_balise.find_all('li')
            for inf in cc:
                inf=inf.get_text()
                inf=inf.replace(compile('^ *').search(inf).group(0), "").replace("\n", "")
                if search(":", inf) is not None:
                    information=information+inf+"\n"
            information=information+str(int(time()))+"\n"
    else:
        #recherche icones huit heures
        rows = table[0].findAll('tr')
        x=0
        for tr in rows:
            cols = tr.findAll('td')
            texte_tr=tr.text.split("\n")[1].replace("\n", "")
            i=0
            for td in cols:
                i=i+1
                td=td.text.replace("&nbsp;", "")
                texte_bu = td
                if texte_bu != "" :
                    if texte_tr == " " and x < len(cols):
                        information=information+"Heure"+str(i)+": "+texte_bu+"\n"
                        x=x+1
                    elif texte_tr != " ":
                        information=information+texte_tr+str(i)+": "+texte_bu+"\n"
        icone=table[0].find_all('div')
        i=0
        for ic in icone:
            i=i+1
            ico="icone"+str(i)+": "+str(ic).replace('<div class="icon i-', '')
            fin=compile('">(.*)div>').search(ico).group(1)
            information=information+ico.replace('">'+fin+'div>', '')+"\n"
            if i == 8:
                break
    fiche = open(fichier, "w")
#    fiche.write(current_balise.prettify())
    fiche.write(information)
    fiche.close()
    collect()
#### fin Fonction de traitement des fichiers

#### Mise en tache de fond
def demonise(ent, id1, id2, huitHeures, nbJour, interval, nbFoisHuit, Id):
    dem=time()-(60*60)
    misajour=1
    while 1 :
        heure=time()
        if huitHeures=="oui":
            x=0
            while x<nbFoisHuit:
                h=(x*8)+int(strftime('%H', localtime()))
                x=x+1
                traitement(ent+nb1+'/hourly-weather-forecast/'+nb2+'?hour='+str(h), repsauv+"/huitHeures"+str(x), repsauv)
                print("huitHeures "+str(x)+" Ok")
        if heure-dem >= 60*60:
            x=0
            while x<nbJour:
                x=x+1
                traitement(ent+nb1+'/daily-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Jour"+str(x), repsauv)
                print("Jour "+str(x)+" Ok")
                if matin=="oui":
                    traitement(ent+nb1+'/morning-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Matin"+str(x), repsauv)
                    print("Matin "+str(x)+" Ok")
                if apresmidi=="oui":
                    traitement(ent+nb1+'/afternoon-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/AM"+str(x), repsauv)
                    print("AM "+str(x)+" Ok")
                if soiree=="oui":
                    traitement(ent+nb1+'/evening-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Soiree"+str(x), repsauv)
                    print("Soiree "+str(x)+" Ok")
                if nuit=="oui":
                    traitement(ent+nb1+'/overnight-weather-forecast/'+nb2+"?day="+str(x), repsauv+"/Nuit"+str(x), repsauv)
                    print("Nuit "+str(x)+" Ok")
            dem=heure
        traitement(ent+nb1+'/current-weather/'+nb2, repsauv+"/CC", repsauv)
        print("CC Ok")
        if externe is not None:
                 system(externe)
        fin=time()
        duree=fin-heure
        if notifi == "oui":
            if heure-dem == 0:
                mess=notify2.Notification('Recmeteo.py  v'+Version, 'Météo : mise à jour complète terminée\n en '+str(round(duree,2))+' secondes', 'dialog-information')
            else:
                mess=notify2.Notification('Recmeteo.py  v'+Version, 'Météo : mise à jour partielle terminée\n en '+str(round(duree,2))+' secondes', 'dialog-information')
            mess.show()
        start=heure
        pause=60*interval-int(duree)
        if pause < 0:
            pause=interval
        print("mise a jour en : "+str(duree))
        collect()
        sleep(pause)
        if Id != "sans":
            if not path.exists("/proc/"+Id):
                exit()


### Initialiation de DBus pour les notifications
if notifi == "oui":
    import notify2
    notify2.init('Recmeteo.py')
### Vérification répertoire
if not path.exists(repsauv):
    makedirs(repsauv)
#### Lancement du script et initialisation de la tache de fond
nb1=findall('\d+', adressWeb)[0]
nb2=findall('\d+', adressWeb)[1]
ent=adressWeb[:adressWeb.find(nb1)]
fin=adressWeb.replace(ent+nb1, "")
fin=fin.replace(fin[:fin.find(nb2)]+nb2, "")
nb2=nb2+fin
print("Version =", Version)
demonise(ent, nb1, nb2, huitHeures, nbJour, interval, nbFoisHuit, Id)

et meteo2.lua

-- Créé par Didier-T (forum.ubuntu-fr.org)
-- Nécessite imagemagick http://apt.ubuntu.com/p/imagemagick
-- Nécessite Curl
-- utilise recmeteo.py


require "io"
require "os"
require "cairo"

local Version = "v1.08"
local conditionJour = {}
local conditionNuit = {}
local conditionMatin = {}
local conditionAM = {}
local conditionSoiree = {}
local conditionNoct = {}
local InfoJour = {}
local conditioncourante = {}
local huitHeures = {}
local Rep, cmd, jours, matin, apresmidi, soiree, nuit, delais, r, repsauv, l, fichier_init, MAJ, tc, dermodif, VilleAdresse, start, cmd1, ID
local Debug = "Problème Info "
local home = os.getenv("HOME")
--Liste des accents et carractère non pris en charge par les patterns
local pat="%é%è%à%ä%â%ê%ô%ç%ù%û%É%È%À%Â%Ä%Ê%Ô%Ç%Ù%Û'"


--Trouve ID
function Get_ID()
	local proc, ret
	proc=io.open("/proc/self/stat", "r")
	ret=proc:read():match("%d*")
	return ret
end

--Francisation alerte
function fran_alerte(d)
	if d:match("(attendue)") ~= nil and d:match("(entre)") ~= nil then
		d = d:gsub("entre", "au")
		d = d:gsub("attendue ", "attendue du "):gsub("attendues ", "attendues du ")
	end
	if d:match("(On s'attend à de la)") ~= nil and d:match("(entre)") ~= nil then
		d = d:gsub("entre", "et")
	end
	if d:match("(depuis)") ~= nil and d:match("(dans)") ~= nil then
		d = d:gsub("depuis", "à partir de"):gsub("jusqu'à")
	end
	
    d = d:gsub("depuis","à partir de"):gsub("tard la", "tard dans la"):gsub("lorsqu'elle deviendra de la", "se transformant en"):gsub("lorsqu'elle", "puis"):gsub("et s'accumulera de", "de"):gsub("avant de finir", "jusqu'à"):gsub("la nuit du", "dans la nuit de")
    
    return d
end

--Traduction date
function trad_date(d)
	local date = d
	date = date:gsub("Monday", "Lundi"):gsub("Tuesday", "Mardi"):gsub("Wednesday", "Mercredi"):gsub("Thursday", "Jeudi"):gsub("Friday", "Vendredi"):gsub("Saturday", "Samedi"):gsub("Sunday", "Dimanche")

	date = date:gsub("lun", "Lun"):gsub("mar", "Mar"):gsub("mer", "Mer"):gsub("jeu", "Jeu"):gsub("ven", "Ven"):gsub("sam", "Sam"):gsub("dim", "Dim")

	date = date:gsub("Mon", "Lun"):gsub("Tue", "Mar"):gsub("Wed", "Mer"):gsub("Thu", "Jeu"):gsub("Fri", "Ven"):gsub("Sat", "Sam"):gsub("Sun", "Dim")
	
	date = date:gsub("January", "Janvier"):gsub("February", "Février"):gsub("March", "Mars"):gsub("April", "Avril"):gsub("May", "Mai"):gsub("June", "Juin"):gsub("July", "Juillet"):gsub("August", "Août"):gsub("September", "Septembre"):gsub("October", "Octobre"):gsub("November", "Novembre"):gsub("December", "Décembre")

	date = date:gsub("jan", "Jan"):gsub("fev", "Fév"):gsub("mar", "Mar"):gsub("avr", "Avr"):gsub("mai", "Mai"):gsub("jui", "Jui"):gsub("aou", "Aoû"):gsub("sep", "Sep"):gsub("oct", "Oct"):gsub("nov", "Nov"):gsub("dec", "Déc")
	
	date = date:gsub("Feb", "Fév"):gsub("Apr", "Avr"):gsub("May", "Mai"):gsub("Jun", "Juin"):gsub("Jul", "Juil"):gsub("Aug", "Aoû"):gsub("Dec", "Déc")
		
	return date
end

--Vérifier l'existence d'un fichier
function existe(file) 
  local a = io.open(file, "r")
  local present
  if a then
    present = true
    io.close(a)
  else
    present = false
  end
  return present
end

--Formatage des pages web
function string.formatage(ligne)
ligne = ligne:gsub("&#244;", "ô"):gsub("&#226;", "â"):gsub("&#233;", "é"):gsub("&#232;", "è"):gsub("&#224;", "à"):gsub("&#231;", "ç"):gsub("&#234;", "ê"):gsub("&#246;", "ö"):gsub("&#238;", "î"):gsub("&#239;", "ï"):gsub("&#251;", "û"):gsub("&#252;", "ü"):gsub("&#39;", "'"):gsub("Poudreries", "Bourrasques de neige"):gsub("&#201;", "É"):gsub("&#176;",""):gsub("[\n\r]",""):gsub("&eacute;", "é")
return ligne
end

--Infos lunaison
function lunaison(r)
	local s, web, Lune
	
	web="http://www.calendrier-lunaire.net/"

	f=assert(io.popen("curl --max-time 60 --retry 3 --silent '"..web.."' | grep -A53 'ephemerides\"' | sed 's/%//g'"))
	line=f:read()
	i=0
	for line in f:lines() do
		i=i+1
		if i==3 then
			icone=line:match("src=\"([%w%p]*)\"")
		elseif i==7 then
			ephemerides1, ephemerides2=line:formatage():match(">(%a*)</span> (%a*)<")
		elseif i==11 then
			Visibilite=line:match("\">([%d%p]*) <")
		elseif i==12 then
			Phases, Phases1, Phases2=line:formatage():match("\">(([%a%p%d"..pat.."]*),%s*([%a%p%d"..pat.."]*))</s")
		elseif i==13 then
			Noeud_lunaire=line:match("\">([%a%d%p%s]*)</s")
		elseif i==14 then
			Apogee=line:match("\">([%a%d%p%s]*)</s")
		elseif i==15 then
			Perigee=line:match("\">([%a%d%p%s]*)</s")
		elseif i==16 then
			Distance=line:match("\">(%d*) %a*</s")
		elseif i==18 then
			Age=line:match("\">([%a%d%s]*)</")
		elseif i==19 then
			Lever_LuneHeure, Lever_LuneMinute, Coucher_LuneHeure, Coucher_LuneMinute=line:match("\">([%d%p]*):([%d%p]*)</span>[%a%p%s]*;\">([%d%p]*):([%d%p]*)</")
		elseif i==48 then
			Eclipse_partielle=line:match("\">([%w%s]* <br /> [%d%p]*)</a>")
		elseif i==49 then
			Eclipse_total=line:match("\">([%w%s]* <br /> [%d%p]*)</a>")
		end
	end
	f:close()	if Noeud_lunaire:match("(%d+)") ~= nil then Noeud_lunaire = Noeud_lunaire:match("(%d+)") end

	if Apogee:match("(%d+)") ~= nil then Apogee = Apogee:match("(%d+)") end
	if Perigee:match("(%d+)") ~= nil then Perigee = Perigee:match("(%d+)") end
	ephemerides = ephemerides1.." "..ephemerides2	
	Eclipse_partielle = datelune(Eclipse_partielle)
	Eclipse_total = datelune(Eclipse_total)
	s = "${exec wget --tries=3 -q -O "..r.."/lune.png http://www.calendrier-lunaire.net/"..icone.."}"
	conky_parse( s )
	conky_parse( "${exec convert "..r.."/lune.png -transparent '#091a2a' "..r.."/lune.png}" )

end

function datelune(d)
	local j, m, a, h, min = d:gsub("Janvier", "01"):gsub("Février", "02"):gsub("Mars", "03"):gsub("Avril", "04"):gsub("Mais", "05"):gsub("Juin", "06"):gsub("Juillet", "07"):gsub("Août", "08"):gsub("septembre", "09"):gsub("Octobre", "10"):gsub("Novembre", "11"):gsub("Décembre", "12"):match("(%d+) (%d+) (%d+) <br /> (%d+):(%d+)")
	d = os.time{year=a, month=m, day=j, hour=h, min=min}

	return d
	
end


--Détermine icône vent
function direction_vent(i)

	if i == "Calme" then
		return 0
	elseif i == "N" then
		return 10
	elseif i == "NNE" then
		return 11
	elseif i == "NE" then
		return 12
	elseif i == "ENE" then
		return 13
	elseif i == "E" then
		return 14
	elseif i == "ESE" then
		return 15
	elseif i == "SE" then
		return 16
	elseif i == "SSE" then
		return 17
	elseif i == "S" then
		return 2
	elseif i == "SSO" then
		return 3
	elseif i == "SO" then
		return 4
	elseif i == "OSO" then
		return 5
	elseif i == "O" then
		return 6
	elseif i == "ONO" then
		return 7
	elseif i == "NO" then
		return 8
	elseif i == "NNO" then
		return 9
	else
		return 1
	end

end


--Renvoi vent direction pleine en toute lettre
function vent_plein(d)

	local b

	if string.len(d) == 1 then
		if string.find(d, "N") ~= nil then 
			b = string.gsub(d, "N", "Nord") 
		elseif string.find(d, "S") ~= nil then 
			b = string.gsub(d, "S", "Sud") 
		elseif string.find(d, "E") ~= nil then
			b = string.gsub(d, "E", "Est") 
		elseif string.find(d, "O") ~= nil then
			b = string.gsub(d, "O", "Ouest")
		end
	else
		b = d
	end

	return b

end


--Détermine l'icône vent en tenant conte de la force du vent
function icone_vent(d, fo)

	local f = tonumber(fo)
	local n

	if f <= Palier then
		n = d
	elseif f <= Palier*2 then
		n = d + 17
	elseif f <= Palier*3 then
		n = d + 34
	elseif f >= (Palier*3)+1 then
		n = d + 51
	end

	if n <= 9 then 
		n = "0"..n
	end

	return n

end


--Découpage descriptions sur deux lignes
function decoupage(d)

	local l1, l2, n, p1, p2, n1, n2, l1b, l2b, dm, dp
	if string.len(d) >= 22 then
		n = math.ceil(string.len(d)/2)
		dm = string.sub(d, 1, n)
		dp = string.sub(d, n)
		p1 = string.find(dp, " ")
		local b = 1
		p2 = nil
		if string.find(dm, ' ') then
			while p2 == nil do
				b = b+1
				p2 = string.find(dm, ' ', -b)
			end
		end
		if p1 ~= nil then p1 = n+p1-1 end
		
		if p1 == nil and p2 == nil then p1 = string.find(d, " ") end
		if p2 == nil then p2 = p1 end
		if p1 == nil then p1 = p2 end
		if p1-n >= n-p2 then
			l1b = string.sub(d, 1, p2-1)
			l2b = string.sub(d, p2+1)
		else
			l1b = string.sub(d, 1, p1-1)
			l2b = string.sub(d, p1+1)
		end
	else
		l1b = d
		l2b = " "
	end
	n1 = math.ceil((22 - string.len(l1b))/2)
	l1 = string.rep(" ", n1)..l1b 
	n2 = math.ceil((22 - string.len(l2b))/2)
	l2 = string.rep(" ", n2)..l2b 

--Retour information avec espaces ligne 1 & 2 et sans espaces ligne 1 & 2
	return l1, l2, l1b, l2b

end


--initialisation paramètres
function conky_init(cfg)

	local pos1
	
	cfg = string.gsub(cfg, "~", home)
	cfg = string.gsub(cfg, "$HOME", home)
	fichier_init = cfg
	
	local file = assert(io.open(cfg, "rb") )
	local line = file:read()
	for line in file:lines() do
		pos1 = string.find(line, '#')
		if pos1 ~= nil then
			line = string.sub(line, 1, pos1-1)
		end
		pos1 = string.find(line, '=')
		if string.find(line, 'repsauv=') ~= nil then
			repsauv = string.sub(line, pos1+1)
		elseif string.find(line, 'TempShell=') ~= nil then
			r = string.sub(line, pos1+1)
		elseif string.find(line, 'repscript=') ~= nil then
			repscript = string.sub(line, pos1+1)
		elseif string.find(line, 'web=') ~= nil then
			cmd1 = string.sub(line, pos1+1)
		elseif string.find(line, 'periode=') ~= nil then
			jours = string.sub(line, pos1+1)
		elseif string.find(line, 'matinée=') ~= nil then
			matin = string.sub(line, pos1+1)
		elseif string.find(line, 'am=') ~= nil then
			apresmidi = string.sub(line, pos1+1)
		elseif string.find(line, 'soiree=') ~= nil then
			soiree = string.sub(line, pos1+1)
		elseif string.find(line, 'nuit=') ~= nil then
			nuit = string.sub(line, pos1+1)
		elseif string.find(line, 'Prev8heures=') ~= nil then
			huit = string.sub(line, pos1+1)
		elseif string.find(line, 'Palier=') ~= nil then
			Palier = tonumber(string.sub(line, pos1+1))
		elseif string.find(line, 'update=') ~= nil then
			delais = string.sub(line, pos1+1)
		elseif string.find(line, 'notify=') ~= nil then
			notify = string.sub(line, pos1+1)
		elseif string.find(line, 'nbFoisHuit=') ~= nil then
			nbFoisHuit = string.sub(line, pos1+1)
		end
	end
	io.close(file)	
	ID = Get_ID()
	r = r:gsub("~", home):gsub("$HOME", home)
	repsauv = repsauv:gsub("~", home):gsub("$HOME", home)
	repscript = repscript:gsub("~", home):gsub("$HOME", home)
	
print("", "version = "..Version.."\n", "web = "..cmd1.."\n", "Pévision Nb jours = "..jours.."\n", "Pévision Matin = "..matin.."\n", "Pévision Après Midi = "..apresmidi.."\n", "Pévision Soirée = "..soiree.."\n", "Pévision Nuit = "..nuit.."\n","Prévision sur 8 heures = "..huit.."\n","nbFoisHuit= "..nbFoisHuit.."\n", "Délais = "..delais.."\n", "Chemin de travail = "..r.."\n","Palier = "..Palier.."\n", "Chemin de sauvegarde = "..repsauv.."\n", "Chemin script = "..repscript.."\n", "Notification = "..notify.."\n", "ID = "..ID)

--Création répertoire de travail
	cmd, l = cmd1:match("([%a%p%d]*)/[%a%p]*/([%d%p%a]*)")
	l1 = cmd:match("[%a%p]*/(%a*)/%d*")

	Rep = r.."/"..l1.."/"..l
	if os.execute("cd "..Rep) ~= 0 then
		os.execute("mkdir "..r.."/"..l1.."&& mkdir "..Rep)
	end
	
--initialisation compteurs
	t = os.time()-delais
	tc = t
	start = 1
	
--Vérification existence repsauv

	if os.execute("cd "..repsauv) ~= 0 then
--création de repsauv si inexistant
		local pos1 = 1
		local chemin = nil
		local cheminsup = nil
		while pos1 ~= nil do
			pos1 = string.find(repsauv, '/', pos1+1)
			if pos1 ~= nil then
				cheminsup = string.sub(repsauv, pos1)
				chemin = string.gsub(repsauv, cheminsup, "")
			else
				cheminsup = ""
				chemin = repsauv
			end
			if os.execute("cd "..chemin) ~= 0 then
				os.execute("mkdir "..chemin)
			end
		end
	end
	
	start=1
		
	MAJ ="0"
	
end

--Mise à jour météo
function conky_Meteo_Maj()

	local s = '${if_gw}${lua conky_Meteo_enligne}${else}${lua conky_Meteo_horsligne}${endif}'
	conky_parse( s )
	return " "
end

--hors ligne récupération de données
function conky_Meteo_horsligne()
	local value
	if dermodif2 == nil or dermodif2 ~= conky_parse("${exec date -r "..repsauv.."/CC '+%s'}") then
		dermodif2=conky_parse("${exec date -r "..repsauv.."/CC '+%s'}")
--Récupération dernière condition courante
		local file = assert(io.open(repsauv.."/CC", "r") )
		local line = file:read()
		local i = 0
		local donee = {}
		for line in file:lines() do
			i = i+1
			donee[i] = line
		end
		io.close(file)
		local t = {"VentDir", "VentForce", "Icone", "DateJour", "DateMois", "DateAnnee", "HistoMaxJour", "HistoMaxNormalJour", "HistoMaxRecordJour", "HistoMax1Ans", "HistoMinJour", "HistoMinNormalJour", "HistoMinRecordJour", "HistoMin1Ans", "Ville", "latitude", "longitude", "Alerte", "Cond", "Temp", "Tempr", "Humidite", "Pression", "Uv", "CouvNuage", "Ceiling", "PointRosee", "Visibilite"}
		i=0
		for i = 1,table.getn(t) do
			donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
			value=donee[i]:match("(%d*)")
			if value ~= "" then
				donee[i] = value
			end
			conditioncourante[t[i]] = donee[i]
		end
--Récupération de l'heure de mise a jour
		time = donee[table.getn(t)+1]
		conditioncourante.Date = os.time{year=conditioncourante.DateAnnee, month=conditioncourante.DateMois, day=conditioncourante.DateJour, hour=0}
--Traitement condition courrante
		if conditioncourante.VentDir == "CLM" then
			conditioncourante.VentDir = "Calme"
			conditioncourante.VentForce = "0"
		end
		conditioncourante.Alerte = fran_alerte(conditioncourante.Alerte)
		conditioncourante.VentIcone = icone_vent(direction_vent(conditioncourante.VentDir), conditioncourante.VentForce)
		conditioncourante.VentPlein = vent_plein(conditioncourante.VentDir)
		conditioncourante.CondMeteo1, conditioncourante.CondMeteo2, conditioncourante.CondMeteo1se, conditioncourante.CondMeteo2se = decoupage(conditioncourante.Cond)
		conditioncourante.Alerte1, conditioncourante.Alerte2, conditioncourante.Alerte1se, conditioncourante.Alerte2se = decoupage(conditioncourante.Alerte)
		print("Condition courante Ok")
		
--Récupération prévision
		
		for j = 1,jours do
			local file = assert(io.open(repsauv.."/Jour"..j, "r"))
			local line = file:read()
			local i = 0
			local donee = {}
			for line in file:lines() do
				i = i+1
				donee[i] = line
			end
			io.close(file)
			local infojournee = {}
			local t = {"VentDirJour", "VentForceJour", "VentDirNuit", "VentForceNuit", "IconeJour", "IconeNuit", "DateJour", "DateMois", "DateAnnee", "HistoMaxJour", "HistoMaxNormalJour", "HistoMaxRecordJour", "HistoMax1Ans", "HistoMinJour", "HistoMinNormalJour", "HistoMinRecordJour", "HistoMin1Ans", "TempJour", "RealFeelJour", "ProbPrecJour", "TempNuit", "RealFeelNuit", "ProbPrecNuit", "SoleilLever", "SoleilDuree", "SoleilCoucher", "LuneLever", "LuneDuree", "LuneCoucher", "CondMeteoJour", "CondMeteoNuit", "VentRafalesJour", "UvJour", "ProbOrageJour", "NivPrecJour", "QPluieJour", "QNeigeJour", "EVerglasJour", "VentRafalesNuit", "UvNuit", "ProbOrageNuit", "NivPrecNuit", "QPluieNuit", "QNeigeNuit", "EVerglasNuit"}
			i=0
			for i = 1,table.getn(t) do
				donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
				if donee[i]:find(":") == nil then
					value=donee[i]:match("(%d*)")
					if value ~= "" then
						donee[i] = value
					end
				end
				infojournee[t[i]] = donee[i]
			end

--Trie des infos
			local info = {}
			local y ={"VentDirJour", "VentForceJour", "IconeJour", "TempJour", "RealFeelJour", "ProbPrecJour", "CondMeteoJour", "VentRafalesJour", "UvJour", "ProbOrageJour", "NivPrecJour", "QPluieJour", "QNeigeJour", "EVerglasJour"}
			local t = {"VentDir", "VentForce", "Icone", "Temp", "TempRes", "ProbPrec", "CondMeteo", "VentRafales", "Uv", "ProbOrage", "NivPrec", "QPluie", "QNeige", "EVerglas"}
			conditionJour[j] = {}
			i=0
			for i = 1, table.getn(t) do
				info[t[i]] = infojournee[y[i]]
			end
			conditionJour[j] = info
			local info1 = {}
			local y = {"VentDirNuit", "VentForceNuit", "IconeNuit", "TempNuit", "RealFeelNuit", "ProbPrecNuit", "CondMeteoNuit", "VentRafalesNuit", "UvNuit", "ProbOrageNuit", "NivPrecNuit", "QPluieNuit", "QNeigeNuit", "EVerglasNuit"}
			local t = {"VentDir", "VentForce", "Icone", "Temp", "TempRes", "ProbPrec", "CondMeteo", "VentRafales", "Uv", "ProbOrage", "NivPrec", "QPluie", "QNeige", "EVerglas"}
			conditionNuit[j] = {}
			i=0
			for i = 1, table.getn(t) do
				info1[t[i]] = infojournee[y[i]]
			end
			conditionNuit[j] = info1
			local info2 = {}
			
			InfoJour[j] = {}
			InfoJour[j].Jour = os.time{year=infojournee.DateAnnee, month=infojournee.DateMois, day=infojournee.DateJour, hour=0}
			InfoJour[j].LeverSoleilH, InfoJour[j].LeverSoleilM = infojournee.SoleilLever:match("(%d*):(%d*)")
			InfoJour[j].CoucherSoleilH, InfoJour[j].CoucherSoleilM = infojournee.SoleilCoucher:match("(%d*):(%d*)")
			InfoJour[j].Histo_Max =infojournee.HistoMax1Ans
			InfoJour[j].Histo_Min =infojournee.HistoMin1Ans

--Traitement condition courrante
			if conditionJour[j].VentDir == "CLM" then
				conditionJour[j].VentDir = "Calme"
				conditionJour[j].VentForce = "0"
			end
			conditionJour[j].VentIcone = icone_vent(direction_vent(conditionJour[j].VentDir), conditionJour[j].VentForce)
			conditionJour[j].RafalesIcone = icone_vent(direction_vent(conditionJour[j].VentDir), conditionJour[j].VentRafales)
			conditionJour[j].VentP = vent_plein(conditionJour[j].VentDir)
			conditionJour[j].CondMeteo1, conditionJour[j].CondMeteo2, conditionJour[j].CondMeteo1se, conditionJour[j].CondMeteo2se = decoupage(conditionJour[j].CondMeteo)
			if conditionNuit[j].VentDir == "Calme" then
				conditionNuit[j].VentForce = "0"
			end
			conditionNuit[j].VentIcone = icone_vent(direction_vent(conditionNuit[j].VentDir), conditionNuit[j].VentForce)
			conditionNuit[j].RafalesIcone = icone_vent(direction_vent(conditionNuit[j].VentDir), conditionNuit[j].VentRafales)
			conditionNuit[j].VentP = vent_plein(conditionNuit[j].VentDir)
			conditionNuit[j].CondMeteo1, conditionNuit[j].CondMeteo2, conditionNuit[j].CondMeteo1se, conditionNuit[j].CondMeteo2se = decoupage(conditionNuit[j].CondMeteo)
			print("Prévision "..j.." Ok")
			
--Récupération quart de journée		
			local t = {"VentDir", "VentForce", "Icone", "CondMeteo", "TempMax", "TempMin", "TempMaxR", "TempMinR", "ProbPrec", "QPluie", "QNeige", "Humidite", "CouvNuage", "PointRosee", "Visibilite"}
			if matin == "oui" then
				local file = assert(io.open(repsauv.."/Matin"..j, "r"))
				local line = file:read()
				local i = 0
				local donee = {}
				for line in file:lines() do
					i = i+1
					donee[i] = line
				end
				conditionMatin[j] = {}
				local info3 = {}
				for i = 1,table.getn(t) do
					donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
					value=donee[i]:match("(%d*)")
					if value ~= "" then
						donee[i] = value
					end
					info3[t[i]] = donee[i]
				end
				conditionMatin[j] = info3
				io.close(file)
				if conditionMatin[j].VentDir == "CLM" then
					conditionMatin[j].VentDir = "Calme"
					conditionMatin[j].VentForce = "0"
				end
				conditionMatin[j].VentIcone = icone_vent(direction_vent(conditionMatin[j].VentDir), conditionMatin[j].VentForce)
				conditionMatin[j].VentP = vent_plein(conditionMatin[j].VentDir)
				conditionMatin[j].CondMeteo1, conditionMatin[j].CondMeteo2, conditionMatin[j].CondMeteo1se, conditionMatin[j].CondMeteo2se = decoupage(conditionMatin[j].CondMeteo)
				print("Matin "..j.." Ok")
			end

			
			if apresmidi == "oui" then
				local file = assert(io.open(repsauv.."/AM"..j, "r"))
				local line = file:read()
				local i = 0
				local donee = {}
				for line in file:lines() do
					i = i+1
					donee[i] = line
				end
				conditionAM[j] = {}
				local info3 = {}
				for i = 1,table.getn(t) do
					donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
					value=donee[i]:match("(%d*)")
					if value ~= "" then
						donee[i] = value
					end
					info3[t[i]] = donee[i]
				end
				conditionAM[j] = info3
				io.close(file)
				if conditionAM[j].VentDir == "CLM" then
					conditionAM[j].VentDir = "Calme"
					conditionAM[j].VentForce = "0"
				end
				conditionAM[j].VentIcone = icone_vent(direction_vent(conditionAM[j].VentDir), conditionAM[j].VentForce)
				conditionAM[j].VentP = vent_plein(conditionAM[j].VentDir)
				conditionAM[j].CondMeteo1, conditionAM[j].CondMeteo2, conditionAM[j].CondMeteo1se, conditionAM[j].CondMeteo2se = decoupage(conditionAM[j].CondMeteo)
				print("Apres Midi "..j.." Ok")
			end

			
			if soiree == "oui" then
				local file = assert(io.open(repsauv.."/Soiree"..j, "r"))
				local line = file:read()
				local i = 0
				local donee = {}
				for line in file:lines() do
					i = i+1
					donee[i] = line
				end
				io.close(file)
				conditionSoiree[j] = {}
				local info3 = {}
				for i = 1,table.getn(t) do
					donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
					value=donee[i]:match("(%d*)")
					if value ~= "" then
						donee[i] = value
					end
					info3[t[i]] = donee[i]
				end
				conditionSoiree[j] = info3
				if conditionSoiree[j].VentDir == "CLM" then
					conditionSoiree[j].VentDir = "Calme"
					conditionSoiree[j].VentForce = "0"
				end
				conditionSoiree[j].VentIcone = icone_vent(direction_vent(conditionSoiree[j].VentDir), conditionSoiree[j].VentForce)
				conditionSoiree[j].VentP = vent_plein(conditionSoiree[j].VentDir)
				conditionSoiree[j].CondMeteo1, conditionSoiree[j].CondMeteo2, conditionSoiree[j].CondMeteo1se, conditionSoiree[j].CondMeteo2se = decoupage(conditionSoiree[j].CondMeteo)
				print("Soiree "..j.." Ok")
			end

			if nuit == "oui" then
				local file = assert(io.open(repsauv.."/Nuit"..j, "r"))
				local line = file:read()
				local i = 0
				local donee = {}
				for line in file:lines() do
					i = i+1
					donee[i] = line
				end
				io.close(file)
				conditionNoct[j] = {}
				local info3 = {}
				for i = 1,table.getn(t) do
					donee[i]=donee[i]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
					value=donee[i]:match("(%d*)")
					if value ~= "" then
						donee[i] = value
					end
					info3[t[i]] = donee[i]
				end
				conditionNoct[j] = info3
				if conditionNoct[j].VentDir == "CLM" then
					conditionNoct[j].VentDir = "Calme"
					conditionNoct[j].VentForce = "0"
				end
				conditionNoct[j].VentIcone = icone_vent(direction_vent(conditionNoct[j].VentDir), conditionNoct[j].VentForce)
				conditionNoct[j].VentP = vent_plein(conditionNoct[j].VentDir)
				conditionNoct[j].CondMeteo1, conditionNoct[j].CondMeteo2, conditionNoct[j].CondMeteo1se, conditionNoct[j].CondMeteo2se = decoupage(conditionNoct[j].CondMeteo)
				print("Nuit "..j.." Ok")
			end
		end
		
		
		if huit == "oui" then
			local info4 = {}
			local info3 = {}
			for y = 1,nbFoisHuit do
				local file = assert(io.open(repsauv.."/huitHeures"..y, "r"))
				t = {"Heure", "TempMax", "TempMaxR", "Humidite", "Pluie", "Neige", "Verglas", "Vent", "UV", "CouvNuage", "PointRosee", "Icone"}

				local line = file:read()
				local i = 0
				local donee = {}
				for line in file:lines() do
					i = i+1
					donee[i] = line
				end
				io.close(file)
				for j = 1,8 do
					x=j+((y-1)*8)
					huitHeures[x] = {}
					info3[x] = {}
				end
				x=0
				for i = 1,table.getn(t) do
					for j = 1,8 do
						x=x+1
						local k=j+((y-1)*8)
						donee[x]=donee[x]:match("[%a%p%d"..pat.."]*: ([%s%a%p%d"..pat.."]*)")
						if i ~= 8 then
							value=donee[x]:match("(%d*)")
							if value ~= "" then
								donee[x] = value
							end
						end
						table.insert(info3[k],i,donee[x])
					end
				end
			end
			for j = 1,8*nbFoisHuit do
				info4 = {}
				for i = 1,table.getn(t) do
					info4[t[i]]=info3[j][i]
				end
				huitHeures[j]=info4
				huitHeures[j].VentForce, huitHeures[j].VentDir=huitHeures[j].Vent:match("(%d*) (%a*)")
				if huitHeures[j].VentDir == "CLM" then
					huitHeures[j].VentDir = "Calme"
					huitHeures[j].VentForce = "0"
				end
				huitHeures[j].VentIcone = icone_vent(direction_vent(huitHeures[j].VentDir), huitHeures[j].VentForce)
				huitHeures[j].VentP = vent_plein(huitHeures[j].VentDir)
			end
			print("huit heures Ok")
		end
		
--Récupération lunaison
		local file = assert(io.open(repsauv.."/lunaison", "r"))
		local line = file:read()
		local i = 0
		local donee = {}
		for line in file:lines() do
			i = i+1
			donee[i] = line
		end
		ephemerides = donee[1]
		ephemerides1 = donee[2]
		ephemerides2 = donee[3]
		Visibilite = donee[4]
		Phases = donee[5]
		Phases1 = donee[6]
		Phases2 = donee[7]
		Noeud_lunaire = donee[8]
		Apogee = donee[9]
		Perigee = donee[10]
		Distance = donee[11]
		Age = donee[12]
		Lever_LuneHeure = donee[13]
		Lever_LuneMinute = donee[14]
		Coucher_LuneHeure = donee[15]
		Coucher_LuneMinute = donee[16]
		Eclipse_partielle = donee[17]
		Eclipse_total = donee[18]
		io.close(file)

		
		if MAJ == "0" then
			MAJ = "1"
		else
			MAJ = "0"
		end

		
		collectgarbage()
	end
	return ""
end

--en ligne mise à jour
function conky_Meteo_enligne()
	if start==1 then
--		os.execute("pkill -f \"python "..repscript.."/recmeteo.py adressWeb="..cmd1.." repsauv="..repsauv.." huitHeures="..huit.." nbFoisHuit="..nbFoisHuit.." nbJour="..jours.." interval="..delais.." matin="..matin.." apresmidi="..apresmidi.." soiree="..soiree.." nuit="..nuit.." notify="..notify.."\"")
		os.execute("python "..repscript.."/recmeteo.py adressWeb="..cmd1.." repsauv="..repsauv.." huitHeures="..huit.." nbFoisHuit="..nbFoisHuit.." nbJour="..jours.." interval="..delais.." matin="..matin.." apresmidi="..apresmidi.." soiree="..soiree.." nuit="..nuit.." notify="..notify.." id="..ID.." &")
	end
	if dermodif == nil or dermodif ~= conky_parse("${exec date -r "..repsauv.."/CC '+%s'}") then
		dermodif=conky_parse("${exec date -r "..repsauv.."/CC '+%s'}")
			if 3600 <= os.difftime(os.time(), tc) or start == 1 then
				start = 2
				tc = os.time()
				lunaison(r)
				print("lunaison Ok")
				if repsauv ~= nil then
--lancement sauvegarde
					sauvegarde()
				end
			end
			conky_Meteo_horsligne()

		collectgarbage()
	end
	return " "
end


--Retour d'information météo

--Condition courrante

function conky_Meteo_IconeM(r, x, y, w, h)
	conky_fDrawImage(r.."/icone_meteo/"..conditioncourante.Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_TempRes()
	return conditioncourante.Tempr
end

function conky_Meteo_TempAct()
	return conditioncourante.Temp
end

function conky_Meteo_CondMeteo()
	return conditioncourante.Cond
end

function conky_Meteo_CondMeteo1()
	return conditioncourante.CondMeteo1
end

function conky_Meteo_CondMeteo2()
	return conditioncourante.CondMeteo2
end

function conky_Meteo_CondMeteo1se()
	return conditioncourante.CondMeteo1se
end

function conky_Meteo_CondMeteo2se()
	return conditioncourante.CondMeteo2se
end

function conky_Meteo_Alerte()
	return conditioncourante.Alerte
end

function conky_Meteo_Alerte1()
	return conditioncourante.Alerte1
end

function conky_Meteo_Alerte2()
	return conditioncourante.Alerte2
end

function conky_Meteo_Alerte1se()
	return conditioncourante.Alerte1se
end

function conky_Meteo_Alerte2se()
	return conditioncourante.Alerte2se
end

function conky_Meteo_VentDir()
	return conditioncourante.VentDir
end

function conky_Meteo_VentDirP()
	return conditioncourante.VentPlein
end

function conky_Meteo_VentForce()
	return conditioncourante.VentForce
end

function conky_Meteo_IconeV(r, x, y, w, h)
	conky_fDrawImage(r.."/vent/"..conditioncourante.VentIcone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Humidite()
	return tonumber(conditioncourante.Humidite)
end

function conky_Meteo_Rose()
	return tonumber(conditioncourante.PointRosee)
end

function conky_Meteo_Pression()
	return tonumber(conditioncourante.Pression)
end

function conky_Meteo_Visibilite()
	return tonumber(conditioncourante.Visibilite)
end

function conky_Meteo_Date(format)
	format = string.gsub(format, "_", " ")
	return trad_date(os.date(format, conditioncourante.Date))
end

function conky_Meteo_Ville()
	return conditioncourante.Ville
end

function conky_Meteo_CouvNuage()
	return tonumber(conditioncourante.CouvNuage)
end

function conky_Meteo_Uv()
	return conditioncourante.Uv
end

function conky_Meteo_latitude()
	return conditioncourante.latitude
end

function conky_Meteo_longitude()
	return conditioncourante.longitude
end

function conky_Meteo_Heure()
	return os.date("%H", time)
end

function conky_Meteo_Minute()
	return os.date("%M", time)
end


--Prévision Météo

--Jour

function conky_Meteo_Jour_CondMeteo(j)
	return conditionJour[tonumber(j)].CondMeteo
end

function conky_Meteo_Jour_CondMeteo1(j)
	return conditionJour[tonumber(j)].CondMeteo1
end

function conky_Meteo_Jour_CondMeteo2(j)
	return conditionJour[tonumber(j)].CondMeteo2
end

function conky_Meteo_Jour_CondMeteo1se(j)
	return conditionJour[tonumber(j)].CondMeteo1se
end

function conky_Meteo_Jour_CondMeteo2se(j)
	return conditionJour[tonumber(j)].CondMeteo2se
end

function conky_Meteo_Jour_Temp(j)
	return tonumber(conditionJour[tonumber(j)].Temp)
end

function conky_Meteo_Jour_TempRes(j)
	return tonumber(conditionJour[tonumber(j)].TempRes)
end

function conky_Meteo_Jour_ProbPrec(j)
	return tonumber(conditionJour[tonumber(j)].ProbPrec)
end

function conky_Meteo_Jour_VentDir(j)
	return conditionJour[tonumber(j)].VentDir
end

function conky_Meteo_Jour_VentDirP(j)
	return conditionJour[tonumber(j)].VentP
end

function conky_Meteo_Jour_VentForce(j)
	return tonumber(conditionJour[tonumber(j)].VentForce)
end

function conky_Meteo_Jour_VentRafales(j)
	return tonumber(conditionJour[tonumber(j)].VentRafales)
end

function conky_Meteo_Jour_Uv(j)
	return tonumber(conditionJour[tonumber(j)].Uv)
end

function conky_Meteo_Jour_ProbOrage(j)
	return tonumber(conditionJour[tonumber(j)].ProbOrage)
end

function conky_Meteo_Jour_NivPrec(j)
	return tonumber(conditionJour[tonumber(j)].NivPrec)
end

function conky_Meteo_Jour_QPluie(j)
	return tonumber(conditionJour[tonumber(j)].QPluie)
end

function conky_Meteo_Jour_QNeige(j)
	return tonumber(conditionJour[tonumber(j)].QNeige)
end

function conky_Meteo_Jour_EVerglas(j)
	return tonumber(conditionJour[tonumber(j)].EVerglas)
end

function conky_Meteo_Jour_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionJour[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Jour_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionJour[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Jour_IconeR(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionJour[tonumber(j)].RafalesIcone..".png", x, y, w, h)
	return ""
end


--Nuit

function conky_Meteo_Nuit_CondMeteo(j)
	return conditionNuit[tonumber(j)].CondMeteo
end

function conky_Meteo_Nuit_CondMeteo1(j)
	return conditionNuit[tonumber(j)].CondMeteo1
end

function conky_Meteo_Nuit_CondMeteo2(j)
	return conditionNuit[tonumber(j)].CondMeteo2
end

function conky_Meteo_Nuit_CondMeteo1se(j)
	return conditionNuit[tonumber(j)].CondMeteo1se
end

function conky_Meteo_Nuit_CondMeteo2se(j)
	return conditionNuit[tonumber(j)].CondMeteo2se
end

function conky_Meteo_Nuit_Temp(j)
	return tonumber(conditionNuit[tonumber(j)].Temp)
end

function conky_Meteo_Nuit_TempRes(j)
	return tonumber(conditionNuit[tonumber(j)].TempRes)
end

function conky_Meteo_Nuit_ProbPrec(j)
	return tonumber(conditionNuit[tonumber(j)].ProbPrec)
end

function conky_Meteo_Nuit_VentDir(j)
	return conditionNuit[tonumber(j)].VentDir
end

function conky_Meteo_Nuit_VentDirP(j)
	return conditionNuit[tonumber(j)].VentP
end

function conky_Meteo_Nuit_VentForce(j)
	return tonumber(conditionNuit[tonumber(j)].VentForce)
end

function conky_Meteo_Nuit_VentRafales(j)
	return tonumber(conditionNuit[tonumber(j)].VentRafales)
end

function conky_Meteo_Nuit_ProbOrage(j)
	return tonumber(conditionNuit[tonumber(j)].ProbOrage)
end

function conky_Meteo_Nuit_NivPrec(j)
	return tonumber(conditionNuit[tonumber(j)].NivPrec)
end

function conky_Meteo_Nuit_QPluie(j)
	return tonumber(conditionNuit[tonumber(j)].QPluie)
end

function conky_Meteo_Nuit_QNeige(j)
	return tonumber(conditionNuit[tonumber(j)].QNeige)
end

function conky_Meteo_Nuit_EVerglas(j)
	return tonumber(conditionNuit[tonumber(j)].EVerglas)
end

function conky_Meteo_Nuit_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionNuit[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Nuit_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionNuit[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Nuit_IconeR(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionNuit[tonumber(j)].RafalesIcone..".png", x, y, w, h)
	return ""
end


--Infos sur la journée

function conky_Meteo_Jour(format, j)
	format = string.gsub(format, "_", " ")
	return trad_date(os.date(format, InfoJour[tonumber(j)].Jour))
end

function conky_Meteo_HLeverSoleil(j)
	return InfoJour[tonumber(j)].LeverSoleilH
end

function conky_Meteo_MLeverSoleil(j)
	return InfoJour[tonumber(j)].LeverSoleilM
end

function conky_Meteo_LeverSoleil(j)
	return tonumber((InfoJour[tonumber(j)].LeverSoleilH*60)+InfoJour[tonumber(j)].LeverSoleilM)
end

function conky_Meteo_HCoucherSoleil(j)
	return InfoJour[tonumber(j)].CoucherSoleilH
end

function conky_Meteo_MCoucherSoleil(j)
	return InfoJour[tonumber(j)].CoucherSoleilM
end

function conky_Meteo_CoucherSoleil(j)
	return tonumber((InfoJour[tonumber(j)].CoucherSoleilH*60)+InfoJour[tonumber(j)].CoucherSoleilM)
end

function conky_Meteo_HDureeJour(j)
	return InfoJour[tonumber(j)].CoucherSoleilH-InfoJour[tonumber(j)].LeverSoleilH
end

function conky_Meteo_MDureeJour(j)
	return os.date("%M", ((((InfoJour[tonumber(j)].CoucherSoleilH*3600)-3600)+(InfoJour[tonumber(j)].CoucherSoleilM*60))-(((InfoJour[tonumber(j)].LeverSoleilH*3600))+(InfoJour[tonumber(j)].LeverSoleilM*60))))
end

function conky_Meteo_Histo_Min(j)
	return InfoJour[tonumber(j)].Histo_Min
end

function conky_Meteo_Histo_Max(j)
	return InfoJour[tonumber(j)].Histo_Max
end


--Matin

function conky_Meteo_Matin_CondMeteo(j)
	return conditionMatin[tonumber(j)].CondMeteo
end

function conky_Meteo_Matin_CondMeteo1(j)
	return conditionMatin[tonumber(j)].CondMeteo1
end

function conky_Meteo_Matin_CondMeteo2(j)
	return conditionMatin[tonumber(j)].CondMeteo2
end

function conky_Meteo_Matin_CondMeteo1se(j)
	return conditionMatin[tonumber(j)].CondMeteo1se
end

function conky_Meteo_Matin_CondMeteo2se(j)
	return conditionMatin[tonumber(j)].CondMeteo2se
end

function conky_Meteo_Matin_TempMax(j)
	return tonumber(conditionMatin[tonumber(j)].TempMax)
end

function conky_Meteo_Matin_TempMin(j)
	return tonumber(conditionMatin[tonumber(j)].TempMin)
end

function conky_Meteo_Matin_TempMaxRes(j)
	return tonumber(conditionMatin[tonumber(j)].TempMaxR)
end

function conky_Meteo_Matin_TempMinRes(j)
	return tonumber(conditionMatin[tonumber(j)].TempMinR)
end

function conky_Meteo_Matin_ProbPrec(j)
	return tonumber(conditionMatin[tonumber(j)].ProbPrec)
end

function conky_Meteo_Matin_VentDir(j)
	return conditionMatin[tonumber(j)].VentDir
end

function conky_Meteo_Matin_VentDirP(j)
	return conditionMatin[tonumber(j)].VentP
end

function conky_Meteo_Matin_VentForce(j)
	return tonumber(conditionMatin[tonumber(j)].VentForce)
end

function conky_Meteo_Matin_QPluie(j)
	return tonumber(conditionMatin[tonumber(j)].QPluie)
end

function conky_Meteo_Matin_QNeige(j)
	return tonumber(conditionMatin[tonumber(j)].QNeige)
end

function conky_Meteo_Matin_Humidite(j)
	return tonumber(conditionMatin[tonumber(j)].Humidite)
end

function conky_Meteo_Matin_CouvNuage(j, r)
	if r == nil then r = 100 end
	local Couv = (tonumber(conditionMatin[tonumber(j)].CouvNuage) / 100) * r
	if Couv - math.floor(Couv) <= 0.5 then 
		Couv = math.floor(Couv)
	else
		Couv = math.ceil(Couv)
	end
	return Couv
end

function conky_Meteo_Matin_Rose(j)
	return tonumber(conditionMatin[tonumber(j)].PointRosee)
end

function conky_Meteo_Matin_Visibilite(j)
	return tonumber(conditionMatin[tonumber(j)].Visibilite)
end

function conky_Meteo_Matin_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionMatin[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Matin_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionMatin[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end


--Après Midi

function conky_Meteo_AM_CondMeteo(j)
	return conditionAM[tonumber(j)].CondMeteo
end

function conky_Meteo_AM_CondMeteo1(j)
	return conditionAM[tonumber(j)].CondMeteo1
end

function conky_Meteo_AM_CondMeteo2(j)
	return conditionAM[tonumber(j)].CondMeteo2
end

function conky_Meteo_AM_CondMeteo1se(j)
	return conditionAM[tonumber(j)].CondMeteo1se
end

function conky_Meteo_AM_CondMeteo2se(j)
	return conditionAM[tonumber(j)].CondMeteo2se
end

function conky_Meteo_AM_TempMax(j)
	return tonumber(conditionAM[tonumber(j)].TempMax)
end

function conky_Meteo_AM_TempMin(j)
	return tonumber(conditionAM[tonumber(j)].TempMin)
end

function conky_Meteo_AM_TempMaxRes(j)
	return tonumber(conditionAM[tonumber(j)].TempMaxR)
end

function conky_Meteo_AM_TempMinRes(j)
	return tonumber(conditionAM[tonumber(j)].TempMinR)
end

function conky_Meteo_AM_ProbPrec(j)
	return tonumber(conditionAM[tonumber(j)].ProbPrec)
end

function conky_Meteo_AM_VentDir(j)
	return conditionAM[tonumber(j)].VentDir
end

function conky_Meteo_AM_VentDirP(j)
	return conditionAM[tonumber(j)].VentP
end

function conky_Meteo_AM_VentForce(j)
	return tonumber(conditionAM[tonumber(j)].VentForce)
end

function conky_Meteo_AM_QPluie(j)
	return tonumber(conditionAM[tonumber(j)].QPluie)
end

function conky_Meteo_AM_QNeige(j)
	return tonumber(conditionAM[tonumber(j)].QNeige)
end

function conky_Meteo_AM_Humidite(j)
	return tonumber(conditionAM[tonumber(j)].Humidite)
end

function conky_Meteo_AM_CouvNuage(j, r)
	if r == nil then r = 100 end
	local Couv = (tonumber(conditionAM[tonumber(j)].CouvNuage) / 100) * r
	if Couv - math.floor(Couv) <= 0.5 then 
		Couv = math.floor(Couv)
	else
		Couv = math.ceil(Couv)
	end
	return Couv
end

function conky_Meteo_AM_Rose(j)
	return tonumber(conditionAM[tonumber(j)].PointRosee)
end

function conky_Meteo_AM_Visibilite(j)
	return tonumber(conditionAM[tonumber(j)].Visibilite)
end

function conky_Meteo_AM_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionAM[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_AM_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionAM[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end


--Soirée

function conky_Meteo_Soiree_CondMeteo(j)
	return conditionSoiree[tonumber(j)].CondMeteo
end

function conky_Meteo_Soiree_CondMeteo1(j)
	return conditionSoiree[tonumber(j)].CondMeteo1
end

function conky_Meteo_Soiree_CondMeteo2(j)
	return conditionSoiree[tonumber(j)].CondMeteo2
end

function conky_Meteo_Soiree_CondMeteo1se(j)
	return conditionSoiree[tonumber(j)].CondMeteo1se
end

function conky_Meteo_Soiree_CondMeteo2se(j)
	return conditionSoiree[tonumber(j)].CondMeteo2se
end

function conky_Meteo_Soiree_TempMax(j)
	return tonumber(conditionSoiree[tonumber(j)].TempMax)
end

function conky_Meteo_Soiree_TempMin(j)
	return tonumber(conditionSoiree[tonumber(j)].TempMin)
end

function conky_Meteo_Soiree_TempMaxRes(j)
	return tonumber(conditionSoiree[tonumber(j)].TempMaxR)
end

function conky_Meteo_Soiree_TempMinRes(j)
	return tonumber(conditionSoiree[tonumber(j)].TempMinR)
end

function conky_Meteo_Soiree_ProbPrec(j)
	return tonumber(conditionSoiree[tonumber(j)].ProbPrec)
end

function conky_Meteo_Soiree_VentDir(j)
	return conditionSoiree[tonumber(j)].VentDir
end

function conky_Meteo_Soiree_VentDirP(j)
	return conditionSoiree[tonumber(j)].VentP
end

function conky_Meteo_Soiree_VentForce(j)
	return tonumber(conditionSoiree[tonumber(j)].VentForce)
end

function conky_Meteo_Soiree_QPluie(j)
	return tonumber(conditionSoiree[tonumber(j)].QPluie)
end

function conky_Meteo_Soiree_QNeige(j)
	return tonumber(conditionSoiree[tonumber(j)].QNeige)
end

function conky_Meteo_Soiree_Humidite(j)
	return tonumber(conditionSoiree[tonumber(j)].Humidite)
end

function conky_Meteo_Soiree_CouvNuage(j, r)
	if r == nil then r = 100 end
	local Couv = (tonumber(conditionSoiree[tonumber(j)].CouvNuage) / 100) * r
	if Couv - math.floor(Couv) <= 0.5 then 
		Couv = math.floor(Couv)
	else
		Couv = math.ceil(Couv)
	end
	return Couv
end

function conky_Meteo_Soiree_Rose(j)
	return tonumber(conditionSoiree[tonumber(j)].PointRosee)
end

function conky_Meteo_Soiree_Visibilite(j)
	return tonumber(conditionSoiree[tonumber(j)].Visibilite)
end

function conky_Meteo_Soiree_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionSoiree[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Soiree_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionSoiree[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end


--Nuit

function conky_Meteo_Noct_CondMeteo(j)
	return conditionNoct[tonumber(j)].CondMeteo
end

function conky_Meteo_Noct_CondMeteo1(j)
	return conditionNoct[tonumber(j)].CondMeteo1
end

function conky_Meteo_Noct_CondMeteo2(j)
	return conditionNoct[tonumber(j)].CondMeteo2
end

function conky_Meteo_Noct_CondMeteo1se(j)
	return conditionNoct[tonumber(j)].CondMeteo1se
end

function conky_Meteo_Noct_CondMeteo2se(j)
	return conditionNoct[tonumber(j)].CondMeteo2se
end

function conky_Meteo_Noct_TempMax(j)
	return tonumber(conditionNoct[tonumber(j)].TempMax)
end

function conky_Meteo_Noct_TempMin(j)
	return tonumber(conditionNoct[tonumber(j)].TempMin)
end

function conky_Meteo_Noct_TempMaxRes(j)
	return tonumber(conditionNoct[tonumber(j)].TempMaxR)
end

function conky_Meteo_Noct_TempMinRes(j)
	return tonumber(conditionNoct[tonumber(j)].TempMinR)
end

function conky_Meteo_Noct_ProbPrec(j)
	return tonumber(conditionNoct[tonumber(j)].ProbPrec)
end

function conky_Meteo_Noct_VentDir(j)
	return conditionNoct[tonumber(j)].VentDir
end

function conky_Meteo_Noct_VentDirP(j)
	return conditionNoct[tonumber(j)].VentP
end

function conky_Meteo_Noct_VentForce(j)
	return tonumber(conditionNoct[tonumber(j)].VentForce)
end

function conky_Meteo_Noct_QPluie(j)
	return tonumber(conditionNoct[tonumber(j)].QPluie)
end

function conky_Meteo_Noct_QNeige(j)
	return tonumber(conditionNoct[tonumber(j)].QNeige)
end

function conky_Meteo_Noct_Humidite(j)
	return tonumber(conditionNoct[tonumber(j)].Humidite)
end

function conky_Meteo_Noct_CouvNuage(j, r)
	if r == nil then r = 100 end
	local Couv = (tonumber(conditionNoct[tonumber(j)].CouvNuage) / 100) * r
	if Couv - math.floor(Couv) <= 0.5 then 
		Couv = math.floor(Couv)
	else
		Couv = math.ceil(Couv)
	end
	return Couv
end

function conky_Meteo_Noct_Rose(j)
	return tonumber(conditionNoct[tonumber(j)].PointRosee)
end

function conky_Meteo_Noct_Visibilite(j)
	return tonumber(conditionNoct[tonumber(j)].Visibilite)
end

function conky_Meteo_Noct_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..conditionNoct[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_Noct_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..conditionNoct[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end

--Huit prochaines heures


function conky_Meteo_huitHeures_VentDirP(j)
	return huitHeures[tonumber(j)].VentP
end

function conky_Meteo_huitHeures_IconeV(r, x, y, w, h, j)
	conky_fDrawImage(r.."/vent/"..huitHeures[tonumber(j)].VentIcone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_huitHeures_Heure(j)
	return tonumber(huitHeures[tonumber(j)].Heure)
end

function conky_Meteo_huitHeures_IconeM(r, x, y, w, h, j)
	conky_fDrawImage(r.."/icone_meteo/"..huitHeures[tonumber(j)].Icone..".png", x, y, w, h)
	return ""
end

function conky_Meteo_huitHeures_Temp(j)
	return tonumber(huitHeures[tonumber(j)].TempMax)
end

function conky_Meteo_huitHeures_TempR(j)
	return tonumber(huitHeures[tonumber(j)].TempMaxR)
end

function conky_Meteo_huitHeures_VentDir(j)
	return huitHeures[tonumber(j)].VentDir
end

function conky_Meteo_huitHeures_VentForce(j)
	return tonumber(huitHeures[tonumber(j)].VentForce)
end

function conky_Meteo_huitHeures_Humidite(j)
	return tonumber(huitHeures[tonumber(j)].Humidite)
end

function conky_Meteo_huitHeures_CouvNuage(j)
	return tonumber(huitHeures[tonumber(j)].CouvNuage)
end

function conky_Meteo_huitHeures_Rose(j)
	return tonumber(huitHeures[tonumber(j)].PointRosee)
end

function conky_Meteo_huitHeures_ProbPluie(j)
	return tonumber(huitHeures[tonumber(j)].Pluie)
end

function conky_Meteo_huitHeures_ProbNeige(j)
	return tonumber(huitHeures[tonumber(j)].Neige)
end

function conky_Meteo_huitHeures_ProbVerglas(j)
	return tonumber(huitHeures[tonumber(j)].Verglas)
end

function conky_Meteo_huitHeures_Uv(j)
	return tonumber(huitHeures[tonumber(j)].UV)
end

--Lunaison

function conky_Lune_ephemerides()
	return ephemerides
end

function conky_Lune_ephemerides1()
	return ephemerides1
end

function conky_Lune_ephemerides2()
	return ephemerides2
end

function conky_Lune_Visibilite()
	return Visibilite
end

function conky_Lune_Phases()
	return Phases
end

function conky_Lune_Phases1()
	return Phases1
end

function conky_Lune_Phases2()
	return Phases2
end

function conky_Lune_Noeudlunaire()
	return Noeud_lunaire
end

function conky_Lune_Apogee()
	return Apogee
end

function conky_Lune_Perigee()
	return Perigee
end

function conky_Lune_Distance()
	return Distance
end

function conky_Lune_Age()
	return Age
end

function conky_Lune_HLeverLune()
	return Lever_LuneHeure
end

function conky_Lune_MLeverLune()
	return Lever_LuneMinute
end

function conky_Lune_HCoucherLune()
	return Coucher_LuneHeure
end

function conky_Lune_MCoucherLune()
	return Coucher_LuneMinute
end

function conky_Lune_EclipsePartielle(format)
	if format == nil then format = "%A_%d_%B_%Y_à_%H:%M" end
	format = string.gsub(format, "_", " ")
	return trad_date(os.date(format, Eclipse_partielle))
end

function conky_Lune_EclipseTotal()
	if format == nil then format = "%A_%d_%B_%Y_à_%H:%M" end
	format = string.gsub(format, "_", " ")
	return trad_date(os.date(format, Eclipse_total))
end

--Fonction d'affichage
function conky_fDrawImage(path,x,y,w,h)

	path = string.gsub(path, "~", home)
	path = string.gsub(path, "$HOME", home)

	local cs = cairo_xlib_surface_create(conky_window.display, conky_window.drawable, conky_window.visual, conky_window.width, conky_window.height)
	
	local function fDrawImage(path, x, y, w, h)
		
		local img =  cairo_image_surface_create_from_png(path)
		local w_img, h_img = cairo_image_surface_get_width (img), cairo_image_surface_get_height (img)

		local cr = cairo_create (cs)
		cairo_translate (cr, x, y)

		

		cairo_scale (cr, w/w_img, h/h_img)
		cairo_set_source_surface (cr, img, -w_img/2, -h_img/2)
		cairo_paint (cr)
		cairo_destroy(cr)
		cairo_surface_destroy (img)
	end
	fDrawImage(path, x, y, w, h)
	cairo_surface_destroy(cs)
	return ""
end


--Informations sur le lua
function conky_Version()
	return Version
end

function conky_Meteo_fichier_init()
	return fichier_init
end

function conky_Meteo_etat_MAJ()
	return MAJ
end


--Sauvegarde des données
function sauvegarde()

--sauvegarde lunaison
	local file = assert(io.open(repsauv.."/lunaison", "w+"))
	file:write ("\n", ephemerides, "\n")
	file:write (ephemerides1, "\n")
	file:write (ephemerides2, "\n")
	file:write (Visibilite, "\n")
	file:write (Phases, "\n")
	file:write (Phases1, "\n")
	file:write (Phases2, "\n")
	file:write (Noeud_lunaire, "\n")
	file:write (Apogee, "\n")
	file:write (Perigee, "\n")
	file:write (Distance, "\n")
	file:write (Age, "\n")
	file:write (Lever_LuneHeure, "\n")
	file:write (Lever_LuneMinute, "\n")
	file:write (Coucher_LuneHeure, "\n")
	file:write (Coucher_LuneMinute, "\n")
	file:write (Eclipse_partielle, "\n")
	file:write (Eclipse_total, "\n")
	io.close(file)
	
--modification des droits utilisateur
	os.execute('chmod o+rw- '..r..'/*lun*')
	os.execute('chmod -R o+rw- '..repsauv)
	os.execute('chmod -R o+rw- '..Rep)
end

Chez moi ça fonctionne. N'hésitez pas à poser des questions.;)


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#445 Le 30/04/2013, à 08:15

franz256

Re : [Conky] Alternative à weather.com (3)

Didier-T

urllib2 est pris en charge par python-urllib3. Tout simplement.
J'ai aussi installé  : python3-urllib3 (je change le post précédent).
Peux tu m'indiquer comment ajouter une signature à ce message et une image ? svp.

Dernière modification par franz256 (Le 30/04/2013, à 08:34)


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#446 Le 30/04/2013, à 08:49

jpdipsy

Re : [Conky] Alternative à weather.com (3)

@franz256

résultat avec ton recmeteo pas de probléme au lancement mais à la première mise à jour.

Traceback (most recent call last):
  File "/home/jp/Accuweather/scripts/recmeteo.py", line 365, in <module>
    demonise(ent, nb1, nb2, huitHeures, nbJour, interval, nbFoisHuit, Id)
  File "/home/jp/Accuweather/scripts/recmeteo.py", line 305, in demonise
    traitement(ent+nb1+'/hourly-weather-forecast/'+nb2+'?hour='+str(h), repsauv+"/huitHeures"+str(x), repsauv)
  File "/home/jp/Accuweather/scripts/recmeteo.py", line 96, in traitement
    soup = BeautifulSoup(currentCond)
  File "/usr/lib/python2.7/dist-packages/bs4/__init__.py", line 172, in __init__
    self._feed()
  File "/usr/lib/python2.7/dist-packages/bs4/__init__.py", line 185, in _feed
    self.builder.feed(self.markup)
  File "/usr/lib/python2.7/dist-packages/bs4/builder/_lxml.py", line 195, in feed
    self.parser.close()
  File "parser.pxi", line 1187, in lxml.etree._FeedParser.close (src/lxml/lxml.etree.c:88786)
  File "parsertarget.pxi", line 142, in lxml.etree._TargetParserContext._handleParseResult (src/lxml/lxml.etree.c:98085)
  File "parsertarget.pxi", line 130, in lxml.etree._TargetParserContext._handleParseResult (src/lxml/lxml.etree.c:97909)
  File "lxml.etree.pyx", line 294, in lxml.etree._ExceptionContext._raise_if_stored (src/lxml/lxml.etree.c:9071)
  File "saxparser.pxi", line 259, in lxml.etree._handleSaxData (src/lxml/lxml.etree.c:94081)
UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 32: invalid start byte

Hors ligne

#447 Le 30/04/2013, à 09:06

franz256

Re : [Conky] Alternative à weather.com (3)

Jpdipsy,
Tu as encore un problème de Unicode. regarde à la ligne 259 comme indiqué dans ton message, si tu n'as pas une lettre accentuée ou un char(160). Et moi je n'ai pas bs4. Peux tu me dire à quoi cela sert ?


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#448 Le 30/04/2013, à 09:16

ljere

Re : [Conky] Alternative à weather.com (3)

franz256 clic sur ton pseudo puis sur l'onglet personnalité tu pourras uploader un avatar et mettre une signature


ancien PC Toshiba satellite_c670d-11 / Linux Mint 21 Vanessa
Nouveau PC ASUS TUF GAMING A17 GPU RTX 4070 CPU AMD Ryzen 9 7940HS w/ Radeon 780M Graphics / Linux Mint 21.2 Victoria / Kernel: 6.4.8-1-liquorix / Desktop: Cinnamon

Hors ligne

#449 Le 30/04/2013, à 09:31

franz256

Re : [Conky] Alternative à weather.com (3)

Merci Ijere c'est fait.


Ubuntu 13.04-64 gnome-shell 3.6.1.3

Hors ligne

#450 Le 30/04/2013, à 10:56

jpdipsy

Re : [Conky] Alternative à weather.com (3)

@Didier toutes,tous

Les choses s' améliores en lançant recmétéo 1.24 (d'origine) tel que: python3 recmeteo.py
un shoot shoot
mais comme on peut le constater ce n'est pas permanent
Chez moi le mélange py 2.7 - 3 est une catastrophe

Hors ligne