Conky, Моята настройка

Fecfactor ме помоли вчера да публикувам конфигурацията на conky, която показвам на екранната снимка по-долу

Както можете да видите има 3 conkys, които се изпълняват с помощта на скрипт, конфигурацията на същия се базира на този пост публикувано от потребител Брус М. във форумите на Ubuntu-Ar с някои модификации в пощата conky, което в моя случай е за Gmail.

В референтния пост това е много добре обяснено от Брус, но и като помощно средство за мен, ще копирам стъпките, които трябва да следвам, и кода на моите конки за всеки, който го има.

Е, разбира се, трябва да имаме инсталирани conky, curl и python, така че да въвеждаме конзола:

sudo apt-get инсталирайте conky curl python

Източникът на времето.ttf и стрелките .ttf е тук. Източникът на луната.ttf е тук след като ги изтеглите, трябва да ги копирате в / usr / share / шрифтове

Нека сега създадем нашия скрипт, наречен ~. / Startconky

gksudo gedit ~ / .startconky

вътре в празния файл поставяме следното

#! / Хамбар / Баш
sleep 0 & # 0 добре за Xfce - използвайте 20 до 30 за Gnome
conky -c ~ / Conky / conkymain &
#sleep 0 & # 0 добре за Xfce - използвайте 1 за Gnome
conky -c ~ / Conky / conkyforecast &
#sleep 0 & # 0 добре за Xfce - използвайте 1 за Gnome
conky -c ~ / Conky / conkymail &

Сега създаваме файла conkymain в папката ~ / Conky, ако нямаме папката Conky, ще трябва да го създадем.

gedit ~ / Conky / conkymain

Използвам шрифт Calibri, ако го нямате, заменете го с каквото искате.

Ние се придържаме към това, което следва

фон №
own_window да
own_window_transparent да
own_window_hints неекрасиран, отдолу, лепкав, skip_taskbar, skip_pager
own_window_colour черен
double_buffer да
use_spacer вляво
use_xft да
шрифт калибри: размер = 9
xftfont calibri: размер = 9
xftalpha 0.5
актуализация_интервал 5.0
главни букви не # е зададено на да, ако искате целият текст да бъде с главни букви
stippled_border 3
border_margin 9
граница_ширина 10
default_color бял
default_outline_color черен
default_shade_color черен
цвят0 циан
цвят1 светлосин
цвят2 оранжев
цвят3 жълт
цвят4 пшеница
цвят5 бял
цвят6 бял
цвят7 бял
цвят8 бял
цвят9 бял
подравняване top_right # или top_left, bottom_left, bottom_right
пропаст_x 10
пропаст_y 35
text_buffer_size 128 # използвайте 1024 за прогнозата
no_buffers да # Изваждане на буфери на файловата система от използваната памет?
начертайте_граници не
draw_outline yes # усилва текста, ако да
draw_shades да # shadowcolor черно

ТЕКСТ
$ {font calibri: size = 12} $ {alignc} $ {color1} $ sysname $ ядро ​​на $ machine} $ color $ font
$ {font calibri: size = 12} $ {alignc} $ {color2} $ {exec whoami} @ $ nodename $ color $ font
$ {color0} $ {hr 1} $ цвят
$ {font calibri: size = 20} $ {alignc} $ {time% H:% M} $ font
$ {font calibri: size = 12} $ {color1} $ {alignc} $ {time% A,% d% b. % Y} $ color $ шрифт
$ {color3} Време за работа: $ {alignr 2} $ uptime $ color
$ {color0} $ {hr 1} $ цвят
$ {voffset 5} $ {color2} CPU: $ {alignc} $ color $ running_processes $ {color1} / $ color $ procesi $ {alignr 2} $ {color2} $ {cpubar cpu0 14,80} $ color
$ {color1} $ {voffset -16} $ {alignr 5} $ cpu% $ color
$ {voffset 2} $ {color1} Зареждане на Ср. ($ {color3} Минимален $ {color1}): $ {alignr 2} $ {color3} 1: $ color $ {loadavg 1} $ {color3} 5: $ color $ {loadavg 2} $ {color3} 15: $ color $ {loadavg 3}
$ {voffset 5} $ {color2} RAM: $ color $ mem $ {color2} / $ color $ memmax $ {alignr 2} $ {color2} $ {membar 14,80} $ color
$ {color1} $ {voffset -16} $ {alignr 5} $ memperc% $ color
$ {voffset 2} $ {color1} Буфериран: $ color $ {буфери} $ {alignr 2} $ {color1} Кеширан: $ color $ {cached}
$ {voffset 5} $ {color2} SWAP: $ color $ swap $ {color2} / $ color $ {swapmax} $ {alignr 2} $ {color2} $ {swapbar 14,80} $ color
$ {color1} $ {voffset -16} $ {alignr 5} $ swapperc%
$ {color0} $ {hr 1} $ цвят
$ {voffset 5} $ {color2} HD информация $ {color1} - $ color Безплатно $ {color1} - Използвано - $ {color2} Общо
$ {voffset 5} $ {color1} Корен: $ color $ {fs_free_perc /}% $ {alignr 2} $ {fs_free /} $ {color2} / $ {color1} $ {fs_used /} $ color / $ {color2} $ {fs_size /} $ цвят
$ {color1} Начало: $ color $ {fs_free_perc / home / user}% $ {alignr 2} $ {fs_free / home / user} $ {color2} / $ {color1} $ {fs_used / home / user} $ color / $ {color2} $ {fs_size / home / user} $ цвят
$ {color0} $ {hr 1} $ цвят
$ {color1} От: $ color Буенос Айрес, Аржентина
$ {color1} Lat: $ {color2} 34 ° 35'S $ {color1} Long: $ {color2} 58 ° 21'W $ {color1} Alt: $ {color2} 25 m $ цвят
$ {voffset 5} $ {color2} $ {font calibri: size = 12} днес: $ font $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = CC} $ цвят $ {alignr 2} $ {color1} ST: $ {color2} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = LT}
$ {color3} $ {font Weather: size = 50} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = WF} $ font $ color
$ {alignr 50} $ {voffset -55} $ {font calibri: size = 25} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = HT} $ font
$ {alignc 20} $ {voffset -30} $ {font Arrows: size = 20} $ {color4} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = BF} $ color $ шрифт
$ {alignc 10} $ {voffset 5} $ {color4} Вятър: $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = WS} $ цвят
$ {color1} Влажност: $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = HM} $ {alignr 2} $ {color1} Валежи: $ {color3} $ { execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = PC} $ цвят
$ {alignc} $ {color1} Налягане: $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = BR} - $ {color3} $ {execi 3600 python ~ / Conky /scripts/conkyForecast.py –location = ARBA0009 –datatype = BD} $ цвят
$ {color4} $ {hr} $ цвят
$ {color1} Изгрев: $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = SR} $ {alignr 2} $ {color1} Залез: $ {color3} $ { execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = SS} $ цвят
$ {voffset 15} $ {color1} Луна: $ {color4} $ {alignr 2} $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = MP} $ color
$ {voffset -20} $ {offset 80} $ {color4} $ {font moon phases: size = 20} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = MF} $ font $ цвят
$ {color0} $ {hr} $ цвят
$ {voffset 5} $ {color2} IP: $ {alignc} $ color $ {addr eth0}
$ {color1} Надолу: $ color $ {намалена скорост eth0} k / s $ {alignr 2} $ {color1} Нагоре: $ color $ {upspeed eth0} k / s
$ {color1} Общо: $ color $ {totaldown eth0} $ {alignr 2} $ {color1} Общо: $ color $ {totalup eth0}
$ {color1} Входящ: $ color $ {tcp_portmon 1 32767 count} $ {color1} Изходящ: $ color $ {tcp_portmon 32768 61000 count} $ {alignr 2} $ {color1} Общо: $ color $ {tcp_portmon 1 65535 count}
$ {voffset 5} $ {color2} Връзки: $ color $ {tcp_portmon 32768 61000 count} $ {alignr 2} $ {color2} Service / Port $ color
$ {voffset 5} $ {tcp_portmon 32768 61000 rhost 0} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 0}
$ {tcp_portmon 32768 61000 rhost 1} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 1}
$ {tcp_portmon 32768 61000 rhost 2} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 2}
$ {tcp_portmon 32768 61000 rhost 3} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 3}
$ {tcp_portmon 32768 61000 rhost 4} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 4}
$ {tcp_portmon 32768 61000 rhost 5} $ {alignr 2} $ {tcp_portmon 32768 61000 rservice 5} $ цвят

ние създаваме файла ~ / Conky / conkyforecast

gedit ~ / Conky / conkyforecast

и поставяме следното отвътре

фон №
own_window да
own_window_transparent да
own_window_hints неекрасиран, отдолу, лепкав, skip_taskbar, skip_pager
own_window_colour черен
double_buffer да
use_spacer вляво
use_xft да
шрифт калибри: размер = 8
xftfont calibri: размер = 8
xftalpha 0.5
актуализация_интервал 5.0
главни букви не # е зададено на да, ако искате целият текст да бъде с главни букви
stippled_border 3
border_margin 9
граница_ширина 10
default_color бял
default_outline_color черен
default_shade_color черен
цвят0 циан
цвят1 светлосин
цвят2 оранжев
цвят3 жълт
цвят4 пшеница
цвят5 бял
цвят6 бял
цвят7 бял
цвят8 бял
цвят9 бял
подравняване bottom_left # или top_left, bottom_left, bottom_right
пропаст_x 10
пропаст_y 35
text_buffer_size 1024 # използвайте 1024 за прогнозата
no_buffers да # Изваждане на буфери на файловата система от използваната памет?
начертайте_граници не
draw_outline yes # усилва текста, ако да
draw_shades да # shadowcolor черно

ТЕКСТ
$ {color4} $ {font calibri: size = 11} Разширена прогноза $ font $ color
$ {color0} $ {hr} $ цвят
$ {color4} $ {font calibri: size = 9} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –template = / home / user / Conky / scripts / myweather.template} $ font $ цвят

ние създаваме файла ~ / Conky / conkymail

gedit ~ / Conky / conkymail

ние поставяме следното във файла

фон №
own_window да
own_window_transparent да
own_window_hints неекрасиран, отдолу, лепкав, skip_taskbar, skip_pager
own_window_colour черен
double_buffer да
use_spacer вляво
use_xft да
шрифт калибри: размер = 8
xftfont calibri: размер = 8
xftalpha 0.5
актуализация_интервал 5.0
главни букви не # е зададено на да, ако искате целият текст да бъде с главни букви
stippled_border 3
border_margin 9
граница_ширина 10
default_color бял
default_outline_color черен
default_shade_color черен
цвят0 циан
цвят1 светлосин
цвят2 оранжев
цвят3 жълт
цвят4 пшеница
цвят5 бял
цвят6 бял
цвят7 бял
цвят8 бял
цвят9 бял
подравняване bottom_left # или top_left, bottom_left, bottom_right
пропаст_x 565
пропаст_y 35
text_buffer_size 128 # използвайте 1024 за прогнозата
no_buffers да # Изваждане на буфери на файловата система от използваната памет?
начертайте_граници не
draw_outline yes # усилва текста, ако да
draw_shades да # shadowcolor черно

ТЕКСТ
$ {font calibri: size = 11} $ {alignc} $ {color4} Gmail
$ {color0} $ {hr} $ цвят
$ {font calibri: size = 11} $ {color4} Имаме $ {color3} $ {execi 300 python ~ / Conky / scripts / mail / conkyEmail.py} $ {color4} имейл (и) $ font

Създаваме файл в ~ / Conky / scripts / conkyForecast.py (трябва да създадем папката скриптове)

gedit ~ / Conky / scripts / conkyForecast.py

#! / usr / bin / python
# - * - кодиране: utf-8 - * -
#################################################### ###############################
# conkyForecast.py е (не толкова) прост (вече) python скрипт за събиране
# подробности за текущото време за използване в conky.
#
# Автор: Кайвалаги
# Създадено: 13
# Модификации:
# 14 Разрешаване на дневни диапазони за прогнозни данни
# 14 Проверете за свързаност с услугата xoap
# 18/04/2008 Разрешаване на задаването на интервали за обхват на изхода
# 18/04/2008 Позволете извеждането на прогноза за нощта и деня
# 18/04/2008 Поддръжка на локал за опция текст на кода на условието «CC», в очакване на испански език превод
# 18 г. Използвайте ецване за данни от класа, вместо да отваряте xml, това заобикаля необходимостта от разпит на кеширани данни
# 19/04/2008 Добавен текст на испански условия - Благодаря Брус М
# 19/04/2008 Добавена цифрова проверка на всички цифрови изходи с суфикс на единици
# 19/04/2008 Променено именуване на файл на туршия, за да включва код на местоположение
# 19/04/2008 Добавено преобразуване на испански седмични дни чрез локал
# 20 г. Добавен приличен парсер на аргументи за команди
# 20 г. Добавена –опция за кратък седмичен ден, ако е даден денят от седмицата типът данни се съкращава до 04 знака
# 21 Фиксирани локални опции за извеждане на прогноза
# 21/04/2008 Добавена е опция за шаблон, за да се позволи персонализирано извеждане с помощта на едно exec повикване 🙂
# 21 Добавена опция –hideunits за премахване, например, mph и C от изхода
# 23/04/2008 Премахната –имперска опция от шаблона, ТРЯБВА да бъде зададена като стандартна опция при извикването на скрипта и да не се използва във файла на шаблона.
# 23/04/2008 Прочетено - имперска опция за шаблон, позволяваща метрични или имперски стойности за всеки тип данни. Забележете, когато използвате опцията за команден ред на шаблони, няма да работи.
# 23/04/2008 Добавен изходен известяващ потребител, ако даденото местоположение е лошо
# 24 г. Добавена обработка за липса на връзка, ще се върне към кеширани данни сега (грешка, ако не съществува кеш). Тестове, като се опитате да отворите xoap.weather.com
# 24 г. Фиксирана конверсия по Целзий във Фаренхайт
# 06/05/2008 Актуализиран URL адрес, използван след актуализиране на уеб услугата
# 09/05/2008 Консолидирано текущо състояние и прогнозни данни се събират в едно обаждане
# 09/05/2008 Добавени изгрев и залез към типовете данни, те са специфични както за текущите условия, така и за прогнозните данни
# 09/05/2008 Добавени фаза на луната, отчитане на барометър и описание на барометър към типовете данни, те са специфични само за текущите условия, а също така и N / A в прогнозираната продукция
# 09/05/2008 Добавени единични преобразувания за барометър от mb към инчове (имперски)
# 09/05/2008 Актуализиран текст на испански условия - Благодаря Брус М
# 10/05/2008 Добавени френски локални данни - Благодаря benpaka
# 12/05/2008 Добавен е нов тип данни BF (носещ шрифт), за да се осигури символ на стрелка (използва се с шрифт Arrow.ttf) вместо изход NSEW от WD (посока на вятъра)
# 12/05/2008 Актуализиран изход на WD, за да бъде специфичен за локал, в момента поддържа английски и испански по подразбиране - Благодаря Брус М
# 18/05/2008 Добавен е нов тип данни MF (лунен шрифт), за да се осигури символ на лунен шрифт (неправилни знаци и все още няма специален шрифт)
# 21/05/2008 За текущите условия опцията –datatype = LT вече показва температура „усеща се“ вместо текущата температура
#
# ВСИЧКО:
# Консолидирайте pkl файловете в един файл / клас
# Добавете шрифт за времето въз основа на изхода на фазата на луната въз основа на данните за иконата на луната
# ??? Има ли още изисквания?

импортиране на sys, os, сокет, urllib2, дата и час
от xml.dom import minidom
от статичен внос *
от optparse import OptionParser
импортиране на локал
импортиране на gettext
внос туршия
от математически импорт *

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

клас CommandLineParser:

парсер = Няма

def __init __ (самостоятелно):

self.parser = OptionParser ()
self.parser.add_option («- l», »- местоположение», dest = »местоположение», по подразбиране = »UKXX0103 ″, type =» string », metavar =» CODE », help = u» код за местоположение за метеорологични данни [ по подразбиране:% по подразбиране], Използвайте следния url, за да определите кода на местоположението си по име на град: http://xoap.weather.com/search/search?where=Norwich »)
self.parser.add_option ("- d", "- type data", dest = "datatype", default = "HT", type = "string", metavar = "DATATYPE", help = u "[по подразбиране:% по подразбиране] Опциите за типа данни са: DW (ден от седмицата), WF (изход на шрифта за времето), LT (прогноза: ниска температура, текуща: усеща се като температура), HT (прогноза: висока температура, текуща: текуща температура), CC (текуща Условия), CT (текст на условията), компютър (шанс за валежи), HM (влажност), WD (посока на вятъра), WS (скорост на вятъра), WG (пориви на вятъра), CN (име на града), SR (изгрев), SS (залез), MP (лунна фаза), MF (лунен шрифт), BR (барометър), BD (описание на барометър). Не е приложимо в командния ред при използване на шаблони. »)
self.parser.add_option («- s», »- startday», dest = »startday», type = »int», metavar = »NUMBER», help = u »дефинирайте номера на началния ден, ако се изведат текущите условия . Не е приложимо в командния ред при използване на шаблони. »)
self.parser.add_option ("- e", "- endday", dest = "endday", type = "int", metavar = "NUMBER", help = u "дефинирайте номера на крайния ден, ако са пропуснати само данните за началния ден се извежда. Не е приложимо в командния ред при използване на шаблони. »)
self.parser.add_option («- S», »- интервали», dest = »интервали», type = »int», default = 1, metavar = »NUMBER», help = u »[default:% default] Определя брой интервали между изходен диапазон. Не е приложимо в командния ред при използване на шаблони. »)
self.parser.add_option («- t», »- template», dest = »template», type = »string», metavar = »FILE», help = u »дефинирайте файл с шаблон за генериране на изход в едно обаждане. A показваният елемент във файла е под формата {–datatype = HT –startday = 1}. Следните възможни опции във всеки елемент: –datatype, –startday, –endday, –night, –shortweekday, –imperial, –hideunits, –Пространства. Имайте предвид, че кратките форми на опциите понастоящем не се поддържат! Нито една от тези опции не е приложима в командния ред при използване на шаблони.
self.parser.add_option («- L», »- локал», dest = »локал», type = »низ», help = u »замени системния локал за извеждане на език (en = английски, es = испански, fr = френски, предстои) »)
self.parser.add_option ("- i", "- imperial", dest = "imperial", default = False, action = "store_true", help = u "изиска имперски единици, ако пропуснатата продукция е в метрика. Не е приложимо в команден ред при използване на шаблони. »)
self.parser.add_option («- n», »- нощ», dest = »нощ», по подразбиране = False, действие = »store_true», help = u »превключете изхода към нощни данни, ако пропуснатата изходна информация ще бъде изведена. Не е приложимо в командния ред при използване на шаблони. »)
self.parser.add_option («- w», »- shortweekday», dest = »shortweekday», default = False, action = »store_true», help = u »Съкратете типа данни за деня от седмицата до 3 знака. Не е приложимо на команден ред при използване на шаблони. »)
self.parser.add_option («- u», »- hideunits», dest = »hideunits», по подразбиране = False, action = »store_true», help = u »Скриване на единици като mph или C, символите за градуса (°) са все още се показва. Не е приложимо в командния ред, когато се използват шаблони. »)
self.parser.add_option ("- v", "- verbose", dest = "verbose", default = False, action = "store_true", help = u "изискайте подробен изход, няма добра идея, когато се изпълнява през conky!" )
self.parser.add_option ("- r", "- refetch", dest = "refetch", default = False, action = "store_true", help = u "извличане на данни независимо от изтичането на данните")

def parse_args (самостоятелно):
(опции, аргументи) = self.parser.parse_args ()
връщане (опции, аргументи)

def print_help (самостоятелно):
върнете self.parser.print_help ()

клас WeatherData:
def __init __ (self, day_of_week, low, high, condition_code, condition_text, precip, vlažnost, 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 »» + ниско
self.high = u »» + високо
self.condition_code = u »» + условие_код
self.condition_text = u »» + условие_текст
self.precip = u »» + утайка
самовлажност = u »» + влажност
self.wind_dir = u »» + wind_dir
self.wind_speed = u »» + скорост на вятъра
self.wind_gusts = u »» + пориви на вятъра
self.city = u »» + град
self.sunrise = u »» + изгрев
self.sunset = u »» + залез
self.moon_phase = u »» + moon_phase
self.moon_icon = u »» + moon_icon
self.bar_read = u »» + bar_read
self.bar_desc = u »» + bar_desc

клас WeatherText:

условие_текст = {
«0»: _ (u »Торнадо»),
«1»: _ (u »Тропическа буря»),
«2»: _ (u »Ураган»),
«3»: _ (u »Силни гръмотевични бури»),
«4»: _ (u »Гръмотевични бури»),
«5»: _ (u »Смесен дъжд и сняг»),
«6»: _ (u »Смесен дъжд и дъжд»),
«7»: _ (u »Смесени валежи»),
«8»: _ (u »Замразяващ дъжд»),
«9»: _ (u »Дъжд»),
«10»: _ (u »Леден дъжд»),
«11»: _ (u »Душове»),
«12»: _ (u »Душове»),
«13»: _ (u «Снежни вълни»),
«14»: _ (u »Слаби снеговалежи»),
«15»: _ (u »Blowing Snow»),
«16»: _ (u »Сняг»),
«17»: _ (u »Здравей»),
«18»: _ (u »Дъжд»),
«19»: _ (u »Прах»),
«20»: _ (u »Мъгла»),
«21»: _ (u »Мъгла»),
«22»: _ (u »Дим»),
«23»: _ (u »Blustery»),
«24»: _ (u »Ветровито»),
«25»: _ (u »Студено»),
«26»: _ (u »Облачно»),
«27»: _ (u »Предимно облачно»),
«28»: _ (u »Предимно облачно»),
«29»: _ (u »Облачно»),
«30»: _ (u »Облачно»),
«31»: _ (u »Изчисти»),
«32»: _ (u »Изчисти»),
«33»: _ (u »Панаир»),
«34»: _ (u »Панаир»),
«35»: _ (u »Смесен дъжд и градушка»),
«36»: _ (u »Горещо»),
«37»: _ (u »Изолирани гръмотевични бури»),
«38»: _ (u »Разкъсани гръмотевични бури»),
«39»: _ (u »Разкъсани гръмотевични бури»),
«40»: _ (u »Разпръснати душове»),
«41»: _ (u »Силен сняг»),
«42»: _ (u »Разкъсан снежен дъжд»),
«43»: _ (u »Силен сняг»),
«44»: _ (u »Облачно»),
«45»: _ (u »Гръмотевични душове»),
«46»: _ (u »Снежни душове»),
«47»: _ (u »Изолирани гръмотевични бури»),
«Na»: _ (u »N / A»),
"-": _ (а ")
}

условия_текст_е = {
«0»: _ (u »Торнадо»),
«1»: _ (u »Тропическа буря»),
«2»: _ (u »Huracá¡n»),
«3»: _ (u »Силни бури»),
«4»: _ (u »Бури»),
«5»: _ (u »Смесен дъжд и сняг»),
«6»: _ (u »Смесен дъжд и дъжд»),
«7»: _ (u »Дъжд»),
«8»: _ (u »Замразяващ дъжд»),
«9»: _ (u »Дъжд»),
«10»: _ (u »Леден дъжд»), # или леден дъжд
«11»: _ (u »Душове»),
«12»: _ (u »Душове»),
«13»: _ (u »Лек сняг»),
«14»: _ (u »Лек сняг»),
«15»: _ (u »Snow Blizzard»),
«16»: _ (u »Сняг»),
«17»: _ (u »Здравей»),
«18»: _ (u »Дъжд»),
«19»: _ (u »Прах»),
«20»: _ (u »Мъгла»),
«21»: _ (u »Мъгла»),
«22»: _ (u »Дим»),
«23»: _ (u »Буря»),
«24»: _ (u »Ветровито»),
«25»: _ (u »Фрао»),
«26»: _ (u »Много облачно»),
«27»: _ (u »Предимно облачно»),
«28»: _ (u »Предимно облачно»),
«29»: _ (u »Облачно»),
«30»: _ (u »Облачно»),
«31»: _ (u »Изчисти»),
«32»: _ (u »Изчисти»),
«33»: _ (u »Нещо облачно»),
«34»: _ (u »Нещо облачно»),
«35»: _ (u »Дъжд с градушка»),
«36»: _ (u »Топлина»),
«37»: _ (u »Изолирани бури»),
«38»: _ (u »Разпръснати бури»),
«39»: _ (u »Разпръснати бури»),
«40»: _ (u »Разпръснати душове»),
«41»: _ (u »Силен сняг»),
«42»: _ (u »Слаби и разкъсани снеговалежи»),
«43»: _ (u »Интензивна Невада»),
«44»: _ (u »Разкъсани облаци»),
«45»: _ (u »Бури»),
«46»: _ (u »Разкъсани снеговалежи»),
«47»: _ (u »Изолирани бури»),
«Na»: _ (u »N / A»),
"-": _ (а ")
}

условия_текст_fr = {
«0»: _ (u »Tornade»),
«1»: _ (u »Tempête Tropicale»),
«2»: _ (или «Ouragan»),
«3»: _ (или «Orages Violents»),
«4»: _ (или «Orageux»),
«5»: _ (u »Pluie et Neige»),
«6»: _ (u »Pluie et Neige Mouillée»),
«7»: _ (u »Променлива 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»: _ (или «Orages Isolés»),
«38»: _ (или «Orages Localisés»),
«39»: _ (или «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»: _ (или «Orages»),
«46»: _ (u »Tempête de Neige»),
«47»: _ (или «Orages Isolés»),
«Na»: _ (u »N / A»),
"-": _ (а ")
}

условия_погода_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 »»),
"-": _(или"")
}

условия_месечен_шрифт = {
«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 «понеделник»),
«Вторник»: _ (u «вторник»),
«Сряда»: _ (u »сряда»),
«Четвъртък»: _ (u »четвъртък»),
«Петък»: _ (u «петък»),
"Събота": _ (u "събота"),
"Неделя": _ (u "Неделя")
}

ден_на_седмична_кратка = {
"Днес": _ (u "Сега"),
«Понеделник»: _ (u «Понеделник»),
«Вторник»: _ (u «вторник»),
«Сряда»: _ (u »сряда»),
«Четвъртък»: _ (u »четвъртък»),
«Петък»: _ (u »пет»),
"Събота": _ (u "събота"),
"Неделя": _ (u "Слънце")
}

ден_на_седмица_е = {
"Днес": _ (u "днес"),
«Понеделник»: _ (u «понеделник»),
«Вторник»: _ (u «вторник»),
«Сряда»: _ (u »сряда»),
«Четвъртък»: _ (u »четвъртък»),
«Петък»: _ (u «петък»),
"Събота": _ (u "събота"),
"Неделя": _ (u "Неделя")
}

ден_на_седмица_кратък_ес = {
"Днес": _ (u "днес"),
"Понеделник": _ (u "понеделник"),
«Вторник»: _ (u »море»),
«Сряда»: _ (u »сряда»),
«Четвъртък»: _ (u »четвъртък»),
«Петък»: _ (u »пет»),
"Събота": _ (u "събота"),
"Неделя": _ (u "dom")
}

ден_на_седмица_фр = {
«Днес»: _ (u »Aujourd'hui»),
«Понеделник»: _ (u »Lundi»),
«Вторник»: _ (u »Марди»),
«Сряда»: _ (u »Mercredi»),
«Четвъртък»: _ (u »Jeudi»),
«Петък»: _ (u »Vendredi»),
"Събота": _ (u "Самеди"),
"Неделя": _ (u "Диманче")
}

day_of_week_short_fr = {
«Днес»: _ (u »Auj»),
"Понеделник": _ (u "Понеделник"),
«Вторник»: _ (u »март»),
"Сряда": _ (u "Мер"),
«Четвъртък»: _ (u »Jeu»),
«Петък»: _ (u «Ела»),
"Събота": _ (u "Сам"),
"Неделя": _ (u "Дим")
}

носеща_стрела_шрифт = {
«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 »«)
}

носещ_текст_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"),
"Техен"),
"SSW": _ (u "SSO"),
«SW»: _ (u »SO»),
"WSW": _ (u "WOW"),
«W»: _ (u »O»),
«WNW»: _ (u »ONO»),
«NW»: _ (u »НЕ»),
«NNW»: _ (u »NNO»),
«N / A»: _ (u »N \ A»)
}

лагер_текст_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"),
"Техен"),
"SSW": _ (u "SSO"),
«SW»: _ (u »SO»),
"WSW": _ (u "WOW"),
«W»: _ (u »O»),
«WNW»: _ (u »ONO»),
«NW»: _ (u »НЕ»),
«NNW»: _ (u »NNO»),
«N / A»: _ (u »N \ A»)
}

клас GlobalWeather:

текущи_условия = []
прогноза за деня = []
нощна_прогноза = []

локал = "в"

options = Няма
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 = 30
DEFAULT_SPACING = u »«

def __init __ (самостоятелно, опции):

self.options = опции

ако self.options.locale == Няма:
опитвам:
# self.locale = locale.getdefaultlocale () [0] [0: 2]
self.locale = «es» # разкоментирайте този ред, за да принудите испанския локал
# self.locale = "fr" # разкоментирайте този ред, за да принудите френски локал
с изключение:
отпечатване "локалът не е зададен"
друго:
# self.locale = self.options.locale
self.locale = «es» # разкоментирайте този ред, за да принудите испанския локал
# self.locale = "fr" # разкоментирайте този ред, за да принудите френски локал

ако self.options.verbose == Вярно:
print >> sys.stdout, "локалът е зададен на", self.locale

def getText (self, nodelist):
rc = ""
за възел в nodelist:
ако node.nodeType == node.TEXT_NODE:
rc = rc + възел.данни
връщане rc

def getSpaces (самостоятелно, интервали):
низ = u »»
ако интервалите == няма:
низ = самостоятелно.DEFAULT_SPACING
друго:
за i в обхват (0, интервали + 1):
низ = низ + u »«
връщащ низ

def isNumeric (самостоятелно, низ):
опитвам:
манекен = плувка (низ)
връщане Вярно
с изключение:
връщане False

def isConnectionAvailable (самостоятелно):
# осигурете достъп до сървъра на weather.com, като отворите URL адреса
опитвам:
Usock = urllib2.urlopen ('http://xoap.weather.com')
Usock.close ()
връщане Вярно
с изключение:
връщане False

def getBearingText (самостоятелно, носещо):
лагер = поплавък (лагер)
ако носи <11.25:
връщане u »N»
elif лагер <33.75:
връщане u »NNE»
elif лагер <56.25:
връщане u »NE»
elif лагер <78.75:
връщане u »ЯН»
elif лагер <101.25:
връщане u »E»
elif лагер <123.75:
връщане u »ESE»
elif лагер <146.25:
връщане u »SE»
elif лагер <168.75:
връщане u »SSE»
elif лагер <191.25:
връщане u »S»
elif лагер <213.75:
връщане u »SSW»
elif лагер <236.25:
връщане u »SW»
elif лагер <258.75:
връщане u »WSW»
elif лагер <281.25:
връщане u »W»
elif лагер <303.75:
връщане u »WNW»
elif лагер <326.25:
връщане u »NW»
elif лагер <348.75:
връщане u »NNW»
друго:
връщане «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 (самостоятелно, mb):
return str (int (floor (float (mb) /33.8582)))

def getTemplateList (самостоятелно, шаблон):

темплателист = []

за template_part в template.split («{«):
ако template_part! = «»:
за template_part в template_part.split ("}"):
ако template_part! = «»:
templatelist.append (u »» + template_part)

връщане templatelist

def getOutputText (self, datatype, startday, endday, night, shortweekday, imperial, hideunits, space):
#опитвам:
изход = u »»

# дефинирайте текущите единици за изход
ако hideunits == False:
ако имперски == невярно:
tempunit = u »° C»
speedunit = u »kph»
единица за налягане = u »mb»
друго:
tempunit = u »° F»
speedunit = u »mph»
налягане = u »в»
друго:
tempunit = u »°»
speedunit = u »»
единица за налягане = u »»

ако начален ден == Няма: # текущи условия

ако тип данни == "DW":
ако self.locale == "е":
ако кратък уикенд == Вярно:
изход = WeatherText.day_of_week_short_es [self.current_conditions [0] .day_of_week]
друго:
изход = WeatherText.day_of_week_es [self.current_conditions [0] .day_of_week]
elif self.locale == "fr":
ако кратък уикенд == Вярно:
изход = WeatherText.day_of_week_short_fr [self.current_conditions [0] .day_of_week]
друго:
изход = WeatherText.day_of_week_fr [self.current_conditions [0] .day_of_week]
друго:
ако кратък уикенд == Вярно:
изход = WeatherText.day_of_week_short [self.current_conditions [0] .day_of_week]
друго:
изход = WeatherText.day_of_week [self.current_conditions [0] .day_of_week]
elif datatype == "WF": # шрифт за времето
изход = WeatherText.conditions_weather_font [self.current_conditions [0] .condition_code]
elif тип данни == "LT":
низ = self.current_conditions [0] .низо
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = низ
elif тип данни == "HT":
string = self.current_conditions [0] .high
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = низ
elif тип данни == "CC":
ако self.locale == "е":
изход = WeatherText.conditions_text_es [self.current_conditions [0] .condition_code]
elif self.locale == "fr":
изход = WeatherText.conditions_text_fr [self.current_conditions [0] .condition_code]
друго:
изход = WeatherText.conditions_text [self.current_conditions [0] .condition_code]
elif тип данни == "CT":
изход = self.current_conditions [0] .condition_text
elif тип данни == "PC":
низ = self.current_conditions [0] .precip
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = низ
elif тип данни == "HM":
низ = self.current_conditions [0] .влажност
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = низ
elif тип данни == "WD":
низ = self.current_conditions [0] .wind_dir
ако self.isNumeric (низ) == True:
низ = self.getBearingText (низ)

ако self.locale == "е":
изход = WeatherText.bearing_text_es [низ]
elif self.locale == "fr":
изход = WeatherText.bearing_text_fr [низ]
друго:
изход = низ

elif тип данни == "BF":
низ = self.current_conditions [0] .wind_dir
ако self.isNumeric (низ) == True:
низ = WeatherText.bearing_arrow_font [self.getBearingText (низ)]
изход = низ
elif тип данни == "WS":
низ = self.current_conditions [0] .wid_speed
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = низ
elif тип данни == "WG":
низ = self.current_conditions [0] .wind_gusts
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = низ
elif тип данни == "CN":
изход = self.current_conditions [0] .city
elif тип данни == "SR":
output = self.current_conditions [0]. изгрев
elif тип данни == "SS":
output = self.current_conditions [0] .sunset
elif тип данни == "MP":
output = self.current_conditions [0] .moon_phase
elif тип данни == "MF":
изход = WeatherText.conditions_moon_font [self.current_conditions [0] .moon_icon]
elif тип данни == "BR":
низ = self.current_conditions [0] .bar_read
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertMillibarsToInches (низ)
низ = низ + единица за налягане
изход = низ
elif тип данни == "BD":
output = self.current_conditions [0] .bar_desc
друго:
output = "\ n ГРЕШКА: Изискан е непознат тип данни"

else: # прогнозни данни

ако endday == Няма: # ако не е зададен endday, използвайте startday
endday = начален ден

ако нощ == Вярно: # нощна прогноза се изисква

за day_number в диапазона (startday, endday + 1):

ако тип данни == "DW":
ако self.locale == "е":
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short_es [self.night_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_es [self.night_forecast [day_number] .day_of_week]
elif self.locale == "fr":
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short_fr [self.night_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_fr [self.night_forecast [day_number] .day_of_week]
друго:
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short [self.night_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week [self.night_forecast [day_number] .day_of_week]
elif datatype == "WF": # шрифт за времето
output = output + self.getSpaces (интервали) + WeatherText.conditions_weather_font [self.night_forecast [day_number] .condition_code]
elif тип данни == "LT":
низ = самостоятелно.нощна прогноза [номер_ ден] .низо
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = изход + self.getSpaces (интервали) + низ

elif тип данни == "HT":
низ = само.нощна_прогноза [номер_ ден] .високо
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "CC":
ако self.locale == "е":
output = output + self.getSpaces (интервали) + WeatherText.conditions_text_es [self.night_forecast [day_number] .condition_code]
elif self.locale == "fr":
output = output + self.getSpaces (интервали) + WeatherText.conditions_text_fr [self.night_forecast [day_number] .condition_code]
друго:
output = output + self.getSpaces (интервали) + WeatherText.conditions_text [self.night_forecast [day_number] .condition_code]
elif тип данни == "CT":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .condition_text
elif тип данни == "PC":
низ = self.night_forecast [номер на ден] .precip
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "HM":
низ = self.night_forecast [номер_ ден] .влажност
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "WD":
низ = само.нощна прогноза [номер на ден] .wid_dir
ако self.locale == "е":
output = output + self.getSpaces (интервали) + WeatherText.bearing_text_es [низ]
elif self.locale == "fr":
output = output + self.getSpaces (интервали) + WeatherText.bearing_text_fr [низ]
друго:
изход = изход + self.getSpaces (интервали) + низ

elif тип данни == "BF":
output = output + self.getSpaces (интервали) + WeatherText.bearing_arrow_font [self.night_forecast [day_number] .wind_dir]
elif тип данни == "WS":
низ = self.night_forecast [номер_ ден] .wid_speed
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "WG":
низ = self.night_forecast [номер_ ден] .wind_gusts
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "CN":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .city
elif тип данни == "SR":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .sunrise
elif тип данни == "SS":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .sunset
elif тип данни == "MP":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .moon_phase
elif тип данни == "MF":
output = output + self.getSpaces (интервали) + WeatherText.conditions_moon_font [self.night_forecast [day_number] .moon_icon]
elif тип данни == "BR":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .bar_read
elif тип данни == "BD":
output = output + self.getSpaces (интервали) + self.night_forecast [day_number] .bar_desc
друго:
output = "\ n ГРЕШКА: Изискан е непознат тип данни"
почивка

else: иска се прогноза за # ден

за day_number в диапазона (startday, endday + 1):

ако тип данни == "DW":
ако self.locale == "е":
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short_es [self.day_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_es [self.day_forecast [day_number] .day_of_week]
elif self.locale == "fr":
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short_fr [self.day_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_fr [self.day_forecast [day_number] .day_of_week]
друго:
ако кратък уикенд == Вярно:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week_short [self.day_forecast [day_number] .day_of_week]
друго:
output = output + self.getSpaces (интервали) + WeatherText.day_of_week [self.day_forecast [day_number] .day_of_week]
elif datatype == "WF": # шрифт за времето
output = output + self.getSpaces (интервали) + WeatherText.conditions_weather_font [self.day_forecast [day_number] .condition_code]
elif тип данни == "LT":
низ = self.day_forecast [day_number] .low
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "HT":
низ = self.day_forecast [номер_ ден] .high
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertCelsiusToFahrenheit (низ)
низ = низ + темпунит
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "CC":
ако self.locale == "е":
output = output + self.getSpaces (интервали) + WeatherText.conditions_text_es [self.day_forecast [day_number] .condition_code]
elif self.locale == "fr":
output = output + self.getSpaces (интервали) + WeatherText.conditions_text_fr [self.day_forecast [day_number] .condition_code]
друго:
output = output + self.getSpaces (интервали) + WeatherText.conditions_text [self.day_forecast [day_number] .condition_code]
elif тип данни == "CT":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .condition_text
elif тип данни == "PC":
низ = self.day_forecast [day_number] .precip
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "HM":
низ = self.day_forecast [номер_ ден] .влажност
ако self.isNumeric (низ) == True:
низ = низ + u »%»
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "WD":
низ = self.day_forecast [номер_ ден] .wid_dir

ако self.locale == "е":
output = output + self.getSpaces (интервали) + WeatherText.bearing_text_es [низ]
elif self.locale == "fr":
output = output + self.getSpaces (интервали) + WeatherText.bearing_text_fr [низ]
друго:
изход = изход + self.getSpaces (интервали) + низ

elif тип данни == "BF":
output = output + self.getSpaces (интервали) + WeatherText.bearing_arrow_font [self.day_forecast [day_number] .wind_dir]
elif тип данни == "WS":
низ = self.day_forecast [day_number] .wind_speed
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "WG":
низ = self.day_forecast [day_number] .wind_gusts
ако self.isNumeric (низ) == True:
ако имперски == Вярно:
низ = self.convertKilometresToMiles (низ)
низ = низ + скоростна единица
изход = изход + self.getSpaces (интервали) + низ
elif тип данни == "CN":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .city
elif тип данни == "SR":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .sunrise
elif тип данни == "SS":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .sunset
elif тип данни == "MP":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .moon_phase
elif тип данни == "MF":
output = output + self.getSpaces (интервали) + WeatherText.conditions_moon_font [self.day_forecast [day_number] .moon_icon]
elif тип данни == "BR":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .bar_read
elif тип данни == "BD":
output = output + self.getSpaces (интервали) + self.day_forecast [day_number] .bar_desc
друго:
изход = u »\ n ГРЕШКА: Заявен е неизвестен тип данни»
почивка

output = u »» + output.strip (u »«) # губят водещи / крайни интервали
връщане на изхода

#с изключение:
#print "getOutputText: Неочаквана грешка:", sys.exc_info () [0]

def getOutputTextFromTemplate (самостоятелно, шаблон):
#опитвам:

# клавиши за данни за шаблон
DATATYPE_KEY = "–datatype ="
STARTDAY_KEY = "–startday ="
ENDDAY_KEY = "–endday ="
NIGHT_KEY = "–нощ"
SHORTWEEKDAY_KEY = "–кратка седмица"
IMPERIAL_KEY = "–imperial"
HIDEUNITS_KEY = "–идеединици"
SPACES_KEY = "–spaces ="

изход = u »»

optionfound = Невярно

# заредете файла
опитвам:
fileinput = отворен (self.options.template)
template = fileinput.read ()
fileinput.close ()
с изключение:
output = u »Шаблонният файл не е намерен!»

templatelist = self.getTemplateList (шаблон)

# позволява да преминем през списъка с шаблони и да определим резултата за всеки намерен елемент
за i в обхват (0, len (templatelist) -1):

pos = templatelist [i] .find (DATATYPE_KEY)
ако pos! = -1:
optionfound = Вярно
pos = pos + len (DATATYPE_KEY)
datatype = templatelist [i] [pos: pos + 4] .strip («}»). strip («{«). strip («-«). strip (»«)
друго:
тип данни = Няма

pos = templatelist [i] .find (STARTDAY_KEY)
ако pos! = -1:
optionfound = Вярно
pos = pos + len (STARTDAY_KEY)
startday = int (templatelist [i] [pos: pos + 4] .strip ("}"). strip ("{"). strip ("-"). strip (""))
друго:
startday = Няма

pos = templatelist [i] .find (ENDDAY_KEY)
ако pos! = -1:
optionfound = Вярно
pos = pos + len (ENDDAY_KEY)
endday = int (templatelist [i] [pos: pos + 4] .strip ("}"). strip ("{"). strip ("-"). strip (""))
друго:
endday = Няма

pos = templatelist [i] .find (NIGHT_KEY)
ако pos! = -1:
optionfound = Вярно
нощ = Вярно
друго:
нощ = Невярно

pos = templatelist [i] .find (SHORTWEEKDAY_KEY)
ако pos! = -1:
optionfound = Вярно
shortweekday = Вярно
друго:
shortweekday = Невярно

pos = templatelist [i] .find (IMPERIAL_KEY)
ако pos! = -1:
optionfound = Вярно
imperial = Вярно
друго:
имперски = невярно

pos = templatelist [i] .find (HIDEUNITS_KEY)
ако pos! = -1:
optionfound = Вярно
hideunits = Вярно
друго:
hideunits = Невярно

pos = templatelist [i] .find (SPACES_KEY)
ако pos! = -1:
optionfound = Вярно
pos = pos + len (SPACES_KEY)
интервали = int (templatelist [i] [pos: pos + 4] .strip («}»). strip («{«). strip («-«). strip (»«))
друго:
интервали = 1

ако optionfound == True:
templatelist [i] = self.getOutputText (тип данни, начален ден, краен ден, нощ, къс седмица, императорски, скрити единици, интервали)
optionfound = Невярно

# преминете през списъка, свързващ изхода сега, когато е попълнен
за артикул в шаблонист:
изход = изход + артикул

връщане на изхода

#с изключение:
#print "getOutputTextFromTemplate: Неочаквана грешка:", sys.exc_info () [0]

def fetchData (самостоятелно):

# винаги извличайте метрични данни, използвайте функции за разговор на тези данни
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)

ако self.isConnectionAvailable () == False:
ако os.path.exists (file_path_current):
RefetchData = Невярно
else: # няма връзка, няма кеш, взрив!
print "Няма налична интернет връзка и не съществуват кеширани данни за времето."
elif self.options.refetch == Вярно:
RefetchData = Вярно
друго:
# данните трябва ли да се извличат отново?
ако os.path.exists (file_path_current):
lastmodDate = time.localtime (os.stat (file_path_current) [ST_MTIME])
expiryDate = (datetime.datetime.today () - datetime.timedelta (минути = самостоятелно.EXPIRY_MINUTES)). timetuple ()

ако срок на действие> lastmodDate:
RefetchData = Вярно
друго:
RefetchData = Невярно
друго:
RefetchData = Вярно

# извличане на данните за текущите условия, или от уебсайта, или чрез „депикиране“
ако RefetchData == Вярно:

# получаване на данни за текущите условия от услугата xoap
опитвам:

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

url = 'http://xoap.weather.com/weather/local/' + self.options.location + '? cc = * & dayf = 8 & link = xoap∏ = xoap & par = 1061785028 & key = e374effbfd74930b & единица = m '
ако self.options.verbose == Вярно:
печат >> sys.stdout, «извличане на данни за времето от«, url

Usock = urllib2.urlopen (url)
xml = usock.read ()
Usock.close ()
self.weatherxmldoc = minidom.parseString (xml)
с изключение:
print "fetchData: Неочаквана грешка:", sys.exc_info () [0]
print "Не мога да се свържа с източника на времето за текущи условия"

# кажете на потребителя дали местоположението е лошо ...
намерено = xml.find ("Предоставено невалидно местоположение")
ако се намери! = -1:
print "Предоставено невалидно местоположение"

# разпитвайте данни за времето, зареждайте се в структурата на класа и ги мариновайте
опитвам:

# подгответе списъци с данни за времето
self.current_conditions = []
self.day_forecast = []
self.night_forecast = []

# събиране на общи данни
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)

# събиране на данни за текущите условия
day_of_week = u »Днес»
утайка = u »N / A»
sunrise_n = location_n.getElementsByTagName ('sunr') [0]
изгрев = self.getText (sunrise_n.childNodes)
sunset_n = location_n.getElementsByTagName ('слънца') [0]
залез = 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 ('икона') [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 ('порив') [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)
влажност_n = текущо_условие_n.getElementsByTagName ('hmid') [0]
влажност = self.getText (влажност_n.childNodes)
moon_n = current_condition_n.getElementsByTagName ('moon') [0]
moon_icon_n = moon_n.getElementsByTagName ('икона') [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, влажност, wind_direction, wind_speed, wind_ пориви, град, изгрев, залез, moon_phase, moon_icon, bar_read, bar_desc)
self.current_conditions.append (текущи_условия_данни)

# събира прогнозни данни
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_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 ('ниско') [0]
low_temp = self.getText (low_temp_n.childNodes)

sunrise_n = day.getElementsByTagName ('sunr') [0]
изгрев = self.getText (sunrise_n.childNodes)
sunset_n = day.getElementsByTagName ('слънца') [0]
залез = self.getText (sunset_n.childNodes)

# дневни прогнозни данни
daytime_n = day.getElementsByTagName ('част') [0] # ден
condition_code_n = daytime_n.getElementsByTagName ('икона') [0]
condition_code = self.getText (condition_code_n.childNodes)
condition_n = daytime_n.getElementsByTagName ('t') [0]
условие = self.getText (условие_n.childNodes)
precip_n = daytime_n.getElementsByTagName ('ppcp') [0]
precip = self.getText (precip_n.childNodes)
влажност_n = daytime_n.getElementsByTagName ('hmid') [0]
влажност = self.getText (влажност_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 ('порив') [0]
wind_gusts = self.getText (wind_gusts_n.childNodes)
day_forecast_data = WeatherData (day_of_week, low_temp, high_temp, condition_code, условие, утайка, влажност, посока на вятъра, скорост на вятъра, пориви на вятъра, град, изгрев, залез, moon_phase, moon_icon, bar_read, bar_desc)
self.day_forecast.append (day_forecast_data)

# конкретни данни за нощна прогноза
daytime_n = day.getElementsByTagName ('част') [1] # нощ
condition_code_n = daytime_n.getElementsByTagName ('икона') [0]
condition_code = self.getText (condition_code_n.childNodes)
condition_n = daytime_n.getElementsByTagName ('t') [0]
условие = self.getText (условие_n.childNodes)
precip_n = daytime_n.getElementsByTagName ('ppcp') [0]
precip = self.getText (precip_n.childNodes)
влажност_n = daytime_n.getElementsByTagName ('hmid') [0]
влажност = self.getText (влажност_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 ('порив') [0]
wind_gusts = self.getText (wind_gusts_n.childNodes)
night_forecast_data = WeatherData (day_of_week, low_temp, high_temp, condition_code, условие, утайка, влажност, посока на вятъра, скорост на вятъра, пориви на вятъра, град, изгрев, залез, moon_phase, moon_icon, bar_read, bar_desc)
self.night_forecast.append (night_forecast_data)

# мариновайте данните за следващия път!
fileoutput = отворен (file_path_current, 'w')
pickle.dump (self.current_conditions, fileoutput)
fileoutput.close ()

fileoutput = отворен (file_path_dayforecast, 'w')
pickle.dump (self.day_forecast, fileoutput)
fileoutput.close ()

fileoutput = отворен (file_path_nightforecast, 'w')
pickle.dump (self.night_forecast, fileoutput)
fileoutput.close ()

с изключение:
print "fetchData: Неочаквана грешка:", sys.exc_info () [0]
print "Не може да се разпитат метеорологичните данни"

else: # извлича данни за времето от мариновани файлове на класа
ако self.options.verbose == Вярно:
печат >> sys.stdout, «извличане на данни за времето от файл:«, file_path_current

fileinput = отворен (file_path_current, 'r')
self.current_conditions = pickle.load (вход за файл)
fileinput.close ()

ако self.options.verbose == Вярно:
печат >> sys.stdout, "извличане на данни за прогноза за деня от файлове:", file_path_dayforecast, file_path_nightforecast

fileinput = отворен (file_path_dayforecast, 'r')
self.day_forecast = pickle.load (въвеждане на файл)
fileinput.close ()

ако self.options.verbose == Вярно:
печат >> sys.stdout, "извличане на данни за прогноза за деня от файлове:", file_path_nightforecast, file_path_nightforecast

fileinput = отворен (file_path_nightforecast, 'r')
self.night_forecast = pickle.load (въвеждане на файл)
fileinput.close ()

def outputData (самостоятелно):
#опитвам:

if self.options.template! = Няма:

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

друго:

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")

#с изключение:
#print «outputData: Неочаквана грешка:«, sys.exc_info () [0]

ако __name__ == "__main__":

парсер = CommandLineParser ()
(опции, аргументи) = парсер.parse_args ()

ако options.verbose == Вярно:
print >> sys.stdout, "location:", options.location
печат >> sys.stdout, "imperial:", options.imperial
печат >> sys.stdout, "тип данни:", options.datatype
print >> sys.stdout, "night:", options.night
print >> sys.stdout, "начален ден:", options.startday
print >> sys.stdout, "end day:", options.endday
печат >> sys.stdout, "интервали:", options.spaces
print >> sys.stdout, "многословен:", options.verbose
print >> sys.stdout, "refetch:", options.refetch

# създайте нов глобален обект за времето
времето = GlobalWeather (опции)
weather.fetchData ()
weather.outputData ()

Създаваме файла ~ / Conky / scripts / myweather.template

gedit ~ / Conky / scripts / myweather.template

поставяме следното вътре:

{–Datatype = DW –startday = 1}: {–datatype = CC –startday = 1}
{–Datatype = HT –startday = 1} / {–datatype = LT –startday = 1} Вятър от {–datatype = WD –startday = 1} до {–datatype = WS –startday = 1}
Влажност: {–datatype = HM –startday = 1} Валежи: {–datatype = PC –startday = 1}
Изгрев: {–datatype = SR –startday = 1} Залез: {–datatype = SS –startday = 1}
----------------
{–Datatype = DW –startday = 2}: {–datatype = CC –startday = 2}
{–Datatype = HT –startday = 2} / {–datatype = LT –startday = 2} Вятър от {–datatype = WD –startday = 2} до {–datatype = WS –startday = 2}
Влажност: {–datatype = HM –startday = 2} Валежи: {–datatype = PC –startday = 2}
Изгрев: {–datatype = SR –startday = 2} Залез: {–datatype = SS –startday = 2}
----------------
{–Datatype = DW –startday = 3}: {–datatype = CC –startday = 3}
{–Datatype = HT –startday = 3} / {–datatype = LT –startday = 3} Вятър от {–datatype = WD –startday = 3} до {–datatype = WS –startday = 3}
Влажност: {–datatype = HM –startday = 3} Валежи: {–datatype = PC –startday = 3}
Изгрев: {–datatype = SR –startday = 3} Залез: {–datatype = SS –startday = 3}
----------------
{–Datatype = DW –startday = 4}: {–datatype = CC –startday = 4}
{–Datatype = HT –startday = 4} / {–datatype = LT –startday = 4} Вятър от {–datatype = WD –startday = 4} до {–datatype = WS –startday = 4}
Влажност: {–datatype = HM –startday = 4} Валежи: {–datatype = PC –startday = 4}
Изгрев: {–datatype = SR –startday = 4} Залез: {–datatype = SS –startday = 4}

Създаваме файла ~ / Conky / scripts / mail / conkyEmail.py (трябва да създадем пощенската папка)

gedit ~ / Conky / scripts / mail / conkyEmail.py

и поставете следното вътре:

импортирам ви
низ за импортиране

# Въведете вашето потребителско име и парола по-долу в двойни кавички
# напр. потребителско име = »потребителско име» и парола = »парола»
потребителско име = »YOUR_USUARIO_SINARROBA«
парола = »ВАШИЯТ_КЛЮЧ«

com = »wget -O - https: //» + потребителско име + »:» + парола + »@ mail.google.com / mail / feed / atom –no-check-certificate»

temp = os.popen (com)
msg = temp.read ()
index = string.find (msg, » »)
index2 = string.find (msg, » »)
fc = int (съобщение [индекс + 11: индекс2])

ако fc == 0:
отпечатай "0 нови"
друго:
print str (fc) + »ново»

Така че сега имате 7 файла:

В папката: ~
-> .startconky << - направи изпълним файл

В папката: ~ / Conky
-> conkymain
-> conkyforecast
-> conkymail

и в папката: ~ / Conky / скриптове
-> conkyForecast.py << - направи изпълним
-> myweather.template

и в папката: ~ / Conky / scripts / mail
conkyEmail.py << - направи изпълним файл

И това е, разяснения, където пише / home / user / ... вашето потребителско име отива и в частта, където отиват данните на Gmail, подчертах в цветове, където трябва да поставите вашите данни.

за да убиете нестабилния процес, напишете в конзолата

убий конки

за да стартирате conky write в конзола

./.startconky

след като всичко е коригирано, ако искате conky да започне всяка сесия

Система -> Предпочитания -> Сесии и в стартови програми го добавяме

В Name можем да напишем Conky, в Order ./.startconky с това ще стартира всеки път, когато включите компютъра.

Това е, надявам се да ви помогне.


Съдържанието на статията се придържа към нашите принципи на редакторска етика. За да съобщите за грешка, щракнете върху тук.

Бъдете първите, които коментират

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.