comme tu ne repostes pas.. y'a une docu réservée sur ubuntu (c'est absolument générique conky c'est le même partout pour toutes les distrib 😉 ) > voir ici < ou > ici < utilise la méthode 3. (le tar.gz est posté à la fin du post..)
ouep je suis la doc d'ubuntu aussi mais finalement j'ai trouvé le script sur un autre site parce que là faut s'inscrire :-P
Je vous tiens au courant de ma progression 😉

EDIT : finalement j'ai la flemme de recherche toute les polices, je retrouve plus le site que j'avais trouvé hier. Je me suis donc inscrit sur le forum d'ubuntu et j'ai téléchargé l'archive !
Voilà j'ai réussi.
J'ai donc dl l'archive ici, j'ai décompressé et il ne restait plus qu'à mettre le .conkyForecast.config dans ~/ .Après suffit de modifier son .conkyrc ou d'en recréer un autre, et si on veut d'utiliser le conkyforecast.template.
Perso je me suis basé sur les fichiers d'ici au post #2058 et j'ai juste changé quelques trucs après.
Je confirme aussi, la doc d'ubuntu-fr est très complète 😉
ah ben voilà ! c'est plus simple et utile d'être inscrit chez les copain quand même ! coo aussi que tu ais édité, ça servira.
et je me suis fait un conky.sh que j'ai mis dans Système->Préférences->Personnel->Sessions car sinon conky démarre avant compiz et du coup conky se met au premier plan :
#!/bin/bash
sleep 8

conky
conky -c /home/mat/.conkyrc2
tant que t'y es si tu peux poster un screen aussi ça aidera à donner envie de piocher dans ton conkyrc 😉
Je reposte mes deux conkyrc tant qu'à faire, j'ai modifié un truc au niveau des t°, je me suis dis que toutes les 90 secondes c'était bon, ça bouffera moins de ressources :-P



Conkyrc de droite :
background         yes
update_interval        1.0
double_buffer        yes

use_xft            yes
override_utf8_locale yes
xftfont            Sans:size=8
xftalpha        0.8

own_window        yes
own_window_transparent    yes
own_window_type        override
own_window_hints    undecorated,below,sticky,skip_taskbar,skip_pager
#on_bottom        yes

draw_shades        no
draw_outline        no
draw_borders        yes
draw_graph_borders    yes
stippled_borders    0
border_margin        5
border_width        2

default_color        green
default_shade_color    black
default_outline_color    black
color1        5b5ecf
color2        8BAEE8
color3         FC8820

alignment top_right
gap_x            5
gap_y            40

no_buffers        yes

TEXT
${font Sans:style=Bold:pixelsize=10}${color1}Utilisateur :$color ${exec whoami}
${color1}Kernel : $color$kernel
${color1}Uptime : $color$uptime ${alignr}
${color1}Load : $color$loadavg
$stippled_hr
${color1}CPU : $color${freq}MHz / $cpu% 
${color2}${cpugraph}

${color1}Mémoire RAM : $color$mem / $memmax 
     $memperc % ${color2}${membar}
${color1}Utilisation du Swap : $color$swap / $swapmax
     $swapperc %  ${color2}${swapbar}
$stippled_hr
${color3}Voltage :
${color1}Voltage CPU : $color${execi 90 sensors | grep "VCore 1" | cut -c13-20}
${color1}Voltage +12V (alim) : $color${execi 90 sensors | grep "+12V" | cut -c13-20}

${color3}Températures :
${color1}CPU : $color${execi 90 sensors | grep Core0 | cut -c15-16}°C
${color1}DD : $color${execi 90 hddtemp -n /dev/sda}°C 
${color1}Carte mère :  $color${execi 90 sensors | grep "M/B Temp" | cut -c14-20}

${color3}Ventilateurs :
${color1}CPU : $color${execi 90 sensors | grep "fan1" | cut -c12-16} rpm
${color1}Carte mère : $color${execi 90 sensors | grep "fan3" | cut -c12-16} rpm

$stippled_hr
${color1}Disque dur : ${alignr}${color1}Activité : $color${diskio /dev/sda}/s
${color1}Système  : $color${fs_used /} / ${fs_size /}
     $color${fs_used_perc /}% ${color2}${fs_bar /}
${color1}Home        : $color${fs_used /home} / ${fs_size /home}
     $color${fs_used_perc /home}% ${color2}${fs_bar /home}
${color1}Windows  : $color${fs_used /windows/C} / ${fs_size /windows/C}
     $color${fs_used_perc /windows/C}% ${color2}${fs_bar /windows/C}

$stippled_hr
${color1}Ethernet : $color${addr eth0}
${color1}IP Distante : $color${execi 3600 wget -O - http://ip.tupeux.com | tail}
${color1}Download : $color${downspeed eth0} kiB/s ${alignr}${color1}Upload : $color${upspeed eth0} kiB/s
${color1}Total : $color${totaldown eth0} ${alignr}${color1}Total : $color${totalup eth0}
$stippled_hr
${color1}       Processeur$alignr${color}${color #B5141B}(%)  PID    CPU${color}
${color #FFFFFF}${top name 1} $alignr${top pid 1} ${top cpu 1}
${color #CACACA}${top name 2} $alignr${top pid 2} ${top cpu 2}
${color #A2A2A2}${top name 3} $alignr${top pid 3} ${top cpu 3}
${color #787878}${top name 4} $alignr${top pid 4} ${top cpu 4}

${color1}Mémoire$alignr${color}${color #B5141B}(%)  PID    MEM${color}
${color #FFFFFF}${top_mem name 1} $alignr${top_mem pid 1} ${top_mem mem 1}
${color #CACACA}${top_mem name 2} $alignr${top_mem pid 2} ${top_mem mem 2}
${color #A2A2A2}${top_mem name 3} $alignr${top_mem pid 3} ${top_mem mem 3}
${color #787878}${top_mem name 4} $alignr${top_mem pid 4} ${top_mem mem 4}$color
Conkyrc météo :
background yes
use_xft yes
xftfont Sans:size=9
xftalpha 0.8
update_interval 1.0
double_buffer yes

minimum_size 1 1
maximum_width 340

draw_shades no
draw_outline no
draw_borders no
draw_graph_borders yes

stippled_borders 0
border_margin 5
border_width 2

default_color green
default_shade_color black
default_outline_color green

own_window        yes
own_window_transparent    yes
own_window_type        override
own_window_hints    undecorated,below,sticky,skip_taskbar,skip_pager

alignment bottom_left
gap_x 25
gap_y -140

no_buffers yes
uppercase no
override_utf8_locale yes


color1 white
# light blue
color2 6892C6
# orange
#E77320
color3 FC8820
# green
color4 78BF39
# red
color5 CC0000
color6 8BAEE8

text_buffer_size 1024

TEXT
${offset -5}${color3}${font StyleBats:style=CleanCut:size=14} q ${font Terminus:style=Bold:size=11}Météo ${offset 5}${color3}${font StyleBats:style=CleanCut:size=14}q${color3}
${voffset 5}${goto 10}${font ConkyWeather:size=40}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=WF}${font}
${color1}${voffset 5}${goto 16}${font Sans:style=Bold:pixelsize=10}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=LT --hideunits}/ ${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=HT --hideunits}${font}
${color3}${voffset 10}${goto 10}${font ConkyWindNESW:size=50}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=BS}${font}
${color1}${voffset 5}${goto 10}${font Sans:style=Bold:pixelsize=10}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=WS} - ${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=WD -L fr}${font}
${color1}${voffset -130}${font Sans:style=Bold:pixelsize=10}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --template=/home/mat/conkyforecast.template}${font}${color3}
${voffset -75}${goto 10}${font ConkyWeather:size=32}${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=WF --startday=1 --endday=4 --spaces=3}${font}

${voffset 25}${color3}${font Sans:size=7}${alignr 20}Dernière mise à jour :  ${execi 1800 /home/mat/conkyforecast/conkyforecast/conkyForecast.py --location=FRXX0079 --datatype=LU}${font}
Et le template de conkyForecast :
                 Station : [--datatype=CN]
                                Conditions : [--datatype=CC]
                                Precipitations : [--datatype=PC --startday=0]
                                Indice UV : [--datatype=UI] - [--datatype=UT]
                                Humidite : [--datatype=HM]
                                Rosee : [--datatype=DP]
                                Soleil : [--datatype=SR] / [--datatype=SS]
                                Pression : [--datatype=BR] - [--datatype=BD]



    [--datatype=DW --startday=1 --shortweekday]               [--datatype=DW --startday=2 --shortweekday]               [--datatype=DW --startday=3 --shortweekday]                 [--datatype=DW --startday=4 --shortweekday]




  [--datatype=LT --startday=1 --hideunits --centeredwidth=3]/[--datatype=HT --startday=1 --hideunits --centeredwidth=3]          [--datatype=LT --startday=2 --hideunits --centeredwidth=3]/[--datatype=HT --startday=2 --hideunits --centeredwidth=3]          [--datatype=LT --startday=3 --hideunits --centeredwidth=3]/[--datatype=HT --startday=3 --hideunits --centeredwidth=3]           [--datatype=LT --startday=4 --hideunits --centeredwidth=3]/[--datatype=HT --startday=4 --hideunits --centeredwidth=3]
11 jours plus tard
Voila mon Conky avec toutes les étapes et dépendances 😉



.conkyrc
background        no
update_interval        1.0
double_buffer        yes

use_xft            yes
override_utf8_locale
xftfont         zekton:size=9
xftalpha        0.8

own_window        yes
own_window_transparent    yes
own_window_type        override
own_window_hints    undecorated,below,sticky,skip_taskbar,skip_pager

#on_bottom        yes

minimum_size        300 50
maximum_size        300 50
draw_shades        no
draw_outline        no
draw_borders        yes
draw_graph_borders    no
stippled_borders    0
border_margin        3
border_width        0

default_color        white

alignment        top_right
gap_x            6
gap_y            48

no_buffers        yes

${hr}

TEXT
${color #000000}${font DIST Yolks Emoticons:size=35}d${font}${color #FFFFFF}${font Federapolis:size=11}   .:: Bienvenue Vince ::.${font}${color #FFFFFF} 
${alignc} ***
${alignc} .: ${sysname}-${machine}-${kernel} :.
${alignc}${color #000000}Uptime${color #000000}:${color white} ${uptime}
${color #000000}${font DIST Yolks Emoticons:size=35}e${font}${color #000000}${alignc} .:: PC ::.${color #FFFFFF}

>${color #000000}CPU:${color #FFFFFF} ${cpu}% / ${freq}MHz   ${color #000000}Processus${color #000000}:${color white}   ${running_processes}/${color white}${processes} 
  ${color #000000}CPU${color #000000}: ${color #FFFFFF} ${acpitemp}°C ${cpubar}
>${color #000000}Memory${color #000000}:${color white} ${memperc}% /*/ ${color white} ${mem}${color #FFFFFF}/${color white}${memmax} 
  ${color #000000}MEM${color #000000}:${color white} ${membar}
>${color #000000}SWAP${color #000000}:${color white} ${swap}${color #000000}/${color white}${swapmax} 
  ${color #000000}SWP${color #000000}:${color white} ${swapbar}
>${color #000000}Battery${color #000000}:${color #FFFFFF} ${execi 15 ~/.conky/bat.pl}%
  ${color #000000}PWR${color #000000}:${color white} ${execibar 15 ~/.conky/bat.pl}
${color #FFFFFF}>${color #000000}Processus :${color #000000}
    Name              ${alignc}CPU% ${alignr}                       Name       RAM%${color #FFFFFF}
    ${top name 1}${alignc}${top cpu 1} ${alignr}${top_mem name 1}${top mem 1}
    ${top name 2}${alignc}${top cpu 2} ${alignr}${top_mem name 2}${top mem 2}
    ${top name 3}${alignc}${top cpu 3} ${alignr}${top_mem name 3}${top mem 3}

${color #FFFFFF}>${color #000000}HardDisk : ${alignr}${color #FFFFFF}${color #000000} HD 120G : ${color #FFFFFF}${execi 10 hddtemp -n /dev/sda}°C
${color #000000}          Files${alignc}${color #FFFFFF}${fs_used /media/Files}${color #FFFFFF} / ${color #FFFFFF}${fs_size /media/Files}
${fs_used_perc /media/Files}${color #FFFFFF}% ${color #FFFFFF}${fs_bar 5 /media/Files}
${color #000000}          /${alignc}${color #FFFFFF}${fs_used /}${color #FFFFFF} / ${color #FFFFFF}${fs_size /}
${fs_used_perc /}${color #FFFFFF}% ${color #FFFFFF}${fs_bar 5 /}
${color #000000}${font DIST Yolks Emoticons:size=35}l${font}${color #000000}${alignc} .:: REZO ::.

${color #000000}Ethernet${color #000000}:${color white} ${addr eth0}      ${alignr}${color #000000}WiFi${color #000000}:${color white} ${addr eth1}
DL : ${color #000000}[${color white}${downspeed eth0}k  .Total : ${color white}${totaldown eth0}${color #000000}]${color #FFFFFF}          ${alignr}DL : ${color #000000}[${color white}${downspeed eth1}k  .Total : ${color white}${totaldown eth1}${color #000000}]
${color #FFFFFF}UP :${color #000000} [${color white}${upspeed eth0}k  .Total : ${color white}${totalup eth0}${color #000000}]         ${alignr}${color #FFFFFF}UP :${color #000000} [${color white}${upspeed eth1}k  .Total : ${color white}${totalup eth1}${color #000000}]

${alignr}${color #000000}WiFi${color #000000}:${color white} ${wireless_essid eth1} ${color #000000}MAC${color #000000}:${color white}${wireless_ap eth1}
${color #000000}Mode${color #000000}:${color white} ${wireless_mode eth1} ${alignc}${color #000000}${alignc}Bitrate${color #000000}: ${color white}${wireless_bitrate eth1} ${alignr}${color #000000}[${color white}${wireless_link_qual_perc eth1}${color #000000}]
${color white}${wireless_link_bar eth1}
${if_running amarokapp}
${color #000000}${font DIST Yolks Emoticons:size=40}8${font}  ${color #000000}${alignc} .:: PLAYER ::.${color #FFFFFF}

${alignc}${execi 10 ~/.conky/amarok playing}
${alignc}"${execi 10 ~/.conky/amarok album}" - ${execi 10 ~/.conky/amarok year} - ${execi 10 ~/.conky/amarok genre}
${color white}${execi 1 ~/.conky/amarok current}${alignr}${execi 1 ~/.conky/amarok total}
${execibar 1 ~/.conky/amarok progress}${else}$endif
Au préalable :

>Fichier à créer :

.conky/amarok
#!/bin/bash
# amaroK info display script by eirc <eirc.eirc@gmail.com>

case "$1" in

# Now Playing Info
playing) dcop amarok player nowPlaying ;;
artist) dcop amarok player artist ;;
title)  dcop amarok player title ;;
album)  dcop amarok player album ;;
year)   dcop amarok player year ;;
genre)  dcop amarok player genre ;;
current) dcop amarok player currentTime ;;
total) dcop amarok player totalTime ;;


progress)
    curr=`dcop amarok player trackCurrentTime`
    tot=`dcop amarok player trackTotalTime`
    if (( $tot )); then
        expr $curr \* 100  / $tot
    fi
    ;;

esac
.conky/bat.pl
#!/usr/bin/env perl

##
# ACPI Battery Monitor Script for conky
# (c) 2006 BinaryShadow.org
# 
# Recommend compiling into bytecode with:
# $ perlcc -B -o bat bat.pl
##

use strict;
use warnings;

opendir(PROC_BATTERIES, '/proc/acpi/battery') or die;

my($tot_capacity,$cur_capacity,$curdir) = (0, 0, '');

while($curdir = readdir(PROC_BATTERIES)) {
  my($line) = '';
  if($curdir =~/^\./) {
    next;
  }
  open(BATTERY_STATE, '/proc/acpi/battery/'.$curdir.'/state') or next;
  while($line = <BATTERY_STATE>) {
    if($line =~/^present:\s+(yes|no)/) {
      if($1 eq 'yes') {
        while($line = <BATTERY_STATE>) {
          if($line =~/^remaining capacity:\s+([0-9]+)/) {
            $cur_capacity += $1;
            last;
          }
        }
        open(BATTERY_INFO, '/proc/acpi/battery/'.$curdir.'/info') or last;
        while($line = <BATTERY_INFO>) {
          if($line =~/^last full capacity:\s+([0-9]+)/) {
            $tot_capacity += $1;
            last;
          }
        }
        close(BATTERY_INFO);
      }
      last;
    }
  }
  close(BATTERY_STATE);
}

closedir(PROC_BATTERIES);

if ($tot_capacity != 0) {
    printf "%0.0f\n", (($cur_capacity / $tot_capacity) * 100);
} else {
    print "0.0\n";
}
>Polices à installer :

http://www.dafont.com/fr/yolks-emoticons.font

http://www.dafont.com/fr/zekton.font

http://www.dafont.com/fr/federapolis.font

________________________________________

>Paquets à installer (tuto fait sous Ubuntu les paquet était dans les dépôts)

lm-sensors
-------------
Hddtemp

Infos:
Hddtemp pour qu'il puisse être utiliser par n'importe qu'elle utilisateur.

Dans un terminal : sudo dpkg-reconfigure hddtemp
Répondre oui à "Voulez-vous installer /usr/sbin/hddtemp « setuid root » ? "
_____________________

>Commandes en su :

chmod +x

Utilisé pour :

chmod +x ~/.conky/amarok
chmod +x ~/.conky/bat.pl

Pour la Temp de vos Disques Durs

chmod +x /dev/sda
chmod +x /***/autre DD/
J'aime bien la police et les îcones (surtout pour Amarock)
19 jours plus tard
tu as cherché tu as trouvé ?

j'ai refait mon conky, simplifié, actualisé avec de jolies îcones... du simple. (à noter le if pour la météo, que cela n'affiche pas n'importe quoi quand il n'y a pas de réseau, ainsi que le if pour le Wifi, il m'affiche les caractéristiques uniquement en wifi si je suis connecté par ce moyen)



Reste à trouver quand j'aurais le temps un moyen de changer l'espace restant en 'GiB' en ' Go' je n'ai pas trouvé l'endroit où je pouvais changer les unité dans conky.

mon conkyrc :
# Configuration de Conky
#
# la liste des variables a été enlevée de ce fichier en faveur
# de la documentation.
# Visitez http://conky.sf.net pour une liste à jour.

color0 ff6300
color1 88bbff
color2 aaaaaa

# La "zone de texte" est la fenêtre Conky (et non uniquement le texte).

# Mettez yes si vous voulez que Conky soit intégré à l'arrière plan
background yes

# Police de X quand Xft est désactivé, vous pouvez en choisir une avec le programme xfontsel
#font 5x7
#font 6x10
#font 7x13
#font 8x13
#font 9x15
#font *mintsmild.se*
#font -*-*-*-*-*-*-34-*-*-*-*-*-*-*

# Utiliser Xft?
use_xft yes

# Police de Xft quand Xft est activé
xftfont Radio Space:size=8

# Texte alpha quand Xft est utilisé
xftalpha 0.8

# MPD hôte/port
# mpd_host localhost
# mpd_port 6600
# mpd_password tinker_bell

# Tout imprimer vers console ?
out_to_console no

# Boîte mail (? : mail spool)
mail_spool $MAIL

# Intervalles de mises à jour en secondes
update_interval 0.50

# Ceci est le nombre de fois que Conky va se mettre à jour avant de quitter
# Mettre à zéro pour faire tourner en permanence
total_run_times 0

# Créer sa propre fenêtre au lieu d'utiliser le bureau (requis dans Nautilus) ?
own_window yes

# Si own_window est sur yes, vous pouvez utiliser les options normal, desktop ou override
own_window_type override

# Utiliser le fond transparent avec own_window ?
own_window_transparent yes

# Si own_window_transparent est sur no, vous pouvez changer la couleur de fond ici
own_window_colour hotpink

# Si own_window est sur yes, ces options du gestionnaire de fenêtre peuvent être utilisées
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

# Utiliser le double buffering (réduit le scintillement, peut ne pas fonctionner avec tout le monde) ?
double_buffer yes

# Taille minimum de la zone de texte
minimum_size 150 200

# Dessiner les ombres ?
draw_shades no

# Dessiner les contours ?
draw_outline no

# Dessiner les bordures autour du texte ?
draw_borders no

# Dessiner les bordures autour des graphes ?
draw_graph_borders no

# Longueur des traits des séparateurs
stippled_borders 10

# Marge entre la bordure et le texte
border_margin 4

# Épaisseur de la bordure
border_width 1

# Couleur par défaut et couleur de la bordure
default_color white
default_shade_color black
default_outline_color black

# Alignement du texte, les autres options possibles sont expliquées (sûrement sur le site web)
#alignment top_left
alignment top_right
#alignment bottom_left
#alignment bottom_right
#alignment none

# Espace entre les bords d'écran et le texte
# same thing as passing -x at command line (aucune idée de comment traduire ceci)
gap_x 15
gap_y 200

# Soustraire les buffers du système de fichiers de la mémoire utilisée (? :subtract file system buffers from used memory) ?
no_buffers no

# Mettez yes si vous voulez que tout le texte soit en majuscules
uppercase no

# Nombre d'échantillons CPU pour faire la moyenne
# Mettre sur 1 pour désactiver la moyenne
cpu_avg_samples 2

# Nombre d'échantillons réseau pour faire la moyenne
# Mettre sur 1 pour désactiver la moyenne
net_avg_samples 2

# Forcer UTF8 ? À noter que le support UTF8 requiert XFT
override_utf8_locale yes

# Ajouter des espaces pour empêcher les objets de partir n'importe où ? Ceci affecte seulement certains objets
use_spacer none

# Autoriser chaque moniteur de port à suivre au plus tant de connections (si 0 ou not est mis, le nombre par défaut est 256) ?
#max_port_monitor_connections 256

# Nombre maximum d'objets spéciaux, ex : polices, décalages, alignements, etc. Pas bien compris ça moi...
#max_specials 512

# Taille maximum du buffer utilisateur pour le texte, c'est à dire sous la ligne TEXT
#max_user_text 16384

# Intervalle de mise à jour pour le démon du lecteur de musique, ex : mpd, audacious
#music_player_interval 3

# La variable est donnée soit au format $variable soit au format ${variable}. Cette dernière
# permet les caractères justes après la variable et doit être utilisée dans les
# trucs du réseau à cause d'un argument.

# Ce qui est placé après 'TEXT' apparaîtra à l'écran.

TEXT
${color1}${font StyleBats:size=15}x ${font}/    $alignc${color white}${fs_free /} $alignr${fs_bar 6,30 /}
${color1}${font StyleBats:size=15}n ${font}SOV  $alignc${color white}${fs_free /media/SOV} $alignr${fs_bar 6,30 /media/SOV}
${if_existing /proc/net/route wlan0}
${color1}Wifi: $color${wireless_link_qual wlan0}%  ${color1}Débit: $color${wireless_bitrate wlan0} ${wireless_link_qual_perc wlan0}%  ${wireless_link_bar 6,30 wlan0}$endif

${if_existing /proc/net/route eth0}
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky1Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python /home/thib/scripts/conkyForecast.py --location=FRXX0135  --startday=1 --endday=1 --datatype=WF --spaces=2}$font$color
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky2Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python /home/thib/scripts/conkyForecast.py --location=FRXX0135 --startday=2 --endday=2 --datatype=WF --spaces=2}$font$color
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky3Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python ~/scripts/conkyForecast.py --location=FRXX0135 --datatype=WF}${font}
$endif
${if_existing /proc/net/route wlan0}
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky1Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python /home/thib/scripts/conkyForecast.py --location=FRXX0135  --startday=1 --endday=1 --datatype=WF --spaces=2}$font$color
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky2Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python /home/thib/scripts/conkyForecast.py --location=FRXX0135 --startday=2 --endday=2 --datatype=WF --spaces=2}$font$color
${font Bitstream Vera Sans:size=7} ${execi 3600 python /home/thib/scripts/conkyForecast.py --locale=fr --location=FRXX0135 --template=/home/thib/scripts/conky3Days.template}
${offset 100}${voffset -33}${font Weather:size=30}${color0}${execi 3600 python ~/scripts/conkyForecast.py --location=FRXX0135 --datatype=WF}${font}
$endif
$endif$color
${color1}${font StyleBats:size=15}i$font CPU: $alignr$color${execi 10 sensors | grep 'Core 1' | cut -c15-16} °C
${color1}${font StyleBats:size=15}j$font HDD: $alignr$color${execi 12 hddtemp -n /dev/sda} °C
${color1}${font StyleBats:size=15}u$font GPU: $alignr$color${execi 10 nvclock -T | grep "temperature" | grep '[0-9][0-9]' -o} °C
un script conky1Days.template :
{--datatype=DW --startday=1 --shortweekday}   {--datatype=LT --startday=1 --hideunits}/{--datatype=HT --startday=1}
le conkyForecast.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
###############################################################################
# conkyForecast.py is a (not so) simple (anymore) python script to gather 
# details of the current weather for use in conky.
#
#  Author: Kaivalagi
# Created: 13/04/2008
# Modifications:
#    14/04/2008    Allow day ranges for forecast data
#    14/04/2008    Check for connectivity to xoap service
#    18/04/2008    Allow the setting of spaces for ranged output
#    18/04/2008    Allow Night and Day forecast output
#    18/04/2008    Support locale for condition code text "CC" option, awaiting spanish language translation
#    18/04/2008    Use pickling for class data rather than opening xml, this bypasses the need to interrogate cached data
#    19/04/2008    Added spanish condition text - Thanks Bruce M
#    19/04/2008    Added isnumeric check on all numeric output with units suffix
#    19/04/2008    Altered pickle file naming to include location code
#    19/04/2008    Added spanish week days conversion via locale
#    20/04/2008    Added decent command argument parser
#    20/04/2008    Added --shortweekday option, if given the day of week data type is shortened to 3 characters
#    21/04/2008    Fixed locale options for forecast output
#    21/04/2008    Added --template option to allow custom output using a single exec call :)
#    21/04/2008    Added --hideunits option to remove, for example, mph and C from output
#    23/04/2008    Removed --imperial option from template, this MUST be set as a standard option on the script call and not used in the template file. 
#    23/04/2008    Readded --imperial option to template, enabling metric or imperial values per datatype. Note when using templates command line option will not work.
#    23/04/2008    Added output notifying user if the location given is bad
#    24/04/2008    Added handling for no connectivity, will revert to cached data now (erroring if no cache exists). Tests by trying to open xoap.weather.com
#    24/04/2008    Fixed Celsius to fahrenheit conversion
#    06/05/2008    Updated url used after webservice was updated
#    09/05/2008    Consolidated current condition and forecast data fetch into one call
#    09/05/2008    Added Sunrise and sunset to datatypes, these are specific to both current conditions and forecast data
#    09/05/2008    Added moon phase, barometer reading and barometer description to datatypes, these are only specific to current conditions and so are N/A in forecasted output
#    09/05/2008    Added unit conversions for barometer from mb to inches (imperial)
#   09/05/2008  Updated spanish condition text - Thanks Bruce M
#   10/05/2008  Added french locale data - Thanks benpaka
#   12/05/2008  Added new BF (bearing font) datatype to provide an arrow character (use with Arrow.ttf font) instead of NSEW output from WD (wind direction)
#   12/05/2008  Updated WD output to be locale specific, currently supports default english and spanish - Thanks Bruce M
#    18/05/2008    Added new MF (moon font) datatype to provide a moon font character (characters incorrect and no dedicated font yet).
#    21/05/2008    For current conditions the --datatype=LT option now displays "feels like" temperature rather than the current temperature
#    28/05/2008    Arrows reported to be pointing in the wrong direction. Correction provided by jjgomera
#    03/06/2008    Updated MF function, added days #26, #27, #28 nad #29 to complete the cycle. Corrections provided by Bruce M/uboops/HippyRandall
#
# TODO:
# Consolidate pkl files into one file/class
# ??? Any more requirements out there?

import sys, os, socket, urllib2, datetime, time
from xml.dom import minidom
from stat import *
from optparse import OptionParser
import locale
import gettext
import pickle
from math import *

APP="conkyForecast.py"
DIR=os.path.dirname (__file__) + '/locale'
gettext.bindtextdomain(APP, DIR)
gettext.textdomain(APP)
_ = gettext.gettext

class CommandLineParser:

    parser = None

    def __init__(self):

        self.parser = OptionParser()
        self.parser.add_option("-l","--location", dest="location", default="UKXX0103", type="string", metavar="CODE", help=u"location code for weather data [default: %default],Use the following url to determine your location code by city name: http://xoap.weather.com/search/search?where=Norwich")
        self.parser.add_option("-d","--datatype",dest="datatype", default="HT", type="string", metavar="DATATYPE", help=u"[default: %default] The data type options are: DW (Day Of Week), WF (Weather Font Output), LT (Forecast:Low Temp,Current:Feels Like Temp), HT (Forecast:High Temp,Current:Current Temp), CC (Current Conditions), CT (Conditions Text), PC (Precipitation Chance), HM (Humidity), WD (Wind Direction), WS (Wind Speed), WG (Wind Gusts), CN (City Name), SR (sunrise), SS (sunset), MP (moon phase), MF (moon font), BR (barometer reading), BD (barometer description). Not applicable at command line when using templates.")
        self.parser.add_option("-s","--startday",dest="startday", type="int", metavar="NUMBER", help=u"define the starting day number, if omitted current conditions are output. Not applicable at command line when using templates.")
        self.parser.add_option("-e","--endday",dest="endday", type="int", metavar="NUMBER", help=u"define the ending day number, if omitted only starting day data is output. Not applicable at command line when using templates.")
        self.parser.add_option("-S","--spaces",dest="spaces", type="int", default=1, metavar="NUMBER", help=u"[default: %default] Define the number of spaces between ranged output. Not applicable at command line when using templates.")
        self.parser.add_option("-t","--template",dest="template", type="string", metavar="FILE", help=u"define a template file to generate output in one call. A displayable item in the file is in the form {--datatype=HT --startday=1}. The following are possible options within each item: --datatype,--startday,--endday,--night,--shortweekday,--imperial,--hideunits,--spaces . Note that the short forms of the options are not currently supported! None of these options are applicable at command line when using templates.")
        self.parser.add_option("-L","--locale",dest="locale", type="string", help=u"override the system locale for language output (en=english, es=spanish, fr=french, more to come)")
        self.parser.add_option("-i","--imperial",dest="imperial", default=False, action="store_true", help=u"request imperial units, if omitted output is in metric. Not applicable at command line when using templates.")
        self.parser.add_option("-n","--night",dest="night", default=False, action="store_true", help=u"switch output to night data, if omitted day output will be output. Not applicable at command line when using templates.")
        self.parser.add_option("-w","--shortweekday",dest="shortweekday", default=False, action="store_true", help=u"Shorten the day of week data type to 3 characters. Not applicable at command line when using templates.")
        self.parser.add_option("-u","--hideunits",dest="hideunits", default=False, action="store_true", help=u"Hide units such as mph or C, degree symbols (°) are still shown. Not applicable at command line when using templates.")
        self.parser.add_option("-v","--verbose",dest="verbose", default=False, action="store_true", help=u"request verbose output, no a good idea when running through conky!")
        self.parser.add_option("-r","--refetch",dest="refetch", default=False, action="store_true", help=u"fetch data regardless of data expiry")

    def parse_args(self):
        (options, args) = self.parser.parse_args()
        return (options, args)

    def print_help(self):
        return self.parser.print_help()

class WeatherData:
    def __init__(self, day_of_week, low, high, condition_code, condition_text, precip, humidity, wind_dir, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc):
        self.day_of_week = u""+day_of_week
        self.low = u""+low
        self.high = u""+high
        self.condition_code = u""+condition_code
        self.condition_text = u""+condition_text
        self.precip = u""+precip
        self.humidity = u""+humidity
        self.wind_dir = u""+wind_dir
        self.wind_speed = u""+wind_speed
        self.wind_gusts = u""+wind_gusts
        self.city = u""+city
        self.sunrise = u""+sunrise
        self.sunset = u""+sunset
        self.moon_phase = u""+moon_phase
        self.moon_icon = u""+moon_icon        
        self.bar_read = u""+bar_read
        self.bar_desc = u""+bar_desc


class WeatherText:

    conditions_text = {
        "0": _(u"Tornado"),
        "1": _(u"Tropical Storm"),
        "2": _(u"Hurricane"),
        "3": _(u"Severe Thunderstorms"),
        "4": _(u"Thunderstorms"),
        "5": _(u"Mixed Rain and Snow"),
        "6": _(u"Mixed Rain and Sleet"),
        "7": _(u"Mixed Precipitation"),
        "8": _(u"Freezing Drizzle"),
        "9": _(u"Drizzle"),
        "10": _(u"Freezing Rain"),
        "11": _(u"Showers"),
        "12": _(u"Showers"),
        "13": _(u"Snow Flurries"),
        "14": _(u"Light Snow Showers"),
        "15": _(u"Blowing Snow"),
        "16": _(u"Snow"),
        "17": _(u"Hail"),
        "18": _(u"Sleet"),
        "19": _(u"Dust"),
        "20": _(u"Fog"),
        "21": _(u"Haze"),
        "22": _(u"Smoke"),
        "23": _(u"Blustery"), 
        "24": _(u"Windy"),
        "25": _(u"Cold"),
        "26": _(u"Cloudy"),
        "27": _(u"Mostly Cloudy"),
        "28": _(u"Mostly Cloudy"),
        "29": _(u"Partly Cloudy"),
        "30": _(u"Partly Cloudy"),
        "31": _(u"Clear"),
        "32": _(u"Clear"),
        "33": _(u"Fair"),
        "34": _(u"Fair"),
        "35": _(u"Mixed Rain and Hail"),
        "36": _(u"Hot"),
        "37": _(u"Isolated Thunderstorms"),
        "38": _(u"Scattered Thunderstorms"),
        "39": _(u"Scattered Thunderstorms"),
        "40": _(u"Scattered Showers"),
        "41": _(u"Heavy Snow"),
        "42": _(u"Scattered Snow Showers"),
        "43": _(u"Heavy Snow"),
        "44": _(u"Partly Cloudy"),
        "45": _(u"Thunder Showers"),
        "46": _(u"Snow Showers"),
        "47": _(u"Isolated Thunderstorms"),
        "na": _(u"N/A"),
        "-": _(u"N/A")
    }

    conditions_text_es = {
        "0": _(u"Tornado"),
        "1": _(u"Tormenta Tropical"),
        "2": _(u"Huracá¡n"),
        "3": _(u"Tormentas Fuertes"),
        "4": _(u"Tormentas"),
        "5": _(u"Lluvia y Nieve Mezclada"),
        "6": _(u"Lluvia y Aguanieve Mezclada"),
        "7": _(u"Aguanieve"),
        "8": _(u"Llovizna Helada"),
        "9": _(u"Llovizna"),
        "10": _(u"Lluvia Engelante"), # o lluvia helada
        "11": _(u"Chaparrones"),
        "12": _(u"Chaparrones"),
        "13": _(u"Nieve Ligera"),
        "14": _(u"Nieve Ligera"),
        "15": _(u"Ventisca de Nieve"),
        "16": _(u"Nieve"),
        "17": _(u"Granizo"),
        "18": _(u"Aguanieve"),
        "19": _(u"Polvo"),
        "20": _(u"Niebla"),
        "21": _(u"Bruma"),
        "22": _(u"Humo"),
        "23": _(u"Tempestad"),
        "24": _(u"Ventoso"),
        "25": _(u"Fráo"),
        "26": _(u"Muy Nublado"),
        "27": _(u"Principalmente Nublado"),
        "28": _(u"Principalmente Nublado"),
        "29": _(u"Parcialmente Nublado"),
        "30": _(u"Parcialmente Nublado"),
        "31": _(u"Despejado"),
        "32": _(u"Despejado"),
        "33": _(u"Algo Nublado"),
        "34": _(u"Algo Nublado"),
        "35": _(u"Lluvia con Granizo"),
        "36": _(u"Calor"),
        "37": _(u"Tormentas Aisladas"),
        "38": _(u"Tormentas Dispersas"),
        "39": _(u"Tormentas Dispersas"),
        "40": _(u"Chubascos Dispersos"),
        "41": _(u"Nieve Pesada"),
        "42": _(u"Nevadas Débiles y Dispersas"),
        "43": _(u"Nevada Intensa"),
        "44": _(u"Nubes Dispersas"),
        "45": _(u"Tormentas"),
        "46": _(u"Nevadas Dispersas"),
        "47": _(u"Tormentas Aisladas"),
        "na": _(u"N/A"),
        "-": _(u"N/A")
    }

    conditions_text_fr = {
        "0": _(u"Tornade"),
        "1": _(u"Tempête Tropicale"),
        "2": _(u"Ouragan"),
        "3": _(u"Orages Violents"),
        "4": _(u"Orageux"),
        "5": _(u"Pluie et Neige"),
        "6": _(u"Pluie et Neige Mouillée"),
        "7": _(u"Variable avec averses"),
        "8": _(u"Bruine Givrante"),
        "9": _(u"Bruine"),
        "10": _(u"Pluie Glacante"),
        "11": _(u"Averses"),
        "12": _(u"Averses"),
        "13": _(u"Légère Neige"),
        "14": _(u"Forte Neige"),
        "15": _(u"Tempête de Neige"),
        "16": _(u"Neige"),
        "17": _(u"Grêle"),
        "18": _(u"Pluie/Neige"),
        "19": _(u"Nuage de poussière"),
        "20": _(u"Brouillard"),
        "21": _(u"Brume"),
        "22": _(u"Fumée"),
        "23": _(u"Tres Venteux"),
        "24": _(u"Venteux"),
        "25": _(u"Froid"),
        "26": _(u"Nuageux"),
        "27": _(u"Tres Nuageux"),
        "28": _(u"Tres Nuageux"),
        "29": _(u"Nuages Disséminés"),
        "30": _(u"Nuages Disséminés"),
        "31": _(u"Beau"),
        "32": _(u"Beau"),
        "33": _(u"Belles Éclaircies"),
        "34": _(u"Belles Éclaircies"),
        "35": _(u"Pluie avec Grêle"),
        "36": _(u"Chaleur"),
        "37": _(u"Orages Isolés"),
        "38": _(u"Orages Localisés"),
        "39": _(u"Orages Localisés"),
        "40": _(u"Averses Localisées"),
        "41": _(u"Neige Lourde"),
        "42": _(u"Tempête de Neige Localisées"),
        "43": _(u"Neige Lourde"),
        "44": _(u"Nuages Disséminés"),
        "45": _(u"Orages"),
        "46": _(u"Tempête de Neige"),
        "47": _(u"Orages Isolés"),
        "na": _(u"N/A"),
        "-": _(u"N/A")
    }
    
    conditions_weather_font = {
        "0": _(u"W"),
        "1": _(u"V"),
        "2": _(u"W"),
        "3": _(u"s"),
        "4": _(u"p"),
        "5": _(u"k"),
        "6": _(u"k"),
        "7": _(u"g"),
        "8": _(u"g"),
        "9": _(u"g"),
        "10": _(u"h"),
        "11": _(u"g"),
        "12": _(u"g"),
        "13": _(u"k"),
        "14": _(u"k"),
        "15": _(u"k"),
        "16": _(u"k"),
        "17": _(u"k"),
        "18": _(u"k"),
        "19": _(u"e"),
        "20": _(u"e"),
        "21": _(u"a"),
        "22": _(u"d"),
        "23": _(u"d"), 
        "24": _(u"d"),
        "25": _(u"d"),
        "26": _(u"e"),
        "27": _(u"e"),
        "28": _(u"e"),
        "29": _(u"c"),
        "30": _(u"c"),
        "31": _(u"a"),
        "32": _(u"a"),
        "33": _(u"b"),
        "34": _(u"b"),
        "35": _(u"k"),
        "36": _(u"a"),
        "37": _(u"f"),
        "38": _(u"f"),
        "39": _(u"f"),
        "40": _(u"g"),
        "41": _(u"k"),
        "42": _(u"k"),
        "43": _(u"k"),
        "44": _(u"b"),
        "45": _(u"g"),
        "46": _(u"k"),
        "47": _(u"f"),
        "na": _(u""),
        "-": _(u"")
    }

    conditions_moon_font = {
        "0": _(u"1"),
        "1": _(u"N"),
        "2": _(u"O"),
        "3": _(u"P"),
        "4": _(u"Q"),
        "5": _(u"R"),
        "6": _(u"S"),
        "7": _(u"T"),
        "8": _(u"U"),
        "9": _(u"V"),
        "10": _(u"W"),
        "11": _(u"X"),
        "12": _(u"Y"),
        "13": _(u"Z"),
        "14": _(u"0"),
        "15": _(u"0"),
        "16": _(u"A"),
        "17": _(u"B"),
        "18": _(u"C"),
        "19": _(u"D"),
        "20": _(u"E"),
        "21": _(u"F"),
        "22": _(u"G"),
        "23": _(u"H"),
        "24": _(u"I"),
        "25": _(u"J"),
        "26": _(u"K"),
        "27": _(u"L"),
        "28": _(u"M"),
        "29": _(u"1"),
        "na": _(u""),
        "-": _(u"")
    }
        
    day_of_week = {
        "Today": _(u"Today"),
        "Monday": _(u"Monday"),
        "Tuesday": _(u"Tuesday"),
        "Wednesday": _(u"Wednesday"),
        "Thursday": _(u"Thursday"),
        "Friday": _(u"Friday"),
        "Saturday": _(u"Saturday"),
        "Sunday": _(u"Sunday")
    }

    day_of_week_short = {
        "Today": _(u"Now"),
        "Monday": _(u"Mon"),
        "Tuesday": _(u"Tue"),
        "Wednesday": _(u"Wed"),
        "Thursday": _(u"Thu"),
        "Friday": _(u"Fri"),
        "Saturday": _(u"Sat"),
        "Sunday": _(u"Sun")
    }

    day_of_week_es = {
        "Today": _(u"hoy"),
        "Monday": _(u"lunes"),
        "Tuesday": _(u"martes"),
        "Wednesday": _(u"miércoles"),
        "Thursday": _(u"jueves"),
        "Friday": _(u"viernes"),
        "Saturday": _(u"sábado"),
        "Sunday": _(u"domingo")
    }

    day_of_week_short_es = {
        "Today": _(u"hoy"),
        "Monday": _(u"lun"),
        "Tuesday": _(u"mar"),
        "Wednesday": _(u"mié"),
        "Thursday": _(u"jue"),
        "Friday": _(u"vie"),
        "Saturday": _(u"sáb"),
        "Sunday": _(u"dom")
    }

    day_of_week_fr = {
        "Today": _(u"Aujourd'hui"),
        "Monday": _(u"Lundi"),
        "Tuesday": _(u"Mardi"),
        "Wednesday": _(u"Mercredi"),
        "Thursday": _(u"Jeudi"),
        "Friday": _(u"Vendredi"),
        "Saturday": _(u"Samedi"),
        "Sunday": _(u"Dimanche")
    }

    day_of_week_short_fr = {
        "Today": _(u"Auj"),
        "Monday": _(u"Lun"),
        "Tuesday": _(u"Mar"),
        "Wednesday": _(u"Mer"),
        "Thursday": _(u"Jeu"),
        "Friday": _(u"Ven"),
        "Saturday": _(u"Sam"),
        "Sunday": _(u"Dim")
    }

    bearing_arrow_font = {
        "N": _(u"i"),
        "NNE": _(u"j"),
        "NE": _(u"k"),
        "ENE": _(u"l"),
        "E": _(u"m"),
        "ESE": _(u"n"),
        "SE": _(u"o"),
        "SSE": _(u"p"),
        "S": _(u"a"),
        "SSW": _(u"b"),
        "SW": _(u"c"),
        "WSW": _(u"d"),
        "W": _(u"e"),
        "WNW": _(u"f"),
        "NW": _(u"g"),
        "NNW": _(u"h"),
        "N/A": _(u" ")
    }

    bearing_text_es = {
        "N": _(u"N"),
        "NNE": _(u"NNE"),
        "NE": _(u"NE"),
        "ENE": _(u"ENE"),
        "E": _(u"E"),
        "ESE": _(u"ESE"),
        "SE": _(u"SE"),
        "SSE": _(u"SSE"),
        "S": _(u"S"),
        "SSW": _(u"SSO"),
        "SW": _(u"SO"),
        "WSW": _(u"WOW"),
        "W": _(u"O"),
        "WNW": _(u"ONO"),
        "NW": _(u"NO"),
        "NNW": _(u"NNO"),
        "N/A": _(u"N\A")
    }

    bearing_text_fr = {
        "N": _(u"N"),
        "NNE": _(u"NNE"),
        "NE": _(u"NE"),
        "ENE": _(u"ENE"),
        "E": _(u"E"),
        "ESE": _(u"ESE"),
        "SE": _(u"SE"),
        "SSE": _(u"SSE"),
        "S": _(u"S"),
        "SSW": _(u"SSO"),
        "SW": _(u"SO"),
        "WSW": _(u"WOW"),
        "W": _(u"O"),
        "WNW": _(u"ONO"),
        "NW": _(u"NO"),
        "NNW": _(u"NNO"),
        "N/A": _(u"N\A")        
    }
              
class GlobalWeather:

    current_conditions = []
    day_forecast = []
    night_forecast = []

    locale = "en"

    options = None
    weatherxmldoc = ""

     TEMP_FILEPATH_CURRENT = "/tmp/conkyForecast-c-LOCATION.pkl"
    TEMP_FILEPATH_DAYFORECAST = "/tmp/conkyForecast-df-LOCATION.pkl"
    TEMP_FILEPATH_NIGHTFORECAST = "/tmp/conkyForecast-nf-LOCATION.pkl"
     EXPIRY_MINUTES = 10
    DEFAULT_SPACING = u" "
        

    def __init__(self,options):

        self.options = options
        
        if self.options.locale == None:
            try:
                self.locale = locale.getdefaultlocale()[0][0:2]
                #self.locale = "es" #uncomment this line to force Spanish locale
                #self.locale = "fr" #uncomment this line to force French locale                
            except:
                print "locale not set"
        else:
            self.locale = self.options.locale
            #self.locale = "es" #uncomment this line to force Spanish locale
            #self.locale = "fr" #uncomment this line to force French locale    

        if self.options.verbose == True:
            print >> sys.stdout, "locale set to ",self.locale

    def getText(self,nodelist):
        rc = ""
        for node in nodelist:
            if node.nodeType == node.TEXT_NODE:
                rc = rc + node.data
        return rc


    def getSpaces(self,spaces):
        string = u""
        if spaces == None:
            string = self.DEFAULT_SPACING
        else:
            for i in range(0, spaces+1):
                string = string + u" "
        return string


    def isNumeric(self,string):
        try:
            dummy = float(string)
            return True
        except:
            return False

    def isConnectionAvailable(self):
        # ensure we can access weather.com's server by opening the url
        try:
            usock = urllib2.urlopen('http://xoap.weather.com')
            usock.close()
            return True
        except:
            return False

    def getBearingText(self,bearing):
        bearing = float(bearing)
        if bearing < 11.25:
            return u"N"
        elif bearing < 33.75:
            return u"NNE"
        elif bearing < 56.25:
            return u"NE"
        elif bearing < 78.75:
            return u"ENE"
        elif bearing < 101.25:
            return u"E"
        elif bearing < 123.75:
            return u"ESE"
        elif bearing < 146.25:
            return u"SE"
        elif bearing < 168.75:
            return u"SSE"
        elif bearing < 191.25:
            return u"S"
        elif bearing < 213.75:
            return u"SSW"
        elif bearing < 236.25:
            return u"SW"
        elif bearing < 258.75:
            return u"WSW"
        elif bearing < 281.25:
            return u"W"
        elif bearing < 303.75:
            return u"WNW"
        elif bearing < 326.25:
            return u"NW"
        elif bearing < 348.75:
            return u"NNW"
        else:
            return "N/A"

    def convertCelsiusToFahrenheit(self,temp):
        return str(int(floor(((float(temp)*9.0)/5.0)+32)))

    def convertKilometresToMiles(self,dist):
        return str(int(floor(float(dist)*0.621371192)))

    def convertMillibarsToInches(self,mb):
        return str(int(floor(float(mb)/33.8582)))

    def getTemplateList(self,template):

        templatelist = []
    
        for template_part in template.split("{"):
            if template_part != "":
                for template_part in template_part.split("}"):
                    if template_part != "":
                        templatelist.append(u""+template_part)

        return templatelist


    def getOutputText(self,datatype,startday,endday,night,shortweekday,imperial,hideunits,spaces):
        #try:
            output = u""
        
            # define current units for output
            if hideunits == False:
                if imperial == False:
                    tempunit = u"°C"
                    speedunit = u"kph"
                    pressureunit = u"mb"
                else:
                    tempunit = u"°F"
                    speedunit = u"mph"
                    pressureunit = u"in"
            else:
                tempunit = u"°"
                speedunit = u""
                pressureunit = u""

            if startday == None: # current conditions

                if datatype == "DW":
                    if self.locale == "es":
                        if shortweekday == True:
                            output = WeatherText.day_of_week_short_es[self.current_conditions[0].day_of_week]
                        else:
                            output = WeatherText.day_of_week_es[self.current_conditions[0].day_of_week]
                    elif self.locale == "fr":
                        if shortweekday == True:
                            output = WeatherText.day_of_week_short_fr[self.current_conditions[0].day_of_week]
                        else:
                            output = WeatherText.day_of_week_fr[self.current_conditions[0].day_of_week]                            
                    else:
                        if shortweekday == True:
                            output = WeatherText.day_of_week_short[self.current_conditions[0].day_of_week]
                        else:
                            output = WeatherText.day_of_week[self.current_conditions[0].day_of_week]
                elif datatype == "WF": # weather font
                    output = WeatherText.conditions_weather_font[self.current_conditions[0].condition_code]
                elif datatype == "LT":
                    string = self.current_conditions[0].low
                    if self.isNumeric(string) == True:
                        if imperial == True:
                            string = self.convertCelsiusToFahrenheit(string)
                        string = string + tempunit
                    output = string
                elif datatype == "HT":
                    string = self.current_conditions[0].high
                    if self.isNumeric(string) == True:
                        if imperial == True:
                            string = self.convertCelsiusToFahrenheit(string)
                        string = string + tempunit
                    output = string
                elif datatype == "CC":
                    if self.locale == "es":
                        output = WeatherText.conditions_text_es[self.current_conditions[0].condition_code]
                    elif self.locale == "fr":
                        output = WeatherText.conditions_text_fr[self.current_conditions[0].condition_code]                        
                    else:
                        output = WeatherText.conditions_text[self.current_conditions[0].condition_code] 
                elif datatype == "CT":
                    output = self.current_conditions[0].condition_text
                elif datatype == "PC":
                    string = self.current_conditions[0].precip
                    if self.isNumeric(string) == True:
                        string = string + u"%"
                    output = string
                elif datatype == "HM":
                    string = self.current_conditions[0].humidity
                    if self.isNumeric(string) == True:
                        string = string + u"%"
                    output = string
                elif datatype == "WD":
                    string = self.current_conditions[0].wind_dir
                    if self.isNumeric(string) == True:
                        string = self.getBearingText(string)
                        
                    if self.locale == "es":
                        output = WeatherText.bearing_text_es[string]
                    elif self.locale == "fr":
                        output = WeatherText.bearing_text_fr[string]
                    else:
                        output = string
                                            
                elif datatype == "BF":
                    string = self.current_conditions[0].wind_dir
                    if self.isNumeric(string) == True:
                        string = WeatherText.bearing_arrow_font[self.getBearingText(string)]
                    output = string                    
                elif datatype == "WS":
                    string = self.current_conditions[0].wind_speed
                    if self.isNumeric(string) == True:
                        if imperial == True:
                            string = self.convertKilometresToMiles(string)
                        string = string + speedunit
                    output = string
                elif datatype == "WG":
                    string = self.current_conditions[0].wind_gusts
                    if self.isNumeric(string) == True:
                        if imperial == True:
                            string = self.convertKilometresToMiles(string)
                        string = string + speedunit
                    output = string
                elif datatype == "CN":
                    output = self.current_conditions[0].city
                elif datatype == "SR":
                    output = self.current_conditions[0].sunrise
                elif datatype == "SS":
                    output = self.current_conditions[0].sunset
                elif datatype == "MP":
                    output = self.current_conditions[0].moon_phase
                elif datatype == "MF":
                    output = WeatherText.conditions_moon_font[self.current_conditions[0].moon_icon]                            
                elif datatype == "BR":
                    string = self.current_conditions[0].bar_read
                    if self.isNumeric(string) == True:
                        if imperial == True:
                            string = self.convertMillibarsToInches(string)
                        string = string + pressureunit
                    output = string
                elif datatype == "BD":
                    output = self.current_conditions[0].bar_desc
                else:
                    output = "\nERROR:Unknown data type requested"

            else: # forecast data

                if endday == None: # if no endday was set use startday
                    endday = startday

                if night == True: # night forecast required

                    for day_number in range(startday, endday+1):

                        if datatype == "DW":
                            if self.locale == "es":
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_es[self.night_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_es[self.night_forecast[day_number].day_of_week]
                            elif self.locale == "fr":
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_fr[self.night_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_fr[self.night_forecast[day_number].day_of_week]
                            else:
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short[self.night_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week[self.night_forecast[day_number].day_of_week]
                        elif datatype == "WF": # weather font
                            output = output + self.getSpaces(spaces) + WeatherText.conditions_weather_font[self.night_forecast[day_number].condition_code]
                        elif datatype == "LT":
                            string = self.night_forecast[day_number].low
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertCelsiusToFahrenheit(string)
                                string = string + tempunit
                            output = output + self.getSpaces(spaces) + string

                        elif datatype == "HT":
                            string = self.night_forecast[day_number].high
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertCelsiusToFahrenheit(string)
                                string = string + tempunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "CC":
                            if self.locale == "es":
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text_es[self.night_forecast[day_number].condition_code]
                            elif self.locale == "fr":
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text_fr[self.night_forecast[day_number].condition_code]
                            else:
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text[self.night_forecast[day_number].condition_code]
                        elif datatype == "CT":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].condition_text
                        elif datatype == "PC":
                            string = self.night_forecast[day_number].precip
                            if self.isNumeric(string) == True:
                                string = string + u"%"
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "HM":
                            string = self.night_forecast[day_number].humidity
                            if self.isNumeric(string) == True:
                                string = string + u"%"
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "WD":
                            string = self.night_forecast[day_number].wind_dir
                            if self.locale == "es":
                                output = output + self.getSpaces(spaces) + WeatherText.bearing_text_es[string]
                            elif self.locale == "fr":
                                output = output + self.getSpaces(spaces) + WeatherText.bearing_text_fr[string]
                            else:
                                output = output + self.getSpaces(spaces) + string
                            
                        elif datatype == "BF":
                            output = output + self.getSpaces(spaces) + WeatherText.bearing_arrow_font[self.night_forecast[day_number].wind_dir]
                        elif datatype == "WS":
                            string = self.night_forecast[day_number].wind_speed
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertKilometresToMiles(string)
                                string = string + speedunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "WG":
                            string = self.night_forecast[day_number].wind_gusts
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertKilometresToMiles(string)
                                string = string + speedunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "CN":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].city
                        elif datatype == "SR":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].sunrise
                        elif datatype == "SS":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].sunset
                        elif datatype == "MP":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].moon_phase
                        elif datatype == "MF":
                            output = output + self.getSpaces(spaces) + WeatherText.conditions_moon_font[self.night_forecast[day_number].moon_icon]
                        elif datatype == "BR":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].bar_read
                        elif datatype == "BD":
                            output = output + self.getSpaces(spaces) + self.night_forecast[day_number].bar_desc
                        else:
                            output = "\nERROR:Unknown data type requested"
                            break

                else: # day forecast wanted

                    for day_number in range(startday, endday+1):

                        if datatype == "DW":
                            if self.locale == "es":
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_es[self.day_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_es[self.day_forecast[day_number].day_of_week]
                            elif self.locale == "fr":
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short_fr[self.day_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_fr[self.day_forecast[day_number].day_of_week]                                    
                            else:
                                if shortweekday == True:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week_short[self.day_forecast[day_number].day_of_week]
                                else:
                                    output = output + self.getSpaces(spaces) + WeatherText.day_of_week[self.day_forecast[day_number].day_of_week]
                        elif datatype == "WF": # weather font
                            output = output + self.getSpaces(spaces) + WeatherText.conditions_weather_font[self.day_forecast[day_number].condition_code]
                        elif datatype == "LT":
                            string = self.day_forecast[day_number].low
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertCelsiusToFahrenheit(string)
                                string = string + tempunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "HT":
                            string = self.day_forecast[day_number].high
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertCelsiusToFahrenheit(string)
                                string = string + tempunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "CC":
                            if self.locale == "es":
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text_es[self.day_forecast[day_number].condition_code]
                            elif self.locale == "fr":
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text_fr[self.day_forecast[day_number].condition_code]
                            else:
                                output = output + self.getSpaces(spaces) + WeatherText.conditions_text[self.day_forecast[day_number].condition_code]
                        elif datatype == "CT":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].condition_text
                        elif datatype == "PC":
                            string = self.day_forecast[day_number].precip
                            if self.isNumeric(string) == True:
                                string = string + u"%"
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "HM":
                            string = self.day_forecast[day_number].humidity
                            if self.isNumeric(string) == True:
                                string = string + u"%"
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "WD":
                            string = self.day_forecast[day_number].wind_dir
                            
                            if self.locale == "es":
                                output = output + self.getSpaces(spaces) + WeatherText.bearing_text_es[string]
                            elif self.locale == "fr":
                                output = output + self.getSpaces(spaces) + WeatherText.bearing_text_fr[string]
                            else:
                                output = output + self.getSpaces(spaces) + string    

                        elif datatype == "BF":
                            output = output + self.getSpaces(spaces) + WeatherText.bearing_arrow_font[self.day_forecast[day_number].wind_dir]
                        elif datatype == "WS":
                            string = self.day_forecast[day_number].wind_speed
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertKilometresToMiles(string)
                                string = string + speedunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "WG":
                            string = self.day_forecast[day_number].wind_gusts
                            if self.isNumeric(string) == True:
                                if imperial == True:
                                    string = self.convertKilometresToMiles(string)
                                string = string + speedunit
                            output = output + self.getSpaces(spaces) + string
                        elif datatype == "CN":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].city
                        elif datatype == "SR":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].sunrise
                        elif datatype == "SS":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].sunset
                        elif datatype == "MP":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].moon_phase
                        elif datatype == "MF":
                            output = output + self.getSpaces(spaces) + WeatherText.conditions_moon_font[self.day_forecast[day_number].moon_icon]
                        elif datatype == "BR":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].bar_read
                        elif datatype == "BD":
                            output = output + self.getSpaces(spaces) + self.day_forecast[day_number].bar_desc
                        else:
                            output = u"\nERROR:Unknown data type requested"
                            break

            output = u""+output.strip(u" ") # lose leading/trailing spaces
            return output

        #except:
            #print "getOutputText:Unexpected error: ", sys.exc_info()[0]


    def getOutputTextFromTemplate(self,template):
        #try:

            # keys to template data
            DATATYPE_KEY = "--datatype="
            STARTDAY_KEY = "--startday="
            ENDDAY_KEY = "--endday="
            NIGHT_KEY = "--night"
            SHORTWEEKDAY_KEY = "--shortweekday"
            IMPERIAL_KEY = "--imperial"
            HIDEUNITS_KEY = "--hideunits"
            SPACES_KEY = "--spaces="

            output = u""

            optionfound = False

            #load the file
            try:
                fileinput = open(self.options.template)
                template = fileinput.read()
                fileinput.close()
            except:
                output = u"Template file no found!"

            templatelist = self.getTemplateList(template)

            # lets walk through the template list and determine the output for each item found
            for i in range(0,len(templatelist)-1):

                pos = templatelist[i].find(DATATYPE_KEY)
                if pos != -1:
                    optionfound = True
                    pos = pos + len(DATATYPE_KEY)
                    datatype = templatelist[i][pos:pos+4].strip("}").strip("{").strip("-").strip(" ")
                else:
                    datatype = None

                pos = templatelist[i].find(STARTDAY_KEY)
                if pos != -1:
                    optionfound = True
                    pos = pos + len(STARTDAY_KEY)
                    startday = int(templatelist[i][pos:pos+4].strip("}").strip("{").strip("-").strip(" "))
                else:
                    startday = None

                pos = templatelist[i].find(ENDDAY_KEY)
                if pos != -1:
                    optionfound = True
                    pos = pos + len(ENDDAY_KEY)
                    endday = int(templatelist[i][pos:pos+4].strip("}").strip("{").strip("-").strip(" "))
                else:
                    endday = None

                pos = templatelist[i].find(NIGHT_KEY)
                if pos != -1:
                    optionfound = True
                    night = True
                else:
                    night = False

                pos = templatelist[i].find(SHORTWEEKDAY_KEY)
                if pos != -1:
                    optionfound = True
                    shortweekday = True
                else:
                    shortweekday = False

                pos = templatelist[i].find(IMPERIAL_KEY)
                if pos != -1:
                    optionfound = True
                    imperial = True
                else:
                    imperial = False

                pos = templatelist[i].find(HIDEUNITS_KEY)
                if pos != -1:
                    optionfound = True
                    hideunits = True
                else:
                    hideunits = False

                pos = templatelist[i].find(SPACES_KEY)
                if pos != -1:
                    optionfound = True
                    pos = pos + len(SPACES_KEY)
                    spaces = int(templatelist[i][pos:pos+4].strip("}").strip("{").strip("-").strip(" "))
                else:
                    spaces = 1

                if optionfound == True:
                    templatelist[i] = self.getOutputText(datatype,startday,endday,night,shortweekday,imperial,hideunits,spaces)
                    optionfound = False

            # go through the list concatenating the output now that it's been populated
            for item in templatelist:
                output = output + item

            return output

        #except:
            #print "getOutputTextFromTemplate:Unexpected error: ", sys.exc_info()[0]


    def fetchData(self):

        # always fetch metric data, use conversation functions on this data
        file_path_current = self.TEMP_FILEPATH_CURRENT.replace("LOCATION",self.options.location)
        file_path_dayforecast = self.TEMP_FILEPATH_DAYFORECAST.replace("LOCATION",self.options.location)
        file_path_nightforecast = self.TEMP_FILEPATH_NIGHTFORECAST.replace("LOCATION",self.options.location)

        if self.isConnectionAvailable() == False:
            if os.path.exists(file_path_current):
                RefetchData = False
            else: # no connection, no cache, bang!
                print "No internet connection is available and no cached weather data exists."
        elif self.options.refetch == True:
            RefetchData = True
        else:
             # does the data need retrieving again?
             if os.path.exists(file_path_current):
                 lastmodDate = time.localtime(os.stat(file_path_current)[ST_MTIME])
                expiryDate = (datetime.datetime.today() - datetime.timedelta(minutes=self.EXPIRY_MINUTES)).timetuple()

                if expiryDate > lastmodDate:
                    RefetchData = True
                else:
                    RefetchData = False
            else:
                RefetchData = True


                # fetch the current conditions data, either from the website or by 'unpickling'
         if RefetchData == True:

            # obtain current conditions data from xoap service
            try:

                # http://xoap.weather.com/weather/local/UKXX0103?cc=*&dayf=5&link=xoap&prod=xoap&par=1061785028&key=e374effbfd74930b

                url = 'http://xoap.weather.com/weather/local/' + self.options.location + '?cc=*&dayf=8&link=xoap&prod=xoap&par=1061785028&key=e374effbfd74930b&unit=m'
                if self.options.verbose == True:
                    print >> sys.stdout, "fetching weather data from ",url

                usock = urllib2.urlopen(url)
                xml = usock.read()
                usock.close()
                self.weatherxmldoc = minidom.parseString(xml)
            except:
                print "fetchData:Unexpected error: ", sys.exc_info()[0]
                print "Unable to contact weather source for current conditions"

            # tell the user if the location is bad...
            found = xml.find("Invalid location provided")
            if found != -1:
                print "Invalid location provided"

            # interrogate weather data, load into class structure and pickle it
            try:

                # prepare weather data lists
                self.current_conditions = []
                self.day_forecast = []
                self.night_forecast = []

                # collect general data
                weather_n = self.weatherxmldoc.documentElement
                location_n = weather_n.getElementsByTagName('loc')[0]
                city_n = location_n.getElementsByTagName('dnam')[0]
                city = self.getText(city_n.childNodes)

                # collect current conditions data
                day_of_week = u"Today"
                precip = u"N/A"
                sunrise_n = location_n.getElementsByTagName('sunr')[0]
                sunrise = self.getText(sunrise_n.childNodes)
                sunset_n = location_n.getElementsByTagName('suns')[0]
                sunset = self.getText(sunset_n.childNodes)
                current_condition_n = weather_n.getElementsByTagName('cc')[0]
                current_desc_n = current_condition_n.getElementsByTagName('t')[0]
                current_desc = self.getText(current_desc_n.childNodes)
                current_code_n = current_condition_n.getElementsByTagName('icon')[0]
                current_code = self.getText(current_code_n.childNodes)
                current_temp_n = current_condition_n.getElementsByTagName('tmp')[0]
                current_temp = self.getText(current_temp_n.childNodes)
                current_temp_feels_n = current_condition_n.getElementsByTagName('flik')[0]
                current_temp_feels = self.getText(current_temp_feels_n.childNodes)
                bar_n = current_condition_n.getElementsByTagName('bar')[0]
                bar_read_n = bar_n.getElementsByTagName('r')[0]
                bar_read = self.getText(bar_read_n.childNodes)
                bar_desc_n = bar_n.getElementsByTagName('d')[0]
                bar_desc = self.getText(bar_desc_n.childNodes)
                wind_n = current_condition_n.getElementsByTagName('wind')[0]
                wind_speed_n = wind_n.getElementsByTagName('s')[0]
                wind_speed = self.getText(wind_speed_n.childNodes)
                wind_gust_n = wind_n.getElementsByTagName('gust')[0]
                wind_gusts = self.getText(wind_gust_n.childNodes)
                wind_dir_n = wind_n.getElementsByTagName('d')[0]
                wind_direction = self.getText(wind_dir_n.childNodes)
                humidity_n = current_condition_n.getElementsByTagName('hmid')[0]
                humidity = self.getText(humidity_n.childNodes)
                moon_n = current_condition_n.getElementsByTagName('moon')[0]
                moon_icon_n = moon_n.getElementsByTagName('icon')[0]
                moon_icon = self.getText(moon_icon_n.childNodes)
                moon_phase_n = moon_n.getElementsByTagName('t')[0]
                moon_phase = self.getText(moon_phase_n.childNodes)
                current_conditions_data = WeatherData(day_of_week, current_temp_feels, current_temp, current_code, current_desc, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)
                self.current_conditions.append(current_conditions_data)

                # collect forecast data
                bar_read = u"N/A"
                bar_desc = u"N/A"
                moon_phase = u"N/A"
                moon_icon = u"na"
                forecast_n = weather_n.getElementsByTagName('dayf')[0]
                day_nodes = forecast_n.getElementsByTagName('day')
    
                for day in day_nodes:
                    day_of_week = day.getAttribute('t')
                    day_of_year = day.getAttribute('dt')
                    high_temp_n = day.getElementsByTagName('hi')[0]
                    high_temp = self.getText(high_temp_n.childNodes)
                    low_temp_n = day.getElementsByTagName('low')[0]
                    low_temp = self.getText(low_temp_n.childNodes)

                    sunrise_n = day.getElementsByTagName('sunr')[0]
                    sunrise = self.getText(sunrise_n.childNodes)
                    sunset_n = day.getElementsByTagName('suns')[0]
                    sunset = self.getText(sunset_n.childNodes)

                    # day forecast specific data
                    daytime_n = day.getElementsByTagName('part')[0] # day
                    condition_code_n = daytime_n.getElementsByTagName('icon')[0]
                    condition_code = self.getText(condition_code_n.childNodes)
                    condition_n = daytime_n.getElementsByTagName('t')[0]
                    condition = self.getText(condition_n.childNodes)
                    precip_n = daytime_n.getElementsByTagName('ppcp')[0]
                    precip = self.getText(precip_n.childNodes)
                    humidity_n = daytime_n.getElementsByTagName('hmid')[0]
                    humidity = self.getText(humidity_n.childNodes)
                    wind_n = daytime_n.getElementsByTagName('wind')[0]
                    wind_speed_n = wind_n.getElementsByTagName('s')[0]
                    wind_speed = self.getText(wind_speed_n.childNodes)
                    wind_direction_n = wind_n.getElementsByTagName('t')[0]
                    wind_direction = self.getText(wind_direction_n.childNodes)
                    wind_gusts_n = wind_n.getElementsByTagName('gust')[0]
                    wind_gusts = self.getText(wind_gusts_n.childNodes)
                    day_forecast_data = WeatherData(day_of_week, low_temp, high_temp, condition_code, condition, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)
                    self.day_forecast.append(day_forecast_data)     

                    # night forecast specific data
                    daytime_n = day.getElementsByTagName('part')[1] # night
                    condition_code_n = daytime_n.getElementsByTagName('icon')[0]
                    condition_code = self.getText(condition_code_n.childNodes)
                    condition_n = daytime_n.getElementsByTagName('t')[0]
                    condition = self.getText(condition_n.childNodes)
                    precip_n = daytime_n.getElementsByTagName('ppcp')[0]
                    precip = self.getText(precip_n.childNodes)
                    humidity_n = daytime_n.getElementsByTagName('hmid')[0]
                    humidity = self.getText(humidity_n.childNodes)
                    wind_n = daytime_n.getElementsByTagName('wind')[0]
                    wind_speed_n = wind_n.getElementsByTagName('s')[0]
                    wind_speed = self.getText(wind_speed_n.childNodes)
                    wind_direction_n = wind_n.getElementsByTagName('t')[0]
                    wind_direction = self.getText(wind_direction_n.childNodes)
                    wind_gusts_n = wind_n.getElementsByTagName('gust')[0]
                    wind_gusts = self.getText(wind_gusts_n.childNodes)
                    night_forecast_data = WeatherData(day_of_week, low_temp, high_temp, condition_code, condition, precip, humidity, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)
                    self.night_forecast.append(night_forecast_data) 


                # pickle the data for next time!
                fileoutput = open(file_path_current, 'w')
                 pickle.dump(self.current_conditions,fileoutput)
                 fileoutput.close()

                fileoutput = open(file_path_dayforecast, 'w')
                 pickle.dump(self.day_forecast,fileoutput)
                 fileoutput.close()

                fileoutput = open(file_path_nightforecast, 'w')
                 pickle.dump(self.night_forecast,fileoutput)
                 fileoutput.close()
        
            except:
                print "fetchData:Unexpected error: ", sys.exc_info()[0]
                print "Unable to interrogate the weather data"

        else: # fetch weather data from pickled class files
            if self.options.verbose == True:
                print >> sys.stdout, "fetching weather data from file: ",file_path_current

             fileinput = open(file_path_current, 'r')
            self.current_conditions = pickle.load(fileinput)
            fileinput.close()

            if self.options.verbose == True:
                print >> sys.stdout, "fetching day forecast data from files: ",file_path_dayforecast, file_path_nightforecast

             fileinput = open(file_path_dayforecast, 'r')
            self.day_forecast = pickle.load(fileinput)
            fileinput.close()

            if self.options.verbose == True:
                print >> sys.stdout, "fetching day forecast data from files: ",file_path_nightforecast, file_path_nightforecast

             fileinput = open(file_path_nightforecast, 'r')
            self.night_forecast = pickle.load(fileinput)
            fileinput.close()

    def outputData(self):
        #try:

            if self.options.template != None:

                output = self.getOutputTextFromTemplate(self.options.template)

            else:

                output = self.getOutputText(self.options.datatype,self.options.startday,self.options.endday,self.options.night,self.options.shortweekday,self.options.imperial,self.options.hideunits,self.options.spaces)


            print output.encode("utf-8")

        #except:
            #print "outputData:Unexpected error: ", sys.exc_info()[0]

if __name__ == "__main__":

    parser = CommandLineParser()
    (options, args) = parser.parse_args()

    if options.verbose == True:
        print >> sys.stdout, "location:",options.location
        print >> sys.stdout, "imperial:",options.imperial
        print >> sys.stdout, "datatype:",options.datatype
        print >> sys.stdout, "night:",options.night
        print >> sys.stdout, "start day:",options.startday
        print >> sys.stdout, "end day:",options.endday
        print >> sys.stdout, "spaces:",options.spaces
        print >> sys.stdout, "verbose:",options.verbose
        print >> sys.stdout, "refetch:",options.refetch

    # create new global weather object
    weather = GlobalWeather(options)
    weather.fetchData()
    weather.outputData()
Salut,

Comment tu fais titimoi, pour mettre des icônes dans conky?
Vu que je ne peux pas essayer pour le moment, je serais bien curieux de le savoir ^^

Merci!
tu sais il s'agit simplement de certain type de police (tu en trouves des milliers sur Dafont la mienne c'est StyleBats puis tu as Weather pour la météo.)

edit: de 7sec...
Tu ne peux pas incorporer des icônes en tant que telles dans un conky.
L'astuce consiste à utiliser une police dont les lettres sont des icônes....(comme les font StyleBats )

EDIT: Tu es trop rapide titimoi...
9 jours plus tard
Bonsoir

Une solution pour les possesseurs de CM ASUS P5Q... ( Pro pour moi ) avec un Winbond w83627dhg ( temp MB , Fan, etc ...) peut se lire sur forum en
Lien

J'ai vu j'ai essayé et c'est ok!
Une bonne année qui commence bien

bon courage.
Salut!

Pour chepioq et titimoi, merci, cela fonctionne nickel pour les "icônes" dans conky!
J'en ai même profiter pour changer les polices et tout!

Alors par contre, j'ai une question.

Dans mon .conky, j'affiche l'adresse IP publique, avec un petit script que j'ai fait( mon tout premier!!).

Le voici:
#!/bin/sh

curl http://votreip.free.fr/ | cut  -d '>' -f7  | cut -d '<' -f1
Cela fonctionne, mais je me demande si il n'y a pas plus simple comme commande.
Je veux dire par là, que je fais deux pipe, et est-ce que je pourrais éviter?

Car j'ai lu sur un forum dont je n'ai plus le lien, que faire des pipes "charge" plus le système.


Merci!
c'est vrai que les pipe utilisent plus de ressources, mais ce sont les commande execi en elles même qui nécessitent plus de ressources, à toi donc d'écarter le plus possible les mesures de cette commande avec un chiffre suffisament grand derrière pour ne pas nécessiter ces ressources trop souvent.
j'ai trouvé ça avec simplement 1 pipe... :
{execi 14400 wget -O - http://whatismyip.org/ | tail}
ici 14400 pour faire l'update toute les 4h, c'est généralement suffisant...
super, merci à toi, je vais voir.

Sinon, j'ai un autre soucis.

Mon conky, se redimensionne tout le temps tout seul..

C'est à dire, que la largeur grandit a peine une fraction de seconde, puis reviens à la normale...Et tout ceci aléatoirement.

Alors, dans mon conky, j'ai mis:
minimum_size 300
maximum_width 300
Ainsi que dautres valeurs.


Mais cela ne change rien, t'as pas une petite idée?



bon, en fait, je sais d'où cela vient!

Car j'ai une partie lecteur dans mon conky, qui affiche l'artiste et le titre de la musique que j'écoute sur le net.
Seulement, quand le nom est trop long, ben conky s'agrandit! Et devient plus petit une fois que le titre change pour un plus court!
Donc tout fonctionne!

C'est fou tout ce que l'on peut faire!
Donc, voici le résultat!

Bon, il est simple, et j'ai pas mal repris les idées de chacun, mais je suis bien content d'avoir réussi!


Va falloir que je fasse plusieurs script conky, car dans un seul, tout en passe pas!😉
EllGringo, tu pourrais poster ton conkyrc stp ?
(même s'il n'est pas encore décomposé en plusieurs 😉 )