Ben er aantal dagen tussenuit geweest wat het forum betreft, maar heb ook nog even iets in elkaar geknutseld. Mijn Mint draaid wel gnome, dus vergeef me de commandline commands die alleen op gnome werken. Misschien ben ik een beetje doorgeslagen, maar het leek mij wel een leuke "gimmick" om de wallpaper aan de hand van de tijd van zonsopgang en ondergang te laten veranderen.
Hoe het werkt: Je zet twee achtergronden in de zelfde dir als het script en noemt deze achtergronden 'licht.png' en 'donker.png', maakt script uitvoerbaar, roep het script aan bij opstarten.
Onderstaande script werk, op een irritant dingetje na. Als je je pc meerdere keren op een dag opstart, worden de at commando's iedere keer aangeroepen en worden er taken aangemaakt. Ik dacht dat ik kon checken of het scriptje al aangeroepen is vandaag, door te kijken naar de timestamp of het script "gelezen" is vandaag. Maar dat werkt niet, aanroepen blijkt niet het zelfde te zijn als lezen helaas.
Wat het script doet:
- Checkt of het vandaag al aangeroepen is (werkt helaas niet)
- Haalt de zonsopgang- en zonsondergang-tijd van buienradar.nl
- Stelt de huidige achtergrond in op licht of donker
- Maakt via at taken aan om op bepaalde tijd de achtergrond te wisselen en op 00:00 het script weer aan te roepen om nieuwe tijden in te stellen als computer meerdere dagen aan blijft staan.
#!/usr/bin/env python
import time
import datetime
import urllib
import re
import os
import sys
#Dict instellen om een sting te vormen naar formaat zoals het op de website
#vermeld staat
days = {'0': 'maandag', '1': 'dinsdag', '2': 'woensdag', '3': 'donderdag',
'4': 'vrijdag', '5': 'zaterdag', '6': 'zondag'}
months = {'1': 'januari', '2': 'februari', '3': 'maart', '4': 'april',
'5': 'mei', '6': 'juni', '7': 'juli', '8': 'augustus',
'9': 'september', '10': 'oktober', '11': 'november', '12': 'december'}
today = []
times = []
#Datum mbv de eerder ingestelde dict omzetten naar formaat gebruikt op website
def formatdate(day):
date = [str(day.weekday()), str(day.day), str(day.month)]
for a, b in days.iteritems():
date[0] = date[0].replace(a, b)
for a, b in months.iteritems():
date[2] = date[2].replace(a, b)
return date
#Zonsopgang en ondergang tijden van buienradar.nl halen
def grabcont(today):
filehandle = urllib.urlopen(
'http://www.buienradar.nl/zonsopkomst-zonsondergang.aspx')
for lines in filehandle.readlines():
if (today[0] + " " + today[1] + " " + today[2]) in lines:
rawline = removetags(lines)
filehandle.close()
return rawline
#Html tags van de gevonden regel strippen.
def removetags(rawinput):
c = re.compile(r'<[^<]*?>')
return c.sub(',', rawinput)
#Gestripte string omzetten naar list met alleen de tijden.
def formatcont(content):
li1 = []
li2 = ['', '']
li = content.split(',')
for el in li:
if ":" in el: # Element met tijd uit list halen,
#waar : in zit (bijv 12:33)
li1.append(el)
li2[0] = li1[0].split(':')
li2[1] = li1[1].split(':')
li2[0][0] = li2[0][0].zfill(2) # getallen aanvullen tot 2 cijfers zodat at
li2[0][1] = li2[0][1].zfill(2) # met formaat om kan gaan (bijv 2 wordt 02)
li2[1][0] = li2[1][0].zfill(2)
li2[1][1] = li2[1][1].zfill(2)
return li2
#Commandline commando's instellen zodat via at de achtergrond gewisseld wordt,
#afhankelijk van de huidige tijd.
def setat(times):
rise = datetime.time(int(times[0][0]), int(times[0][1]))
dawn = datetime.time(int(times[1][0]), int(times[1][1]))
atday = ('echo gsettings set org.gnome.desktop.background picture-uri '
'file://%s/licht.png | at %s%s') % (str(os.getcwd()),
times[0][0], times[0][1])
atnight = ('echo gsettings set org.gnome.desktop.background picture-uri '
'file://%s/donker.png | at %s%s') % (str(os.getcwd()),
times[1][0], times[1][1])
day = ('gsettings set org.gnome.desktop.background '
'picture-uri file://%s/licht.png') % (str(os.getcwd()))
night = ('gsettings set org.gnome.desktop.background picture-uri '
'file://%s/donker.png') % (str(os.getcwd()))
now = datetime.time(time.localtime().tm_hour, time.localtime().tm_min)
os.system('echo %s/bureaubaldwisselaar.py | at 0000' % (str(os.getcwd())))
if now < rise: # Als het script voor zonsopkomst wordt aangroepen:
print 'set wallpaper to night'
print '%s<%s -- set at to %s' % (now, rise, rise)
print '%s<%s -- set at to %s' % (now, dawn, dawn)
os.system(night)
os.system(atday)
os.system(atnight)
elif now < dawn: # Als het script na zonsopkomst wordt aangeroepen:
print 'set wallpaper to day'
print '%s<%s -- set at to %s' % (now, dawn, dawn)
print atnight
os.system(day)
os.system(atnight)
pass
else: # Als het script na sonsondergang wordt aangeroepen:
print 'set wallpaper to night'
os.system(night)
#Script uitvoeren
content = formatcont(grabcont(formatdate(datetime.date.today())))
setat(content) # Tijden instellen via at.
sys.exit(0)
Heeft er iemand nog hints, tips, andere opmerkingen of een oplossing hoe ik het script kan laten kijken of het al aangeroepen is vandaag?
Het is niet helemaal waar de OP om vroeg (noem het dichterlijke vrijheid), maar dit is mijn twee cent. XD
EDIT: Bestaande code zo veel als ik kon vinden aangepast aan geldende style guide, zoals SeySayux voorgesteld heeft. Alleen zou ik de global variables nog kunnen integreren in de verschillende functions.