If you need to do something irregularly, randomly during the day, you often forget. This script gives you mail, sms or popup window indefinitely in random interval to remind you of doing it. It runs forever. If you want to send emails, uncomment the row sendMail() and fill variable me, to, smtp, name, login in function sendMail().
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | #/usr/bin/env python
# -*- coding: utf-8 -*-
import time, random, sys, os, smtplib
if sys.version < '3':
from Tkinter import *
else:
from tkinter import *
randommsgnext="randommsgnext.txt"
# delay between two msg is 2-5 hours
mydelayfrom=2 * 3600 #
mydelayto=5 * 3600
#which time to call me up, 0 is Monday
timesOn=((0,"07:00","09:55"),
(0,"11:40","22:00"),
(1,"07:00","11:30"),
(1,"15:15","22:00"),
(2,"07:00","10:45"),
(2,"14:20","22:00"),
(3,"14:20","22:00"),
(4,"07:00","12:30"),
(4,"14:20","22:00"),
)
def sendMail():
# sends mail
s = smtplib.SMTP(smtp)
s.login(name, password)
subject="Reminder"
fromaddr=fromadr
toaddrs= [toadr]
text= "Do what you should do.\n%s" % time.ctime()
msg = ("Subject: %s\nFrom: %s\nTo: %s\n\n%s" % (subject, fromaddr, ", ".join(toaddrs), text))
s.sendmail(fromaddr, toaddrs, msg)
s.quit()
def sendSMS():
# sends sms
message={'user': user, 'password': password, 'sender': fromnumber, 'recipient': tonumber, 'message': "goodbye"}
if sys.version < '3':
import urllib
params = urllib.urlencode(message)
f=urllib.urlopen(http, params)
else:
import urllib.parse
import urllib.request
params = urllib.parse.urlencode(message)
f = urllib.request.urlopen(http % params)
def showMessage():
# show tkinter box
root=Tk()
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
root.protocol('WM_TAKE_FOCUS', root.update )
root.wait_visibility(root)
root.attributes('-topmost',1)
label=Label(root, text="S bohem", width="10").pack({"side": "left"})
button=Button(text="OK", width="10", command=lambda:root.destroy()).pack()
root.mainloop()
def hours2dec(what):
# convert 5:30 to 5.5
if type(what)==type(""):
what=what.split(":")
return int(what[0])+int(what[1])/60.0
def checktime(nowtime):
# send msg only at timesOn
for day, timefrom, timeto in timesOn:
timefromdec= hours2dec(timefrom)
timetodec=hours2dec(timeto)
timenowdec=hours2dec([nowtime.tm_hour,nowtime.tm_min])
if nowtime.tm_wday == day and timefromdec<=timenowdec<=timetodec:
return True
return False
def timenextwritef():
# write the next time to file
f=open(randommsgnext,"w")
timenext=time.mktime (nowtime)+delaysec
f.write(time.ctime(timenext)+"\n")
f.close()
os.utime(randommsgnext, None)
nowtime=time.localtime()
os.chdir(os.path.dirname(sys.argv[0]))
while True:
# run indefinitely
delaysec=random.randint(mydelayfrom,mydelayto)
timenextwritef()
time.sleep(delaysec) # sleep
nowtime=time.localtime()
if checktime(nowtime):
print (str(nowtime.tm_hour)+":"+str(nowtime.tm_min)+":"+str(nowtime.tm_sec))
# sendMail()
# sendSMS()
# showMessage()
|