Conky, Моє налаштування

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

Як бачите, мова йде про 3 конкі, які виконуються за допомогою скрипта, конфігурація того самого базується на цей пост опублікував користувач Брюс М. на форумах Ubuntu-Ar з деякими змінами в поштовій програмі, яка в моєму випадку стосується 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 блакитний
color1 світло-блакитний
колір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_borders ні
draw_outline yes # підсилює текст, якщо так
draw_shades так # тінькольоровий чорний

TEXT
$ {font calibri: size = 12} $ {alignc} $ {color1} $ sysname $ ядро ​​на $ machine} $ color $ font
$ {font calibri: size = 12} $ {alignc} $ {color2} $ {exec whoami} @ $ nodename $ color $ font
$ {color0} $ {hr 1} $ color
$ {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} $ color
$ {voffset 5} $ {color2} Процесор: $ {alignc} $ color $ running_processes $ {color1} / $ color $ process $ {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 $ {buffers} $ {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} $ color
$ {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} $ color
$ {color1} Від: $ color Буенос-Айрес, Аргентина
$ {color1} Широта: $ {color2} 34 ° 35'S $ {color1} Довга: $ {color2} 58 ° 21'W $ {color1} Висота: $ {color2} 25 м $ кольорова
$ {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} $ color
$ {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} $ color
$ {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} $ color
$ {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} $ color
$ {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} $ шрифт $ колір
$ {color0} $ {hr} $ кольору
$ {voffset 5} $ {color2} IP: $ {alignc} $ color $ {addr eth0}
$ {color1} Вниз: $ color $ {зменшена швидкість eth0} к / с $ {alignr 2} $ {color1} Вгору: $ color $ {швидкість eth0} к / с
$ {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} Сервіс / порт $ 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 блакитний
color1 світло-блакитний
колір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_borders ні
draw_outline yes # підсилює текст, якщо так
draw_shades так # тінькольоровий чорний

TEXT
$ {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 блакитний
color1 світло-блакитний
колір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_borders ні
draw_outline yes # підсилює текст, якщо так
draw_shades так # тінькольоровий чорний

TEXT
$ {font calibri: size = 11} $ {alignc} $ {color4} Gmail
$ {color0} $ {hr} $ кольору
$ {font calibri: size = 11} $ {color4} У нас $ {color3} $ {execi 300 python ~ / Conky / scripts / mail / conkyEmail.py} $ {color4} email (s) $ font

Ми створюємо файл у ~ / Conky / scripts / conkyForecast.py (ми повинні створити папку скриптів)

gedit ~ / Conky / scripts / conkyForecast.py

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

імпортувати sys, os, сокет, urllib2, дату та час
з xml.dom імпорт мінідом
із імпорту статистики *
з імпорту optparse OptionParser
локаль імпорту
імпортувати gettext
імпортний соління
з математичного імпорту *

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

клас CommandLineParser:

синтаксичний аналізатор = Немає

def __init __ (self):

self.parser = OptionParser ()
self.parser.add_option («- l», »- location», dest = »location», за замовчуванням = »UKXX0103 ″, type =» string », metavar =» CODE », help = u» код місцезнаходження для даних про погоду [ за замовчуванням:% за замовчуванням], використовуйте таку URL-адресу, щоб визначити код свого місцезнаходження за назвою міста: http://xoap.weather.com/search/search?where=Norwich »)
self.parser.add_option ("- d", "- тип даних", dest = "тип даних", за замовчуванням = "HT", тип = "рядок", metavar = "DATATYPE", довідка = 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», за замовчуванням = 1, metavar = »NUMBER», help = u »[за замовчуванням:% за замовчуванням] Визначає кількість пробілів між вихідним діапазоном. Не застосовується в командному рядку при використанні шаблонів. »)
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", за замовчуванням = False, action = "store_true", help = u "запит імперських одиниць, якщо пропущений вивід у метриці. Не застосовується в командного рядка при використанні шаблонів. »)
self.parser.add_option («- n», »- ніч», dest = »ніч», за замовчуванням = False, action = »store_true», help = u »перемкнути вихід на нічні дані, якщо пропущений вихідний день буде виведено. Не застосовується в командному рядку при використанні шаблонів. »)
self.parser.add_option («- w», »- shortweekday», dest = »shortweekday», за замовчуванням = False, action = »store_true», help = u »Скоротіть тип даних дня тижня до 3 символів. Не застосовується в командного рядка при використанні шаблонів. »)
self.parser.add_option («- u», »- hidunits», dest = »hidunits», за замовчуванням = False, action = »store_true», help = u »Сховати одиниці виміру, такі як mph / C, символи градусів (°) як і раніше відображається. Не застосовується в командному рядку при використанні шаблонів. »)
self.parser.add_option («- v», »- багатослівний», dest = »багатослівний», за замовчуванням = 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):
(параметри, аргументи) = self.parser.parse_args ()
повернення (параметри, аргументи)

def print_help (self):
повернути self.parser.print_help ()

клас WeatherData:
def __init __ (self, day_of_ тиждень, низький, високий, код_умови, text_text, опад, вологість, wind_dir, wind_speed, wind_ пориви, місто, схід сонця, захід сонця, 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 »» + опад
self.humidity = u »» + вологість
self.wind_dir = u »» + dir_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 «Дме сніг»),
«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»),
"-": _ (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 «Заметіль снігу»),
«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»),
"-": _ (a ")
}

условия_текста_fr = {
«0»: _ (u «Торнада»),
«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 avers»),
«8»: _ (u «Bruine Givrante»),
«9»: _ (u «Бруйн»),
«10»: _ (u «Pluie Glacante»),
«11»: _ (u «Аверси»),
«12»: _ (u «Аверси»),
«13»: _ (u «Légère Neige»),
«14»: _ (u »Forte Neige»),
«15»: _ (u »Tempête de Neige»),
«16»: _ (u »Neige»),
«17»: _ (u «Греле»),
«18»: _ (u »Pluie / Neige»),
«19»: _ (u »Nuage de poussière»),
«20»: _ (u »Брауйяр»),
«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 «Новини розслідування»),
«30»: _ (u «Новини розслідування»),
«31»: _ (u «Бо»),
«32»: _ (u «Бо»),
«33»: _ (u «Belles Éclaircies»),
«34»: _ (u «Belles Éclaircies»),
«35»: _ (u »Pluie avec Grêle»),
«36»: _ (u «Шалер»),
«37»: _ (або «Orages Isolés»),
«38»: _ (або «Orages Localisés»),
«39»: _ (або «Orages Localisés»),
«40»: _ (u «Averses Localisées»),
«41»: _ (u «Нейж Лурд»),
«42»: _ (u »Tempête de Neige Localisées»),
«43»: _ (u «Нейж Лурд»),
«44»: _ (u «Новини розслідування»),
«45»: _ (або «Ораги»),
«46»: _ (u »Tempête de Neige»),
«47»: _ (або «Orages Isolés»),
«Na»: _ (u »N / A»),
"-": _ (a ")
}

умова_погодний_шрифт = {
«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 «Лунді»),
«Вівторок»: _ (u «Марді»),
«Середа»: _ (u «Mercredi»),
«Четвер»: _ (u «Jeudi»),
«П’ятниця»: _ (u «Вендреді»),
"Субота": _ (u "Самеді"),
"Неділя": _ (u "Діманче")
}

день_тижня_короткий_фр = {
«Сьогодні»: _ (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»),
«Недоступно»: _ (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:

поточні_умови = []
прогноз_день = []
нічний_прогноз = []

locale = "in"

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 = параметри

якщо 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 == True:
print >> sys.stdout, "для мови встановлено значення", self.locale

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

def getSpaces (self, пробіли):
рядок = u »»
якщо пробіли == немає:
рядок = self.DEFAULT_SPACING
ще:
для i в діапазоні (0, пробіли + 1):
рядок = рядок + u »«
зворотний рядок

def isNumeric (self, string):
спробуйте:
dummy = float (рядок)
повернути True
крім:
повернути Неправдиво

def isConnectionAvailable (self):
# переконайтеся, що ми можемо отримати доступ до сервера weather.com, відкривши URL-адресу
спробуйте:
Usock = urllib2.urlopen ('http://xoap.weather.com')
Usock.close ()
повернути True
крім:
повернути Неправдиво

def getBearingText (self, bearing):
підшипник = поплавок (підшипник)
якщо підшипник <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):
повернути 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):

шаблоніст = []

для template_part у template.split («{«):
якщо template_part! = «»:
для template_part у template_part.split ("}"):
якщо template_part! = «»:
templatelist.append (u »» + template_part)

повернення шаблоніста

def getOutputText (self, тип даних, початковий день, кінцевий день, ніч, короткий тиждень, імператорський, hidunits, пробіли):
# спробуйте:
вихід = u »»

# визначити поточні одиниці виміру на виході
якщо hideunits == False:
якщо імперський == False:
темпуніт = u »° C»
швидкісний блок = u »км / год»
одиниця тиску = u »мб»
ще:
tempunit = u »° F»
speedunit = u »миль / год»
одиниця тиску = u »в»
ще:
tempunit = u »°»
speedunit = u »»
одиниця тиску = u »»

якщо початковий день == Немає: # поточні умови

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

якщо self.locale == "є":
output = WeatherText.bearing_text_es [рядок]
elif self.locale == "fr":
output = 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:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
вихід = рядок
elif тип даних == "WG":
рядок = self.current_conditions [0] .wind_gusts
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
вихід = рядок
elif тип даних == "CN":
output = self.current_conditions [0] .city
elif тип даних == "SR":
output = self.current_conditions [0] .sunrise
elif тип даних == "SS":
output = self.current_conditions [0] .sunset
elif тип даних == "MP":
output = self.current_conditions [0]. місячна_фаза
elif тип даних == "MF":
output = WeatherText.conditions_moon_font [self.current_conditions [0] .moon_icon]
elif тип даних == "BR":
рядок = self.current_conditions [0] .bar_read
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertMillibarsToInches (рядок)
рядок = рядок + одиниця тиску
вихід = рядок
elif тип даних == "BD":
output = self.current_conditions [0] .bar_desc
ще:
output = "\ nПОМИЛКА: запитується невідомий тип даних"

else: # дані прогнозу

if endday == None: # якщо не встановлено endday, використовуйте startday
endday = день початку

якщо ніч == Правда: # необхідний прогноз на ніч

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

якщо тип даних == "DW":
якщо self.locale == "є":
якщо короткий тиждень == True:
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":
якщо короткий тиждень == True:
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]
ще:
якщо короткий тиждень == True:
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.night_forecast [номер_ дня] .low
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertCelsiusToFahrenheit (рядок)
рядок = рядок + темпуніт
output = output + self.getSpaces (пробіли) + рядок

elif тип даних == "HT":
рядок = self.night_forecast [номер_день] .high
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertCelsiusToFahrenheit (рядок)
рядок = рядок + темпуніт
output = output + 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 тип даних == "ПК":
рядок = self.night_forecast [номер_день] .precip
якщо self.isNumeric (рядок) == True:
рядок = рядок + u »%»
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "HM":
рядок = self.night_forecast [номер_ дня] .вологість
якщо self.isNumeric (рядок) == True:
рядок = рядок + u »%»
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "WD":
рядок = self.night_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 [рядок]
ще:
output = output + 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:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "WG":
рядок = self.night_forecast [номер_день]. пориви вітру
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
output = output + 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ПОМИЛКА: запитується невідомий тип даних"
перерву

ще: потрібен прогноз на # день

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

якщо тип даних == "DW":
якщо self.locale == "є":
якщо короткий тиждень == True:
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":
якщо короткий тиждень == True:
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]
ще:
якщо короткий тиждень == True:
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 [номер_ дня] .low
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertCelsiusToFahrenheit (рядок)
рядок = рядок + темпуніт
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "HT":
рядок = self.day_forecast [номер_ дня] .high
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertCelsiusToFahrenheit (рядок)
рядок = рядок + темпуніт
output = output + 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 тип даних == "ПК":
рядок = self.day_forecast [номер_дня] .precip
якщо self.isNumeric (рядок) == True:
рядок = рядок + u »%»
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "HM":
рядок = self.day_forecast [номер_ дня] .вологість
якщо self.isNumeric (рядок) == True:
рядок = рядок + u »%»
output = output + 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 [рядок]
ще:
output = output + self.getSpaces (пробіли) + рядок

elif тип даних == "BF":
output = output + self.getSpaces (пробіли) + WeatherText.bearing_arrow_font [self.day_forecast [day_number] .wind_dir]
elif тип даних == "WS":
рядок = self.day_forecast [номер_ дня] .wid_speed
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
output = output + self.getSpaces (пробіли) + рядок
elif тип даних == "WG":
рядок = self.day_forecast [номер_день] .wind_gusts
якщо self.isNumeric (рядок) == True:
якщо imperial == True:
рядок = self.convertKilometresToMiles (рядок)
рядок = рядок + швидкісний блок
output = output + 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
ще:
output = u »\ nПОМИЛКА: запитується невідомий тип даних»
перерву

output = u »» + output.strip (u »«) # втратити пробіли на початку / кінці
повернутий вихід

# за винятком:
#print "getOutputText: Несподівана помилка:", sys.exc_info () [0]

def getOutputTextFromTemplate (self, template):
# спробуйте:

# ключі до даних шаблону
DATATYPE_KEY = "–datatype ="
STARTDAY_KEY = "–startday ="
ENDDAY_KEY = "–endday ="
NIGHT_KEY = "–ночі"
SHORTWEEKDAY_KEY = "–короткий тиждень"
IMPERIAL_KEY = "–імперський"
HIDEUNITS_KEY = "–ідединиці"
SPACES_KEY = "–spaces ="

вихід = u »»

optionfound = Неправильно

# завантажте файл
спробуйте:
fileinput = відкритий (self.options.template)
template = fileinput.read ()
fileinput.close ()
крім:
output = u »Файл шаблону не знайдено!»

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

# дозволяє пройтись по списку шаблонів і визначити результат для кожного знайденого елемента
для i в діапазоні (0, len (шаблоніст) -1):

pos = templatelist [i] .find (DATATYPE_KEY)
якщо pos! = -1:
optionfound = Істина
pos = pos + len (DATATYPE_KEY)
тип даних = 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 (""))
ще:
день початку = Немає

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 = Істина
короткий тиждень = Правда
ще:
короткий тиждень = Невірно

pos = templatelist [i] .find (IMPERIAL_KEY)
якщо pos! = -1:
optionfound = Істина
імперський = Правда
ще:
імперський = Помилковий

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 (self):

# завжди отримуйте метричні дані, використовуйте функції бесіди на цих даних
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 = Невірно
ще: # немає підключення, немає кешу, вибух!
print "Немає підключення до Інтернету і не існує кешованих даних про погоду."
elif self.options.refetch == Правда:
RefetchData = Істина
ще:
# чи потрібно дані знову отримувати?
якщо os.path.exists (file_path_current):
lastmodDate = time.localtime (os.stat (поточний_файл_файлу) [ST_MTIME])
expiryDate = (datetime.datetime.today () - datetime.timedelta (minutes = self.EXPIRY_MINUTES)). timetuple ()

якщо expiryDate> lastmodDate:
RefetchData = Істина
ще:
RefetchData = Невірно
ще:
RefetchData = Істина

# отримати дані про поточні умови, або з веб-сайту, або "знявши пікіровку"
якщо RefetchData == True:

# отримати дані про поточні умови із служби 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 & одиниця = м '
якщо self.options.verbose == True:
друк >> 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 »Не застосовується»
sunrise_n = location_n.getElementsByTagName ('sunr') [0]
sunrise = self.getText (sunrise_n.childNodes)
sunset_n = location_n.getElementsByTagName ('suns') [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 ('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 ('порив') [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 (moist_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 = Погодні дані (день_тижня, current_temp_feels, current_temp, current_code, current_desc, осад, вологість, напрямок вітру, wind_speed, пориви вітру, місто, схід сонця, захід сонця, moon_phase, moon_icon, bar_read, bar_desc)
self.current_conditions.append (current_conditions_data)

# збирати прогнозні дані
bar_read = u »Недоступно»
bar_desc = u »Не застосовується»
moon_phase = u »Недоступно»
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 ('привіт') [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]
sunrise = 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 ('icon') [0]
умовний код = self.getText (умовний_код_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)
moist_n = daytime_n.getElementsByTagName ('hmid') [0]
вологість = self.getText (moist_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 (день_тижня, низька_температура, висока_температура, код_умови, умова, опад, вологість, напрямок вітру, швидкість вітру, пориви вітру, місто, схід сонця, захід сонця, фаза місяця, місяць_ікона, бар_читати, бар_деск)
self.day_forecast.append (day_forecast_data)

# конкретні дані нічного прогнозу
daytime_n = day.getElementsByTagName ('частина') [1] # ніч
condition_code_n = daytime_n.getElementsByTagName ('icon') [0]
умовний код = self.getText (умовний_код_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)
moist_n = daytime_n.getElementsByTagName ('hmid') [0]
вологість = self.getText (moist_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 (день_тижня, низька_температура, висока_температура, код_умови, умова, опад, вологість, напрямок_вітру, швидкість вітру, пориви вітру, місто, схід сонця, захід сонця, фаза місяця, місяць_ікона, бар_читати, бар_деск)
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 == True:
print >> sys.stdout, «отримання даних про погоду з файлу:«, file_path_current

fileinput = відкритий (file_path_current, 'r')
self.current_conditions = pickle.load (введення файлу)
fileinput.close ()

якщо self.options.verbose == True:
print >> sys.stdout, "отримання даних прогнозу дня з файлів:", file_path_dayforecast, file_path_nightforecast

fileinput = відкритий (file_path_dayforecast, 'r')
self.day_forecast = pickle.load (введення файлу)
fileinput.close ()

якщо self.options.verbose == True:
друк >> sys.stdout, «отримання даних прогнозу дня з файлів:«, file_path_nightforecast, file_path_nightforecast

fileinput = відкритий (file_path_nightforecast, 'r')
self.night_forecast = pickle.load (введення файлу)
fileinput.close ()

def outputData (self):
# спробуйте:

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__ == "__основна__":

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

якщо options.verbose == True:
print >> sys.stdout, "location:", options.location
print >> sys.stdout, "imperial:", options.imperial
print >> sys.stdout, "тип даних:", options.datatype
print >> sys.stdout, "night:", options.night
друк >> sys.stdout, "день початку:", options.startday
print >> sys.stdout, "end day:", options.endday
print >> 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

і ми вставляємо всередину наступне:

імпортувати вас
рядок імпорту

# Введіть своє ім’я користувача та пароль нижче в подвійних лапках
# наприклад. username = »ім'я користувача» та пароль = »пароль»
ім'я користувача = »ВАШЕ_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 / scripts
-> conkyForecast.py << - зробити виконуваним
-> myweather.template

а в папці: ~ / Conky / scripts / mail
conkyEmail.py << - зробити виконуваним

І все.

щоб убити процес хитрості, напишіть на консоль

вбити конкі

для запуску conky запису в консоль

./.startconky

як тільки ви все налаштуєте, якщо ви хочете, щоб conky розпочав кожен сеанс

Система -> Налаштування -> Сеанси та в програми запуску ми додаємо її

В Name ми можемо написати Conky, а в Order ./.startconky це починатиметься кожного разу, коли ви вмикаєте ПК.

Ось і все, сподіваюся, це допоможе вам.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

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