Welcome, guest | Sign In | My Account | Store | Cart

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().

Python, 109 lines
  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()
Created by peekaa on Wed, 10 Jul 2013 (MIT)
Python recipes (4591)
peekaa's recipes (2)

Required Modules

  • (none specified)

Other Information and Tasks