Conky, penyiapan saya

Fecfactor meminta saya kemarin untuk mempublikasikan konfigurasi conky yang saya tunjukkan pada gambar di bawah

Seperti yang Anda lihat, ada 3 conkys, yang dijalankan dengan menggunakan skrip, konfigurasinya didasarkan pada posting ini diposting oleh pengguna Bruce M. di forum Ubuntu-Ar dengan beberapa modifikasi pada mail conky, yang dalam kasus saya adalah untuk Gmail.

Dalam posting referensi dijelaskan dengan sangat baik oleh Bruce, tetapi juga sebagai bantuan memori bagi saya, saya akan menyalin langkah-langkah yang harus diikuti dan kode conkys saya untuk siapa pun yang memilikinya.

Nah, tentu saja kita perlu menginstal conky, curl dan python sehingga kita mengetik di konsol:

sudo apt-get install conky curl python

Sumber weather.ttf dan arrows.ttf di sini. Sumber bulan.ttf di sini setelah diunduh, Anda harus menyalinnya ke / usr / share / font

Sekarang mari kita buat skrip yang disebut ~. / Startconky

gksudo gedit ~ / .startconky

di dalam file kosong kami menempel yang berikut ini

#! / bin / bash
sleep 0 & # 0 baik untuk Xfce - gunakan 20 hingga 30 untuk Gnome
conky -c ~ / Conky / conkymain &
#sleep 0 & # 0 bagus untuk Xfce - gunakan 1 untuk Gnome
conky -c ~ / Conky / conkyforecast &
#sleep 0 & # 0 bagus untuk Xfce - gunakan 1 untuk Gnome
conky -c ~ / Conky / conkymail &

Sekarang kita membuat file conkymain di folder ~ / Conky, jika tidak kita memiliki folder Conky, kita harus membuatnya.

gedit ~ / Conky / conkymain

Saya menggunakan font Calibri, jika Anda tidak memilikinya, ganti dengan apa pun yang Anda inginkan.

Kami tetap di dalam apa yang berikut

latar belakang tidak
own_window ya
own_window_transparent ya
own_window_hints tidak didekorasi, di bawah, sticky, skip_taskbar, skip_pager
own_window_colour hitam
double_buffer ya
use_spacer tersisa
use_xft ya
font calibri: size = 9
xftfont kalibrasi: ukuran = 9
xftalpha 0.5
pembaruan_interval 5.0
huruf besar tidak # disetel ke ya jika Anda ingin semua teks menggunakan huruf besar
titik_titik 3
batas_margin 9
batas_lebar 10
default_color putih
default_outline_color hitam
default_shade_color hitam
warna0 cyan
warna1 biru muda
warna2 oranye
color3 kuning
color4 gandum
color5 putih
color6 putih
color7 putih
color8 putih
color9 putih
perataan top_right # atau top_left, bottom_left, bottom_right
celah_x 10
celah_y 35
text_buffer_size 128 # gunakan 1024 untuk perkiraan
no_buffers yes # Kurangi buffer sistem file dari memori yang digunakan?
draw_border no
draw_outline yes # memperkuat teks jika ya
draw_shades yes # shadecolor hitam

TEKS
$ {font calibri: size = 12} $ {alignc} $ {color1} $ sysname $ kernel pada $ 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 $ font
$ {color3} UpTime: $ {alignr 2} $ uptime $ color
$ {color0} $ {hr 1} $ color
$ {voffset 5} $ {color2} CPU: $ {alignc} $ color $ running_processes $ {color1} / $ color $ proses $ {alignr 2} $ {color2} $ {cpubar cpu0 14,80} $ color
$ {color1} $ {voffset -16} $ {alignr 5} $ cpu% $ color
$ {voffset 2} $ {color1} Rata-rata Muat ($ {color3} Min $ {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} Buffered: $ color $ {buffer} $ {alignr 2} $ {color1} Tembolok: $ color $ {cached}
$ {voffset 5} $ {color2} TUKAR: $ 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} Info HD $ {color1} - $ color Gratis $ {color1} - Bekas - $ {color2} Total
$ {voffset 5} $ {color1} Akar: $ color $ {fs_free_perc /}% $ {alignr 2} $ {fs_free /} $ {color2} / $ {color1} $ {fs_used /} $ color / $ {color2} $ {fs_size /} $ color
$ {color1} Beranda: $ color $ {fs_free_perc / home / user}% $ {alignr 2} $ {fs_free / home / user} $ {color2} / $ {color1} $ {fs_used / home / user} $ color / $ {color2} $ {fs_size / home / user} $ color
$ {color0} $ {hr 1} $ color
$ {color1} Dari: $ color Buenos Aires, Argentina
$ {color1} Lintang: $ {color2} 34 ° 35 $ {color1} Panjang: $ {color2} 58 ° 21'W $ {color1} Alt: $ {color2} 25 m $ color
$ {voffset 5} $ {color2} $ {font calibri: size = 12} hari ini: $ font $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = CC} $ warna $ {alignr 2} $ {color1} ST: $ {color2} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = LT}
$ {color3} $ {font Cuaca: 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 Panah: size = 20} $ {color4} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = BF} $ color $ font
$ {alignc 10} $ {voffset 5} $ {color4} Angin: $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = WS} $ color
$ {color1} Kelembaban: $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = HM} $ {alignr 2} $ {color1} Presipitasi: $ {color3} $ { execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = PC} $ color
$ {alignc} $ {color1} Tekanan: $ {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} $ color
$ {color1} Matahari terbit: $ {color3} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = SR} $ {alignr 2} $ {color1} Matahari terbenam: $ {color3} $ { execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –datatype = SS} $ color
$ {voffset 15} $ {color1} Bulan: $ {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 $ color
$ {color0} $ {hr} $ color
$ {voffset 5} $ {color2} IP: $ {alignc} $ color $ {addr eth0}
$ {color1} Bawah: $ color $ {downspeed eth0} k / s $ {alignr 2} $ {color1} Atas: $ color $ {upspeed eth0} k / s
$ {color1} Total: $ color $ {totaldown eth0} $ {alignr 2} $ {color1} Total: $ color $ {totalup eth0}
$ {color1} Masuk: $ color $ {tcp_portmon 1 32767 hitungan} $ {color1} Keluar: $ color $ {tcp_portmon 32768 61000 hitungan} $ {alignr 2} $ {color1} Total: $ color $ {tcp_portmon 1 65535 hitungan}
$ {voffset 5} $ {color2} Koneksi: $ color $ {tcp_portmon 32768 61000 count} $ {alignr 2} $ {color2} Layanan / 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} $ color

kami membuat file ~ / Conky / conkyforecast

gedit ~ / Conky / conkyforecast

dan kami menempelkan yang berikut di dalamnya

latar belakang tidak
own_window ya
own_window_transparent ya
own_window_hints tidak didekorasi, di bawah, sticky, skip_taskbar, skip_pager
own_window_colour hitam
double_buffer ya
use_spacer tersisa
use_xft ya
font calibri: size = 8
xftfont kalibrasi: ukuran = 8
xftalpha 0.5
pembaruan_interval 5.0
huruf besar tidak # disetel ke ya jika Anda ingin semua teks menggunakan huruf besar
titik_titik 3
batas_margin 9
batas_lebar 10
default_color putih
default_outline_color hitam
default_shade_color hitam
warna0 cyan
warna1 biru muda
warna2 oranye
color3 kuning
color4 gandum
color5 putih
color6 putih
color7 putih
color8 putih
color9 putih
perataan bottom_left # atau top_left, bottom_left, bottom_right
celah_x 10
celah_y 35
text_buffer_size 1024 # gunakan 1024 untuk perkiraan
no_buffers yes # Kurangi buffer sistem file dari memori yang digunakan?
draw_border no
draw_outline yes # memperkuat teks jika ya
draw_shades yes # shadecolor hitam

TEKS
$ {color4} $ {font calibri: size = 11} Perkiraan Diperpanjang $ font $ color
$ {color0} $ {hr} $ color
$ {color4} $ {font calibri: size = 9} $ {execi 3600 python ~ / Conky / scripts / conkyForecast.py –location = ARBA0009 –template = / home / user / Conky / scripts / myweather.template} $ font $ warna

kami membuat file ~ / Conky / conkymail

gedit ~ / Conky / conkymail

kami menempel yang berikut ini ke dalam file

latar belakang tidak
own_window ya
own_window_transparent ya
own_window_hints tidak didekorasi, di bawah, sticky, skip_taskbar, skip_pager
own_window_colour hitam
double_buffer ya
use_spacer tersisa
use_xft ya
font calibri: size = 8
xftfont kalibrasi: ukuran = 8
xftalpha 0.5
pembaruan_interval 5.0
huruf besar tidak # disetel ke ya jika Anda ingin semua teks menggunakan huruf besar
titik_titik 3
batas_margin 9
batas_lebar 10
default_color putih
default_outline_color hitam
default_shade_color hitam
warna0 cyan
warna1 biru muda
warna2 oranye
color3 kuning
color4 gandum
color5 putih
color6 putih
color7 putih
color8 putih
color9 putih
perataan bottom_left # atau top_left, bottom_left, bottom_right
celah_x 565
celah_y 35
text_buffer_size 128 # gunakan 1024 untuk perkiraan
no_buffers yes # Kurangi buffer sistem file dari memori yang digunakan?
draw_border no
draw_outline yes # memperkuat teks jika ya
draw_shades yes # shadecolor hitam

TEKS
$ {font calibri: size = 11} $ {alignc} $ {color4} Gmail
$ {color0} $ {hr} $ color
$ {font calibri: size = 11} $ {color4} Kami memiliki $ {color3} $ {execi 300 python ~ / Conky / scripts / mail / conkyEmail.py} $ {color4} email (s) $ font

Kami membuat file di ~ / Conky / scripts / conkyForecast.py (kita harus membuat folder skrip)

gedit ~ / Conky / scripts / conkyForecast.py

#! / usr / bin / python
# - * - pengkodean: utf-8 - * -
############################################### ###########################
# conkyForecast.py adalah skrip python (tidak begitu) sederhana (lagi) untuk dikumpulkan
# detail cuaca saat ini untuk digunakan di conky.
#
# Penulis: Kaivalagi
# Dibuat: 13/04/2008
# Modifikasi:
# 14/04/2008 Izinkan rentang hari untuk data perkiraan
# 14/04/2008 Periksa konektivitas ke layanan xoap
# 18/04/2008 Izinkan pengaturan spasi untuk keluaran jarak jauh
# 18/04/2008 Izinkan keluaran prakiraan Siang dan Malam
# 18/04/2008 Dukungan lokal untuk opsi teks kode kondisi «CC», menunggu terjemahan bahasa Spanyol
# 18/04/2008 Gunakan pengawetan untuk data kelas daripada membuka xml, ini mengabaikan kebutuhan untuk menginterogasi data cache
# 19/04/2008 Menambahkan teks kondisi bahasa Spanyol - Terima kasih Bruce M.
# 19/04/2008 Menambahkan pemeriksaan isnumerik pada semua keluaran numerik dengan sufiks unit
# 19/04/2008 Mengubah nama file acar untuk menyertakan kode lokasi
# 19/04/2008 Menambahkan konversi hari minggu Spanyol melalui lokal
# 20/04/2008 Menambahkan parser argumen perintah yang layak
# 20/04/2008 Ditambahkan opsi hari minggu, jika diberi jenis data hari minggu dipersingkat menjadi 3 karakter
# 21/04/2008 Opsi lokal tetap untuk keluaran perkiraan
# 21/04/2008 Menambahkan opsi –template untuk mengizinkan keluaran kustom menggunakan satu panggilan exec 🙂
# 21/04/2008 Menambahkan opsi –hideunits untuk menghapus, misalnya, mph dan C dari keluaran
# 23/04/2008 Opsi –imperial dihapus dari template, ini HARUS disetel sebagai opsi standar pada panggilan skrip dan tidak digunakan dalam file template.
# 23/04/2008 Readded –pilihan imperial ke template, mengaktifkan nilai metrik atau imperial per tipe data. Catatan saat menggunakan opsi baris perintah template tidak akan berfungsi.
# 23/04/2008 Menambahkan keluaran yang memberi tahu pengguna jika lokasi yang diberikan buruk
# 24/04/2008 Penanganan yang ditambahkan untuk tidak ada konektivitas, akan mengembalikan ke data cache sekarang (membuat kesalahan jika tidak ada cache). Tes dengan mencoba membuka xoap.weather.com
# 24/04/2008 Memperbaiki konversi Celsius ke fahrenheit
# 06/05/2008 Url yang diperbarui yang digunakan setelah layanan web diperbarui
# 09/05/2008 Konsolidasi saat ini dan pengambilan data perkiraan menjadi satu panggilan
# 09/05/2008 Menambahkan Matahari terbit dan terbenam ke tipe data, ini khusus untuk kondisi saat ini dan data perkiraan
# 09/05/2008 Menambahkan fase bulan, pembacaan barometer dan deskripsi barometer ke tipe data, ini hanya spesifik untuk kondisi saat ini dan begitu juga N / A dalam keluaran yang diperkirakan
# 09/05/2008 Menambahkan konversi satuan untuk barometer dari mb ke inci (imperial)
# 09/05/2008 Teks kondisi bahasa Spanyol yang diperbarui - Terima kasih Bruce M
# 10/05/2008 Menambahkan data lokal perancis - Terima kasih benpaka
# 12/05/2008 Menambahkan tipe data BF (font bantalan) baru untuk memberikan karakter panah (gunakan dengan font Arrow.ttf) alih-alih keluaran NSEW dari WD (arah angin)
# 12/05/2008 Memperbarui keluaran WD menjadi khusus lokal, saat ini mendukung bahasa Inggris dan Spanyol default - Terima kasih Bruce M.
# 18/05/2008 Menambahkan tipe data MF (font bulan) baru untuk memberikan karakter font bulan (karakter salah dan belum ada font khusus).
# 21/05/2008 Untuk kondisi saat ini, opsi –datatype = LT sekarang menampilkan suhu «terasa seperti» daripada suhu saat ini
#
# SEMUANYA:
# Gabungkan file pkl menjadi satu file / kelas
# Tambahkan font cuaca berdasarkan keluaran fase bulan berdasarkan data ikon bulan
# ??? Ada lagi persyaratan di luar sana?

impor sys, os, socket, urllib2, datetime, time
dari xml.dom import minidom
dari impor stat *
dari optparse import OptionParser
impor lokal
impor gettext
impor acar
dari impor matematika *

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

kelas CommandLineParser:

parser = Tidak ada

def __init __ (sendiri):

self.parser = OptionParser ()
self.parser.add_option («- l», »- location», dest = »location», default = »UKXX0103 ″, type =» string », metavar =» CODE », help = u» kode lokasi untuk data cuaca [ default:% default], Gunakan url berikut untuk menentukan kode lokasi Anda berdasarkan nama kota: http://xoap.weather.com/search/search?where=Norwich »)
self.parser.add_option ("- d", "- datatype", dest = "datatype", default = "HT", type = "string", metavar = "DATATYPE", help = u "[bawaan:% default] Opsi tipe data adalah: DW (Day Of Week), WF (Weather Font Output), LT (Forecast: Low Temp, Current: Feels Like Temp), HT (Forecast: High Temp, Current: Current Temp), CC (Current Kondisi), CT (Teks Kondisi), PC (Peluang Curah Hujan), HM (Kelembaban), WD (Arah Angin), WS (Kecepatan Angin), WG (Embusan Angin), CN (Nama Kota), SR (matahari terbit), SS (matahari terbenam), MP (fase bulan), MF (font bulan), BR (pembacaan barometer), BD (deskripsi barometer). Tidak berlaku pada baris perintah saat menggunakan template. »)
self.parser.add_option («- s», »- startday», dest = »startday», type = »int», metavar = »NUMBER», help = u »tentukan nomor hari awal, jika kondisi saat ini dihilangkan adalah keluaran . Tidak berlaku pada baris perintah saat menggunakan template. »)
self.parser.add_option ("- e", "- endday", dest = "endday", type = "int", metavar = "NUMBER", help = u "tentukan nomor hari akhir, jika dihilangkan hanya data hari awal adalah keluaran. Tidak berlaku pada baris perintah saat menggunakan template. »)
self.parser.add_option («- S», »- spasi», tujuan = »spasi», type = »int», default = 1, metavar = »NUMBER», help = u »[default:% default] Mendefinisikan jumlah spasi di antara keluaran yang berkisar. Tidak berlaku pada baris perintah saat menggunakan templat. »)
self.parser.add_option («- t», »- template», dest = »template», type = »string», metavar = »FILE», help = u »mendefinisikan file template untuk menghasilkan output dalam satu panggilan. A item yang dapat ditampilkan dalam file dalam bentuk {–datatype = HT –startday = 1}. Berikut ini adalah opsi yang memungkinkan dalam setiap item: –datatype, –startday, –endday, –night, –shortweekday, –imperial, –hideunits, –Spaces. Perhatikan bahwa bentuk pendek dari opsi saat ini tidak didukung! Tak satu pun dari opsi ini dapat diterapkan pada baris perintah saat menggunakan templat. »)
self.parser.add_option («- L», »- locale», dest = »locale», type = »string», help = u »menimpa sistem lokal untuk keluaran bahasa (en = english, es = spanish, fr = Perancis, lebih banyak lagi yang akan datang) »)
self.parser.add_option ("- i", "- imperial", dest = "imperial", default = False, action = "store_true", help = u "meminta unit imperial, jika keluaran yang dihilangkan dalam metrik. Tidak berlaku di baris perintah saat menggunakan template. »)
self.parser.add_option («- n», »- night», dest = »night», default = False, action = »store_true», help = u »alihkan output ke data malam, jika output siang dihilangkan akan menjadi output. Tidak berlaku di baris perintah saat menggunakan template. »)
self.parser.add_option («- w», »- shortweekday», dest = »shortweekday», default = False, action = »store_true», help = u »Persingkat tipe data hari dalam seminggu menjadi 3 karakter. Tidak berlaku di baris perintah saat menggunakan template. »)
self.parser.add_option («- u», »- hideunits», dest = »hideunits», default = False, action = »store_true», help = u »Sembunyikan unit seperti mph atau C, simbol derajat (°) adalah masih ditampilkan. Tidak berlaku pada baris perintah saat menggunakan template. »)
self.parser.add_option ("- v", "- verbose", dest = "verbose", default = False, action = "store_true", help = u "minta keluaran verbose, bukan ide yang baik saat menjalankan conky!" )
self.parser.add_option ("- r", "- refetch", dest = "refetch", default = False, action = "store_true", help = u "ambil data terlepas dari kedaluwarsa data")

def parse_args (self):
(opsi, args) = self.parser.parse_args ()
kembali (opsi, args)

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

kelas WeatherData:
def __init __ (self, day_of_week, low, high, condition_code, condition_text, presip, kelembaban, 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 »» + rendah
self.high = u »» + tinggi
self.condition_code = u »» + condition_code
self.condition_text = u »» + condition_text
self.precip = u »» + presip
self.humidity = u »» + kelembaban
self.wind_dir = u »» + wind_dir
self.wind_speed = u »» + wind_speed
self.wind_gusts = u »» + wind_gusts
self.city = u »» + kota
self.sunrise = u »» + sunrise
self.sunset = u »» + matahari terbenam
self.moon_phase = u »» + moon_phase
self.moon_icon = u »» + moon_icon
self.bar_read = u »» + bar_read
self.bar_desc = u »» + bar_desc

kelas WeatherText:

condition_text = {
«0»: _ (u »Tornado»),
«1»: _ (u »Badai Tropis»),
«2»: _ (u »Badai»),
«3»: _ (u »Badai Petir Parah»),
«4»: _ (u »Badai Petir»),
«5»: _ (u »Hujan dan Salju Campuran»),
«6»: _ (u »Campuran Hujan dan Hujan Es»),
«7»: _ (u »Curah Hujan Campuran»),
«8»: _ (u »Gerimis Beku»),
«9»: _ (u »Gerimis»),
«10»: _ (u »Hujan Beku»),
«11»: _ (u »Hujan»),
«12»: _ (u »Hujan»),
«13»: _ (u »Badai Salju»),
«14»: _ (u »Hujan Salju Ringan»),
«15»: _ (u »Hembusan Salju»),
«16»: _ (u »Salju»),
«17»: _ (u »Salam»),
«18»: _ (u »Sleet»),
«19»: _ (u »Debu»),
«20»: _ (u »Kabut»),
«21»: _ (u »Kabut»),
«22»: _ (u »Asap»),
«23»: _ (u »Blustery»),
«24»: _ (u »Windy»),
«25»: _ (u »Dingin»),
«26»: _ (u »Berawan»),
«27»: _ (u »Cerah Berawan»),
«28»: _ (u »Cerah Berawan»),
«29»: _ (u »Mendung Sebagian»),
«30»: _ (u »Mendung Sebagian»),
«31»: _ (u »Hapus»),
«32»: _ (u »Hapus»),
«33»: _ (u »Adil»),
«34»: _ (u »Adil»),
«35»: _ (u »Campuran Hujan dan Hujan Es»),
«36»: _ (u »Hot»),
«37»: _ (u »Badai Petir Terisolasi»),
«38»: _ (u »Badai Petir Tersebar»),
«39»: _ (u »Badai Petir Tersebar»),
«40»: _ (u »Hujan Tersebar»),
«41»: _ (u »Salju Lebat»),
«42»: _ (u »Hujan Salju Tersebar»),
«43»: _ (u »Salju Lebat»),
«44»: _ (u »Mendung Sebagian»),
«45»: _ (u »Hujan Guntur»),
«46»: _ (u »Hujan Salju»),
«47»: _ (u »Badai Petir Terisolasi»),
«Na»: _ (u »T / A»),
"-": _(Sebuah")
}

condition_text_es = {
«0»: _ (u »Tornado»),
«1»: _ (u »Badai Tropis»),
«2»: _ (u »Huracá¡n»),
«3»: _ (u »Badai Kuat»),
«4»: _ (u »Badai»),
«5»: _ (u »Hujan dan Salju Campuran»),
«6»: _ (u »Campuran Hujan dan Hujan Es»),
«7»: _ (u »Sleet»),
«8»: _ (u »Gerimis Beku»),
«9»: _ (u »Gerimis»),
«10»: _ (u »Hujan Beku»), # atau hujan beku
«11»: _ (u »Hujan»),
«12»: _ (u »Hujan»),
«13»: _ (u »Salju Ringan»),
«14»: _ (u »Salju Ringan»),
«15»: _ (u »Badai Salju»),
«16»: _ (u »Salju»),
«17»: _ (u »Salam»),
«18»: _ (u »Sleet»),
«19»: _ (u »Bubuk»),
«20»: _ (u »Kabut»),
«21»: _ (u »Kabut»),
«22»: _ (u »Asap»),
«23»: _ (u »Tempest»),
«24»: _ (u »Windy»),
«25»: _ (u »Fráo»),
«26»: _ (u »Sangat Berawan»),
«27»: _ (u »Cerah Berawan»),
«28»: _ (u »Cerah Berawan»),
«29»: _ (u »Mendung Sebagian»),
«30»: _ (u »Mendung Sebagian»),
«31»: _ (u »Hapus»),
«32»: _ (u »Hapus»),
«33»: _ (u »Sesuatu Berawan»),
«34»: _ (u »Sesuatu Berawan»),
«35»: _ (u »Hujan dengan Hujan Es»),
«36»: _ (u »Panas»),
«37»: _ (u »Badai Terisolasi»),
«38»: _ (u »Badai Tersebar»),
«39»: _ (u »Badai Tersebar»),
«40»: _ (u »Hujan Tersebar»),
«41»: _ (u »Salju Lebat»),
«42»: _ (u »Hujan Salju Lemah dan Tersebar»),
«43»: _ (u »Nevada Intens»),
«44»: _ (u »Awan Tersebar»),
«45»: _ (u »Badai»),
«46»: _ (atau »Hujan Salju Tersebar»),
«47»: _ (u »Badai Terisolasi»),
«Na»: _ (u »T / A»),
"-": _(Sebuah")
}

condition_text_fr = {
«0»: _ (u »Tornade»),
«1»: _ (u »Tempête Tropicale»),
«2»: _ (atau »Ouragan»),
«3»: _ (atau »Orages Violents»),
«4»: _ (atau »Orageux»),
«5»: _ (u »Pluie et Neige»),
«6»: _ (u »Pluie et Neige Mouillée»),
«7»: _ (u »Variabel avec menolak»),
«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 »Indah»),
«32»: _ (u »Indah»),
«33»: _ (u »Belles Éclaircies»),
«34»: _ (u »Belles Éclaircies»),
«35»: _ (u »Pluie avec Grêle»),
«36»: _ (u »Chaleur»),
«37»: _ (atau »Orages Isolés»),
«38»: _ (atau »Orages Localisés»),
«39»: _ (atau »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»: _ (atau »Orages»),
«46»: _ (u »Tempête de Neige»),
«47»: _ (atau »Orages Isolés»),
«Na»: _ (u »T / A»),
"-": _(Sebuah")
}

condition_weather_font = {
«0»: _ (u »W»),
«1»: _ (u »V»),
«2»: _ (u »W»),
«3»: _ (u »s»),
«4»: _ (u »p»),
«5»: _ (u »k»),
«6»: _ (u »k»),
«7»: _ (u »g»),
«8»: _ (u »g»),
«9»: _ (u »g»),
«10»: _ (u »h»),
«11»: _ (u »g»),
«12»: _ (u »g»),
«13»: _ (u »k»),
«14»: _ (u »k»),
«15»: _ (u »k»),
«16»: _ (u »k»),
«17»: _ (u »k»),
«18»: _ (u »k»),
«19»: _ (u »e»),
«20»: _ (u »e»),
«21»: _ (u »a»),
«22»: _ (u »d»),
«23»: _ (u »d»),
«24»: _ (u »d»),
«25»: _ (u »d»),
«26»: _ (u »e»),
«27»: _ (u »e»),
«28»: _ (u »e»),
«29»: _ (u »c»),
«30»: _ (u »c»),
«31»: _ (u »a»),
«32»: _ (u »a»),
«33»: _ (u »b»),
«34»: _ (u »b»),
«35»: _ (u »k»),
«36»: _ (u »a»),
«37»: _ (u »f»),
«38»: _ (u »f»),
«39»: _ (u »f»),
«40»: _ (u »g»),
«41»: _ (u »k»),
«42»: _ (u »k»),
«43»: _ (u »k»),
«44»: _ (u »b»),
«45»: _ (u »g»),
«46»: _ (u »k»),
«47»: _ (u »f»),
«Na»: _ (u »»),
"-": _(atau"")
}

condition_moon_font = {
«0»: _ (u »1 ″),
«1»: _ (u »N»),
«2»: _ (u »O»),
«3»: _ (u »P»),
«4»: _ (u »Q»),
«5»: _ (u »R»),
«6»: _ (u »S»),
«7»: _ (u »T»),
«8»: _ (u »U»),
«9»: _ (u »V»),
«10»: _ (u »W»),
«11»: _ (u »X»),
«12»: _ (u »Y»),
«13»: _ (u »Z»),
«14»: _ (u »0 ″),
«15»: _ (u »0 ″),
«16»: _ (u »A»),
«17»: _ (u »B»),
«18»: _ (u »C»),
«19»: _ (u »D»),
«20»: _ (u »E»),
«21»: _ (u »F»),
«22»: _ (u »G»),
«23»: _ (u »H»),
«24»: _ (u »I»),
«25»: _ (u »J»),
«26»: _ (u »K»),
«27»: _ (u »L»),
«28»: _ (u »M»),
«29»: _ (u »1 ″),
«Na»: _ (u »»),
"-": _(atau"")
}

hari_minggu_= {
"Hari Ini": _ (atau "Hari Ini"),
«Senin»: _ (u »Senin»),
«Selasa»: _ (u »Selasa»),
«Rabu»: _ (u »Rabu»),
«Kamis»: _ (u »Kamis»),
«Jumat»: _ (u »Jumat»),
"Sabtu": _ (u "Sabtu"),
"Minggu": _ (u "Minggu")
}

hari_dari_minggu_pendek = {
"Hari Ini": _ (u "Sekarang"),
«Senin»: _ (u »Sen»),
«Selasa»: _ (u »Sel»),
«Rabu»: _ (u »Rab»),
«Kamis»: _ (u »Kam»),
«Jumat»: _ (u »Jum»),
"Sabtu": _ (u "Sab"),
"Minggu": _ (u "Minggu")
}

hari_pekan_minggu = {
"Hari ini": _ (u "hari ini"),
«Senin»: _ (u »Senin»),
«Selasa»: _ (atau »Selasa»),
«Rabu»: _ (u »Rabu»),
«Kamis»: _ (u »Kamis»),
«Jumat»: _ (u »Jumat»),
"Sabtu": _ (u "Sabtu"),
"Minggu": _ (u "Minggu")
}

hari_dari_minggu_short_es = {
"Hari ini": _ (u "hari ini"),
"Senin": _ (u "mon"),
«Selasa»: _ (u »laut»),
«Rabu»: _ (u »wed»),
«Kamis»: _ (u »Kam»),
«Jumat»: _ (u »jum»),
"Sabtu": _ (u "sat"),
"Minggu": _ (u "dom")
}

hari_minggu_fr = {
«Hari Ini»: _ (u »Aujourd'hui»),
«Senin»: _ (u »Lundi»),
«Selasa»: _ (u »Mardi»),
«Rabu»: _ (u »Mercredi»),
«Kamis»: _ (u »Jeudi»),
«Jumat»: _ (u »Vendredi»),
"Sabtu": _ (u "Samedi"),
"Minggu": _ (u "Dimanche")
}

hari_of_minggu_short_fr = {
«Hari Ini»: _ (u »Auj»),
"Senin": _ (u "Sen"),
«Selasa»: _ (u »Mar»),
"Rabu": _ (u "Mer"),
«Kamis»: _ (u »Jeu»),
«Jumat»: _ (u »Datang»),
"Sabtu": _ (u "Sam"),
"Minggu": _ (u "Redup")
}

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

bantalan_teks_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"),
"Mereka"),
"SSW": _ (u "SSO"),
«SW»: _ (u »SO»),
"WSW": _ (u "WOW"),
«W»: _ (u »O»),
«WNW»: _ (u »ONO»),
«NW»: _ (u »NO»),
«NNW»: _ (u »NNO»),
«T / A»: _ (u »N \ A»)
}

bantalan_teks_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"),
"Mereka"),
"SSW": _ (u "SSO"),
«SW»: _ (u »SO»),
"WSW": _ (u "WOW"),
«W»: _ (u »O»),
«WNW»: _ (u »ONO»),
«NW»: _ (u »NO»),
«NNW»: _ (u »NNO»),
«T / A»: _ (u »N \ A»)
}

kelas GlobalWeather:

kondisi_kini = []
perkiraan_hari = []
ramalan_ malam = []

locale = "di"

options = Tidak ada
cuacaxmldoc = «»

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 __ (diri, opsi):

self.options = opsi

jika self.options.locale == Tidak ada:
coba:
# self.locale = locale.getdefaultlocale () [0] [0: 2]
self.locale = «es» #uncomment baris ini untuk memaksa lokal Spanyol
# self.locale = "fr" #uncomment baris ini untuk memaksa bahasa Prancis
kecuali:
cetak "lokal tidak disetel"
lain:
# self.locale = self.options.locale
self.locale = «es» #uncomment baris ini untuk memaksa lokal Spanyol
# self.locale = "fr" #uncomment baris ini untuk memaksa bahasa Prancis

jika self.options.verbose == Benar:
print >> sys.stdout, "locale disetel ke", self.locale

def getText (self, nodelist):
rc = ""
untuk node dalam nodelist:
jika node.nodeType == node.TEXT_NODE:
rc = rc + simpul.data
kembali rc

def getSpaces (diri, spasi):
string = u »»
jika spasi == Tidak ada:
string = mandiri.DEFAULT_SPACING
lain:
untuk i dalam rentang (0, spasi + 1):
string = string + u »«
string kembali

def isNumeric (self, string):
coba:
dummy = float (string)
kembali Benar
kecuali:
kembali Salah

def isConnectionAvailable (self):
# Pastikan kita dapat mengakses server weather.com dengan membuka url
coba:
Usock = urllib2.urlopen ('http://xoap.weather.com')
Usock.close ()
kembali Benar
kecuali:
kembali Salah

def getBearingText (diri, bantalan):
bearing = float (bantalan)
jika bantalan <11.25:
kembali u »N»
elif bantalan <33.75:
return u »NNE»
elif bantalan <56.25:
return u »NE»
elif bantalan <78.75:
kembali u »JAN»
elif bantalan <101.25:
kembali u »E»
elif bantalan <123.75:
kembali u »ESE»
elif bantalan <146.25:
return u »SE»
elif bantalan <168.75:
kembali u »SSE»
elif bantalan <191.25:
kembalikan u »S»
elif bantalan <213.75:
kembali u »SSW»
elif bantalan <236.25:
kembali u »SW»
elif bantalan <258.75:
kembali u »WSW»
elif bantalan <281.25:
kembali u »W»
elif bantalan <303.75:
kembali u »WNW»
elif bantalan <326.25:
kembali u »NW»
elif bantalan <348.75:
kembali u »NNW»
lain:
mengembalikan «T / A»

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

def convertKilometresToMiles (self, dist):
kembali str (int (lantai (float (dist) * 0.621371192)))

def convertMillibarsToInches (self, mb):
kembali str (int (lantai (float (mb) /33.8582)))

def getTemplateList (self, template):

daftar templat = []

untuk template_part di template.split («{«):
jika template_part! = «»:
untuk template_part di template_part.split ("}"):
jika template_part! = «»:
templatelist.append (u »» + template_part)

templatelist kembali

def getOutputText (self, datatype, startday, endday, night, shortweekday, imperial, hideunits, spasi):
#mencoba:
keluaran = u »»

# tentukan unit saat ini untuk keluaran
jika hideunits == Salah:
jika imperial == Salah:
tempunit = u »° C»
speedunit = u »kpj»
pressureunit = u »mb»
lain:
tempunit = u »° F»
satuan kecepatan = u »mph»
pressureunit = u »in»
lain:
tempunit = u »°»
speedunit = u »»
pressureunit = u »»

jika startday == Tidak ada: # kondisi saat ini

jika tipe data == "DW":
jika self.locale == "adalah":
jika shortweekday == Benar:
keluaran = WeatherText.day_of_week_short_es [self.current_conditions [0] .day_of_week]
lain:
keluaran = WeatherText.day_of_week_es [self.current_conditions [0] .day_of_week]
elif self.locale == "fr":
jika shortweekday == Benar:
keluaran = WeatherText.day_of_week_short_fr [self.current_conditions [0] .day_of_week]
lain:
keluaran = WeatherText.day_of_week_fr [self.current_conditions [0] .day_of_week]
lain:
jika shortweekday == Benar:
keluaran = WeatherText.day_of_week_short [self.current_conditions [0] .day_of_week]
lain:
keluaran = WeatherText.day_of_week [self.current_conditions [0] .day_of_week]
elif datatype == "WF": # font cuaca
output = WeatherText.conditions_weather_font [self.current_conditions [0] .condition_code]
elif datatype == "LT":
string = self.current_conditions [0] .low
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
keluaran = string
elif datatype == "HT":
string = self.current_conditions [0] .high
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
keluaran = string
elif datatype == "CC":
jika self.locale == "adalah":
output = WeatherText.conditions_text_es [self.current_conditions [0] .condition_code]
elif self.locale == "fr":
output = WeatherText.conditions_text_fr [self.current_conditions [0] .condition_code]
lain:
output = WeatherText.conditions_text [self.current_conditions [0] .condition_code]
elif datatype == "CT":
output = self.current_conditions [0] .condition_text
elif datatype == "PC":
string = self.current_conditions [0] .precip
jika self.isNumeric (string) == Benar:
string = string + u »%»
keluaran = string
elif datatype == "HM":
string = self.current_conditions [0] .humidity
jika self.isNumeric (string) == Benar:
string = string + u »%»
keluaran = string
elif datatype == "WD":
string = self.current_conditions [0] .wind_dir
jika self.isNumeric (string) == Benar:
string = self.getBearingText (string)

jika self.locale == "adalah":
output = WeatherText.bearing_text_es [string]
elif self.locale == "fr":
output = WeatherText.bearing_text_fr [string]
lain:
keluaran = string

elif datatype == "BF":
string = self.current_conditions [0] .wind_dir
jika self.isNumeric (string) == Benar:
string = WeatherText.bearing_arrow_font [self.getBearingText (string)]
keluaran = string
elif datatype == "WS":
string = self.current_conditions [0] .wind_speed
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
keluaran = string
elif datatype == "WG":
string = self.current_conditions [0] .wind_gusts
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
keluaran = string
elif datatype == "CN":
output = self.current_conditions [0] .city
elif datatype == "SR":
output = self.current_conditions [0] .sunrise
elif datatype == "SS":
output = self.current_conditions [0] .sunset
elif datatype == "MP":
output = self.current_conditions [0] .moon_phase
elif datatype == "MF":
keluaran = WeatherText.conditions_moon_font [self.current_conditions [0] .moon_icon]
elif datatype == "BR":
string = self.current_conditions [0] .bar_read
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertMillibarsToInches (string)
string = string + unit tekanan
keluaran = string
elif datatype == "BD":
output = self.current_conditions [0] .bar_desc
lain:
output = "\ nEROR: Jenis data tidak dikenal diminta"

else: # data perkiraan

jika hari akhir == Tidak ada: # jika tidak ada hari akhir yang ditetapkan, gunakan hari awal
akhir = hari mulai

jika malam == Benar: # ramalan malam diperlukan

untuk day_number dalam rentang (hari awal, akhir hari + 1):

jika tipe data == "DW":
jika self.locale == "adalah":
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short_es [self.night_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_es [self.night_forecast [day_number] .day_of_week]
elif self.locale == "fr":
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short_fr [self.night_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_fr [self.night_forecast [day_number] .day_of_week]
lain:
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short [self.night_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week [self.night_forecast [day_number] .day_of_week]
elif datatype == "WF": # font cuaca
output = output + self.getSpaces (spasi) + WeatherText.conditions_weather_font [self.night_forecast [day_number] .condition_code]
elif datatype == "LT":
string = self.night_forecast [day_number] .low
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
output = output + self.getSpaces (spasi) + string

elif datatype == "HT":
string = self.night_forecast [day_number] .high
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
output = output + self.getSpaces (spasi) + string
elif datatype == "CC":
jika self.locale == "adalah":
output = output + self.getSpaces (spasi) + WeatherText.conditions_text_es [self.night_forecast [day_number] .condition_code]
elif self.locale == "fr":
output = output + self.getSpaces (spasi) + WeatherText.conditions_text_fr [self.night_forecast [day_number] .condition_code]
lain:
output = output + self.getSpaces (spasi) + WeatherText.conditions_text [self.night_forecast [day_number] .condition_code]
elif datatype == "CT":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .condition_text
elif datatype == "PC":
string = self.night_forecast [day_number] .precip
jika self.isNumeric (string) == Benar:
string = string + u »%»
output = output + self.getSpaces (spasi) + string
elif datatype == "HM":
string = self.night_forecast [day_number] .humidity
jika self.isNumeric (string) == Benar:
string = string + u »%»
output = output + self.getSpaces (spasi) + string
elif datatype == "WD":
string = self.night_forecast [day_number] .wind_dir
jika self.locale == "adalah":
output = output + self.getSpaces (spasi) + WeatherText.bearing_text_es [string]
elif self.locale == "fr":
output = output + self.getSpaces (spasi) + WeatherText.bearing_text_fr [string]
lain:
output = output + self.getSpaces (spasi) + string

elif datatype == "BF":
output = output + self.getSpaces (spasi) + WeatherText.bearing_arrow_font [self.night_forecast [day_number] .wind_dir]
elif datatype == "WS":
string = self.night_forecast [day_number] .wind_speed
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
output = output + self.getSpaces (spasi) + string
elif datatype == "WG":
string = self.night_forecast [day_number] .wind_gusts
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
output = output + self.getSpaces (spasi) + string
elif datatype == "CN":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .city
elif datatype == "SR":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .sunrise
elif datatype == "SS":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .sunset
elif datatype == "MP":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .moon_phase
elif datatype == "MF":
output = output + self.getSpaces (spasi) + WeatherText.conditions_moon_font [self.night_forecast [day_number] .moon_icon]
elif datatype == "BR":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .bar_read
elif datatype == "BD":
output = output + self.getSpaces (spasi) + self.night_forecast [day_number] .bar_desc
lain:
output = "\ nEROR: Jenis data tidak dikenal diminta"
istirahat

else: perkiraan perkiraan # hari

untuk day_number dalam rentang (hari awal, akhir hari + 1):

jika tipe data == "DW":
jika self.locale == "adalah":
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short_es [self.day_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_es [self.day_forecast [day_number] .day_of_week]
elif self.locale == "fr":
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short_fr [self.day_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_fr [self.day_forecast [day_number] .day_of_week]
lain:
jika shortweekday == Benar:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week_short [self.day_forecast [day_number] .day_of_week]
lain:
output = output + self.getSpaces (spasi) + WeatherText.day_of_week [self.day_forecast [day_number] .day_of_week]
elif datatype == "WF": # font cuaca
output = output + self.getSpaces (spasi) + WeatherText.conditions_weather_font [self.day_forecast [day_number] .condition_code]
elif datatype == "LT":
string = self.day_forecast [day_number] .low
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
output = output + self.getSpaces (spasi) + string
elif datatype == "HT":
string = self.day_forecast [day_number] .high
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertCelsiusToFahrenheit (string)
string = string + waktu
output = output + self.getSpaces (spasi) + string
elif datatype == "CC":
jika self.locale == "adalah":
output = output + self.getSpaces (spasi) + WeatherText.conditions_text_es [self.day_forecast [day_number] .condition_code]
elif self.locale == "fr":
output = output + self.getSpaces (spasi) + WeatherText.conditions_text_fr [self.day_forecast [day_number] .condition_code]
lain:
output = output + self.getSpaces (spasi) + WeatherText.conditions_text [self.day_forecast [day_number] .condition_code]
elif datatype == "CT":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .condition_text
elif datatype == "PC":
string = self.day_forecast [day_number] .precip
jika self.isNumeric (string) == Benar:
string = string + u »%»
output = output + self.getSpaces (spasi) + string
elif datatype == "HM":
string = self.day_forecast [day_number] .humidity
jika self.isNumeric (string) == Benar:
string = string + u »%»
output = output + self.getSpaces (spasi) + string
elif datatype == "WD":
string = self.day_forecast [day_number] .wind_dir

jika self.locale == "adalah":
output = output + self.getSpaces (spasi) + WeatherText.bearing_text_es [string]
elif self.locale == "fr":
output = output + self.getSpaces (spasi) + WeatherText.bearing_text_fr [string]
lain:
output = output + self.getSpaces (spasi) + string

elif datatype == "BF":
output = output + self.getSpaces (spasi) + WeatherText.bearing_arrow_font [self.day_forecast [day_number] .wind_dir]
elif datatype == "WS":
string = self.day_forecast [day_number] .wind_speed
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
output = output + self.getSpaces (spasi) + string
elif datatype == "WG":
string = self.day_forecast [day_number] .wind_gusts
jika self.isNumeric (string) == Benar:
jika imperial == Benar:
string = self.convertKilometresToMiles (string)
senar = senar + satuan kecepatan
output = output + self.getSpaces (spasi) + string
elif datatype == "CN":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .city
elif datatype == "SR":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .sunrise
elif datatype == "SS":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .sunset
elif datatype == "MP":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .moon_phase
elif datatype == "MF":
output = output + self.getSpaces (spasi) + WeatherText.conditions_moon_font [self.day_forecast [day_number] .moon_icon]
elif datatype == "BR":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .bar_read
elif datatype == "BD":
output = output + self.getSpaces (spasi) + self.day_forecast [day_number] .bar_desc
lain:
output = u »\ nEROR: Jenis data tidak dikenal diminta»
istirahat

output = u »» + output.strip (u »«) # kehilangan spasi di depan / di belakangnya
keluaran kembali

#kecuali:
#print "getOutputText: Kesalahan tak terduga:", sys.exc_info () [0]

def getOutputTextFromTemplate (self, template):
#mencoba:

# kunci untuk data template
DATATYPE_KEY = "–datatype ="
STARTDAY_KEY = "–startday ="
ENDDAY_KEY = "–endday ="
NIGHT_KEY = "–malam"
SHORTWEEKDAY_KEY = "–shortweekday"
IMPERIAL_KEY = "–imperial"
HIDEUNITS_KEY = "–hideunit"
SPACES_KEY = "–spaces ="

keluaran = u »»

optionfound = Salah

#load file
coba:
fileinput = terbuka (self.options.template)
template = fileinput.read ()
fileinput.close ()
kecuali:
output = u »File template tidak ditemukan!»

templatelist = self.getTemplateList (template)

# mari kita telusuri daftar template dan tentukan output untuk setiap item yang ditemukan
untuk saya dalam rentang (0, len (templatelist) -1):

pos = templatelist [i] .find (DATATYPE_KEY)
jika pos! = -1:
optionfound = Benar
pos = pos + len (DATATYPE_KEY)
datatype = templatelist [i] [pos: pos + 4] .strip («}»). strip («{«). strip («-«). strip (»«)
lain:
datatype = Tidak ada

pos = templatelist [i] .find (STARTDAY_KEY)
jika pos! = -1:
optionfound = Benar
pos = pos + len (STARTDAY_KEY)
startday = int (templatelist [i] [pos: pos + 4] .strip ("}"). strip ("{"). strip ("-"). strip (""))
lain:
startday = Tidak ada

pos = templatelist [i] .find (ENDDAY_KEY)
jika pos! = -1:
optionfound = Benar
pos = pos + len (ENDDAY_KEY)
endday = int (templatelist [i] [pos: pos + 4] .strip ("}"). strip ("{"). strip ("-"). strip (""))
lain:
endday = Tidak ada

pos = templatelist [i] .find (NIGHT_KEY)
jika pos! = -1:
optionfound = Benar
malam = Benar
lain:
malam = Salah

pos = templatelist [i] .find (SHORTWEEKDAY_KEY)
jika pos! = -1:
optionfound = Benar
shortweekday = Benar
lain:
shortweekday = Salah

pos = templatelist [i] .find (IMPERIAL_KEY)
jika pos! = -1:
optionfound = Benar
imperial = Benar
lain:
imperial = Salah

pos = templatelist [i] .find (HIDEUNITS_KEY)
jika pos! = -1:
optionfound = Benar
hideunits = Benar
lain:
hideunits = Salah

pos = templatelist [i] .find (SPACES_KEY)
jika pos! = -1:
optionfound = Benar
pos = pos + len (SPACES_KEY)
spasi = int (templatelist [i] [pos: pos + 4] .strip («}»). strip («{«). strip («-«). strip (»«))
lain:
spasi = 1

jika opsi ditemukan == Benar:
templatelist [i] = self.getOutputText (datatype, startday, endday, night, shortweekday, imperial, hideunits, spasi)
optionfound = Salah

# menelusuri daftar yang menggabungkan keluaran sekarang setelah diisi
untuk item di templatelist:
keluaran = keluaran + barang

keluaran kembali

#kecuali:
#print "getOutputTextFromTemplate: Kesalahan tak terduga:", sys.exc_info () [0]

def fetchData (self):

# selalu ambil data metrik, gunakan fungsi percakapan pada data ini
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)

jika self.isConnectionAvailable () == False:
jika os.path.exists (file_path_current):
RefetchData = Salah
lain: # tidak ada koneksi, tidak ada cache, bang!
print "Tidak ada koneksi internet yang tersedia dan tidak ada data cuaca dalam cache."
elif self.options.refetch == Benar:
RefetchData = Benar
lain:
# apakah data perlu diambil kembali?
jika os.path.exists (file_path_current):
lastmodDate = time.localtime (os.stat (file_path_current) [ST_MTIME])
expiryDate = (datetime.datetime.today () - datetime.timedelta (menit = diri.EXPIRY_MINUTES)). scheduleuple ()

jika expiryDate> lastmodDate:
RefetchData = Benar
lain:
RefetchData = Salah
lain:
RefetchData = Benar

# ambil data kondisi saat ini, baik dari situs web atau dengan 'membongkar'
jika RefetchData == Benar:

# dapatkan data kondisi saat ini dari layanan xoap
coba:

# 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 & unit = m '
jika self.options.verbose == Benar:
print >> sys.stdout, «mengambil data cuaca dari«, url

Usock = urllib2.urlopen (url)
xml = usock.read ()
Usock.close ()
self.weatherxmldoc = minidom.parseString (xml)
kecuali:
print "fetchData: Kesalahan tak terduga:", sys.exc_info () [0]
cetak "Tidak dapat menghubungi sumber cuaca untuk kondisi saat ini"

# beri tahu pengguna jika lokasinya buruk ...
found = xml.find ("Lokasi tidak valid disediakan")
jika ditemukan! = -1:
cetak "Lokasi tidak valid disediakan"

# menginterogasi data cuaca, memuat ke dalam struktur kelas dan mengawetkannya
coba:

# siapkan daftar data cuaca
diri.kondisi_saat ini = []
ramalan_hari.diri = []
self.night_forecast = []

# mengumpulkan data umum
cuaca_n = self.weatherxmldoc.documentElement
location_n = weather_n.getElementsByTagName ('loc') [0]
city_n = location_n.getElementsByTagName ('dnam') [0]
city ​​= self.getText (city_n.childNodes)

# kumpulkan data kondisi saat ini
day_of_week = u »Hari ini»
presip = u »T / A»
sunrise_n = location_n.getElementsByTagName ('sunr') [0]
sunrise = self.getText (sunrise_n.childNodes)
sunset_n = location_n.getElementsByTagName ('suns') [0]
sunset = self.getText (sunset_n.childNodes)
current_condition_n = weather_n.getElementsByTagName ('cc') [0]
current_desc_n = current_condition_n.getElementsByTagName ('t') [0]
current_desc = self.getText (current_desc_n.childNodes)
current_code_n = current_condition_n.getElementsByTagName ('icon') [0]
current_code = self.getText (current_code_n.childNodes)
current_temp_n = current_condition_n.getElementsByTagName ('tmp') [0]
current_temp = self.getText (current_temp_n.childNodes)
current_temp_feels_n = current_condition_n.getElementsByTagName ('flik') [0]
current_temp_feels = self.getText (current_temp_feels_n.childNodes)
bar_n = current_condition_n.getElementsByTagName ('bar') [0]
bar_read_n = bar_n.getElementsByTagName ('r') [0]
bar_read = self.getText (bar_read_n.childNodes)
bar_desc_n = bar_n.getElementsByTagName ('d') [0]
bar_desc = self.getText (bar_desc_n.childNodes)
wind_n = current_condition_n.getElementsByTagName ('wind') [0]
wind_speed_n = wind_n.getElementsByTagName ('s') [0]
wind_speed = self.getText (wind_speed_n.childNodes)
wind_gust_n = wind_n.getElementsByTagName ('hembusan') [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)
kelembaban_n = kondisi_kondisi_n.getElementsByTagName ('hmid') [0]
kelembaban = self.getText (kelembaban_n.childNodes)
moon_n = current_condition_n.getElementsByTagName ('moon') [0]
moon_icon_n = moon_n.getElementsByTagName ('icon') [0]
moon_icon = self.getText (moon_icon_n.childNodes)
moon_phase_n = moon_n.getElementsByTagName ('t') [0]
moon_phase = self.getText (moon_phase_n.childNodes)
current_conditions_data = WeatherData (day_of_week, current_temp_feels, current_temp, current_code, current_desc, presip, kelembapan, wind_direction, wind_speed, wind_gusts, kota, matahari terbit, matahari terbenam, moon_phase, moon_icon, bar_read, bar_desc)
self.current_conditions.append (current_conditions_data)

# kumpulkan data perkiraan
bar_read = u »T / A»
bar_desc = u »T / A»
fase_bulan = u »T / A»
moon_icon = u »na»
forecast_n = weather_n.getElementsByTagName ('dayf') [0]
day_nodes = forecast_n.getElementsByTagName ('day')

untuk hari di day_nodes:
day_of_week = day.getAttribute ('t')
day_of_year = day.getAttribute ('dt')
high_temp_n = day.getElementsByTagName ('hai') [0]
high_temp = self.getText (high_temp_n.childNodes)
low_temp_n = day.getElementsByTagName ('low') [0]
low_temp = self.getText (low_temp_n.childNodes)

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

# hari memperkirakan data spesifik
daytime_n = day.getElementsByTagName ('part') [0] # hari
condition_code_n = daytime_n.getElementsByTagName ('icon') [0]
condition_code = self.getText (condition_code_n.childNodes)
condition_n = daytime_n.getElementsByTagName ('t') [0]
condition = self.getText (condition_n.childNodes)
presip_n = daytime_n.getElementsByTagName ('ppcp') [0]
presip = self.getText (presip_n.childNodes)
kelembaban_n = siang hari.getElementsByTagName ('hmid') [0]
kelembaban = self.getText (kelembaban_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 ('hembusan') [0]
wind_gusts = self.getText (wind_gusts_n.childNodes)
day_forecast_data = WeatherData (day_of_week, low_temp, high_temp, condition_code, condition, presip, lembab, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)
self.day_forecast.append (day_forecast_data)

# data spesifik ramalan malam
daytime_n = day.getElementsByTagName ('part') [1] # night
condition_code_n = daytime_n.getElementsByTagName ('icon') [0]
condition_code = self.getText (condition_code_n.childNodes)
condition_n = daytime_n.getElementsByTagName ('t') [0]
condition = self.getText (condition_n.childNodes)
presip_n = daytime_n.getElementsByTagName ('ppcp') [0]
presip = self.getText (presip_n.childNodes)
kelembaban_n = siang hari.getElementsByTagName ('hmid') [0]
kelembaban = self.getText (kelembaban_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 ('hembusan') [0]
wind_gusts = self.getText (wind_gusts_n.childNodes)
night_forecast_data = WeatherData (day_of_week, low_temp, high_temp, condition_code, condition, presip, lembab, wind_direction, wind_speed, wind_gusts, city, sunrise, sunset, moon_phase, moon_icon, bar_read, bar_desc)
self.night_forecast.append (night_forecast_data)

# acar data untuk waktu berikutnya!
fileoutput = buka (file_path_current, 'w')
pickle.dump (self.current_conditions, fileoutput)
fileoutput.close ()

fileoutput = buka (file_path_dayforecast, 'w')
pickle.dump (ramalan_hari sendiri, keluaran file)
fileoutput.close ()

fileoutput = buka (file_path_nightforecast, 'w')
pickle.dump (self.night_forecast, fileoutput)
fileoutput.close ()

kecuali:
print "fetchData: Kesalahan tak terduga:", sys.exc_info () [0]
print "Tidak dapat menginterogasi data cuaca"

else: # ambil data cuaca dari file kelas acar
jika self.options.verbose == Benar:
print >> sys.stdout, «mengambil data cuaca dari file:«, file_path_current

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

jika self.options.verbose == Benar:
print >> sys.stdout, "mengambil data perkiraan hari dari file:", file_path_dayforecast, file_path_nightforecast

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

jika self.options.verbose == Benar:
print >> sys.stdout, «mengambil data perkiraan hari dari file:«, file_path_nightforecast, file_path_nightforecast

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

def outputData (sendiri):
#mencoba:

if self.options.template! = Tidak ada:

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

lain:

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

#kecuali:
#print «outputData: Kesalahan tak terduga:«, sys.exc_info () [0]

jika __name__ == "__main__":

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

jika options.verbose == Benar:
print >> sys.stdout, "location:", options.location
cetak >> sys.stdout, "imperial:", options.imperial
print >> sys.stdout, "datatype:", options.datatype
print >> sys.stdout, "night:", options.night
print >> sys.stdout, "start day:", options.startday
print >> sys.stdout, "end day:", options.endday
print >> sys.stdout, "spasi:", options.spaces
print >> sys.stdout, "verbose:", options.verbose
print >> sys.stdout, "refetch:", options.refetch

# buat objek cuaca global baru
cuaca = Cuaca Global (opsi)
weather.fetchData ()
weather.outputData ()

Kami membuat file ~ / Conky / scripts / myweather.template

gedit ~ / Conky / scripts / myweather.template

kami menempelkan yang berikut di dalam:

{–Datatype = DW –startday = 1}: {–datatype = CC –startday = 1}
{–Datatype = HT –startday = 1} / {–datatype = LT –startday = 1} Angin dari {–datatype = WD –startday = 1} hingga {–datatype = WS –startday = 1}
Kelembaban: {–datatype = HM –startday = 1} Curah hujan: {–datatype = PC –startday = 1}
Matahari terbit: {–datatype = SR –startday = 1} Matahari terbenam: {–datatype = SS –startday = 1}
——————————————————
{–Datatype = DW –startday = 2}: {–datatype = CC –startday = 2}
{–Datatype = HT –startday = 2} / {–datatype = LT –startday = 2} Angin dari {–datatype = WD –startday = 2} hingga {–datatype = WS –startday = 2}
Kelembaban: {–datatype = HM –startday = 2} Curah hujan: {–datatype = PC –startday = 2}
Matahari terbit: {–datatype = SR –startday = 2} Matahari terbenam: {–datatype = SS –startday = 2}
——————————————————
{–Datatype = DW –startday = 3}: {–datatype = CC –startday = 3}
{–Datatype = HT –startday = 3} / {–datatype = LT –startday = 3} Angin dari {–datatype = WD –startday = 3} hingga {–datatype = WS –startday = 3}
Kelembaban: {–datatype = HM –startday = 3} Curah hujan: {–datatype = PC –startday = 3}
Matahari terbit: {–datatype = SR –startday = 3} Matahari terbenam: {–datatype = SS –startday = 3}
——————————————————
{–Datatype = DW –startday = 4}: {–datatype = CC –startday = 4}
{–Datatype = HT –startday = 4} / {–datatype = LT –startday = 4} Angin dari {–datatype = WD –startday = 4} hingga {–datatype = WS –startday = 4}
Kelembaban: {–datatype = HM –startday = 4} Curah hujan: {–datatype = PC –startday = 4}
Matahari terbit: {–datatype = SR –startday = 4} Matahari terbenam: {–datatype = SS –startday = 4}

Kita membuat file ~ / Conky / scripts / mail / conkyEmail.py (kita harus membuat folder surat)

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

dan tempel yang berikut ini di dalam:

impor os
impor string

#Masukkan nama pengguna dan kata sandi Anda di bawah ini dengan tanda kutip ganda
# mis. nama pengguna = »nama pengguna» dan kata sandi = »kata sandi»
nama pengguna = »YOUR_USUARIO_SINARROBA«
sandi = »KUNCI MU«

com = »wget -O - https: //» + nama pengguna + »:» + kata sandi + »@ mail.google.com / mail / feed / atom –tidak ada cek-sertifikat»

temp = os.popen (com)
msg = temp.read ()
index = string.find (msg, » »)
index2 = string.find (msg, » »)
fc = int (msg [indeks + 11: indeks2])

jika fc == 0:
cetak "0 baru"
lain:
print str (fc) + »baru»

Jadi sekarang Anda memiliki 7 file:

Di dalam folder: ~
-> .startconky << - membuat dapat dieksekusi

Di dalam folder: ~ / Conky
-> conkymain
-> ramalan cuaca
-> conkymail

dan di folder: ~ / Conky / scripts
-> conkyForecast.py << - membuat dapat dieksekusi
-> myweather.template

dan di folder: ~ / Conky / scripts / mail
conkyEmail.py << - membuat bisa dieksekusi

Dan itu saja, klarifikasi, di mana dikatakan / home / user / ... nama pengguna Anda digunakan dan di bagian mana data Gmail pergi, saya menyoroti dalam warna di mana Anda harus meletakkan data Anda.

untuk mematikan proses conky, tulis ke konsol

membunuh semua conky

untuk menjalankan conky menulis ke konsol

./.startconky

setelah semuanya disesuaikan, jika Anda ingin conky memulai setiap sesi

Sistem—> Preferensi—> Sesi dan dalam program startup kami menambahkannya

Di Name kita bisa menulis Conky, di Order ./.startconky dengan itu akan mulai setiap kali Anda menyalakan pc.

Itu saja, saya harap ini membantu Anda.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.