1. 程式人生 > 其它 >使用Python製作自動推送微信訊息提醒的備忘錄功能

使用Python製作自動推送微信訊息提醒的備忘錄功能

日常工作生活中,事情一多,就會忘記一些該做未做的事情。即使有時候把事情記錄在了小本本上或者手機、電腦端備忘錄上,也總會有檢視不及時,導致錯過的尷尬。如果有一款小工具,可以及時提醒,而不用再主動去查備忘錄,化被動為主動,那就再合適不過了。因此,在這裡我們就利用Python,實現這樣的一款“小工具”。

初步設想

毫無疑問,手機是當前使用最頻繁的工具,沒有之一。飯可以不吃,手機不可以不帶。如果能在某些特定的時點,將備忘記錄事項通過某種形式傳送到手機端,通過檢視手機端訊息實現事項提醒,那將是再好不過了。而手機端最常用的實時通訊工具,非微信莫屬。關於向手機端推送微信訊息的功能,在之前的小專案中已經使用過,這裡可以直接套用。

【更新2.0】Python自動監測自如房源狀態,推送微信訊息提醒狀態變更

於是,我們有了以下思路:

•首先,要有一個可以記錄事項的文件,用來記錄備忘事項的內容、提醒時間、是否辦結等;
•其次,掃描這個文件,獲取事項內容,判斷事項是否辦結,如已辦結需允許對文件的修改,標記辦結標誌;
•然後,設定一套提醒邏輯,規定在什麼時間、什麼情況下提醒;
•隨後,特殊情景處理,要能夠在不干擾程式正常執行的條件下,新增新的備忘事項,並且新新增事項能夠被掃描到;
•最後,在規定的時間和情境下,推送微信訊息。

根據以上分析,需要的工具,包含三部分:

•一個可以編寫和執行Python程式碼的編輯器;
•一部裝有微信的手機,最好有兩個微訊號;
•一個用來記錄事項的Excel文件。

用圖表示如下:

用Python設計一個可以自動推送微信訊息提醒的備忘錄!

執行前準備

Excel文件設計

為了記錄事項,需要有一個用來儲存事項記錄的Excel文件。需要對文件記錄逐條讀取,獲取事項內容、辦結時間、辦結標誌等,因此需要對文件格式進行規範。現在簡單的進行了設計,模式如下:

這是一個非常簡單的模式了,第二列內容是具體提醒事項的詳細內容;第三列日期列要按照“2018/09/02
18:00”的格式書寫,需要獲取該列的日期、時間;第四列是事項辦結標誌,已辦結事項標註為“是”。

對於需要提醒事項,需要按照如下格式記錄:

執行結果

直接執行程式,Excel文件內容變化如下:

我們看到,日期在當前時間(執行程式碼的時間)之前的事項,即已辦結事項,內容會新增背景色,“是否完成”標註為“是”。另外,程式會整合未辦結事項內容,推送微信通知,如下:

小編在此謝謝大家的觀看!Python很容易學!所以小編有弄一個交流,互問互答,資源共享的交流學習基地,如果你也是Python的學習者或者大牛都歡迎你來!㪊:548+377+875!一起
學習共同進步!

幾點說明

首先,因為實現非常的簡單,過程粗暴、不細膩,一看程式碼就懂(後附全部程式碼),故不多介紹實現過程和邏輯,以免貽笑大方;其次,有幾點說明一下,如果各位有好的想法,請留言告知,便於我優化完善;最後,想法大於實用,突發奇想,週末又有點時間而已。
•關於微信推送訊息:用Python的itchat模組實現,僅僅是登入、指定好友傳送訊息、退出等這樣簡單的操作,感興趣的可以直接去搜索該模組,有很多參考資料;
•xlrd、xlwt和xlutils:xlrd開啟Excel是隻讀的,不能修改;xlwt是可以對Excel文件修改,但是一般是新建一個文件,然後在此基礎上修改,對於已有內容的文件,就不適用了,因此借用了xlutils,而xlutils在xlrd和xlwt之間建立了一個橋樑,實現了讀和寫;
•在新增新的事項時,需要開啟Excel文件,如果沒有特殊處理,又恰好遇到程式對文件的儲存時會報錯,因此使用了try…except結構,遇到文件佔用,會跳過該次掃描,休息指定時間後重新開始;
•對於未辦結事項,什麼時間推送訊息、一天推送幾次,都可以根據自身需要調節;
•對於已辦結事項,沒有進行刪除,而是僅僅改變了格式繼續保留下來,程式執行時,還需要對這些事項進行掃描,自然會造成資源浪費,不刪除是因為想記錄做過的事項,便於日後檢視,另外,對我個人而言,短時間內也不會積累大量的事項,不會造成太大的影響,當然可以新增一些機制進行處理,比如移動到另外一個工作表中。

程式碼

    # 匯入模組
    import xlrd
    from xlutils.copy import copy
    import xlwt
    import itchat
    import datetime
    import time
    # 使用手機掃描二維碼登入微信
    def WeChatLogin():
     itchat.login()
    # 給指定好友傳送指定內容的訊息
    def SendAMassage(friend, message):
     users = itchat.search_friends(name=friend)
     userName = users[0]['UserName']
     itchat.send(message, toUserName = userName)
    # 按照指定格式修改excel表格內容
    def ModifyContent(row,col,content,sheet,new_remindbook,path,style):
     # 獲取工作表內容
     new_sheet = new_remindbook.get_sheet(0)
     # 寫入資料
     new_sheet.write(row,col,content,style)
     # 儲存檔案
     new_remindbook.save(path)
    # 判斷提醒是否過期
    def Overdue(nowtime,deadtime):
     if deadtime<nowtime:
     return True
     else:
     return False
    # 程式執行主體
    if __name__=='__main__':
     # 首次執行標誌
     first_exec = True
     # 微信登入
     WeChatLogin()
     # 指定微信訊息推送好友
     friend = '君以沫'
     # 備忘本記錄檔案地址
     path = r'.記事本.et'
     # 掃描備忘本記錄
     while True:
     # 檔案佔用標誌
     occupy = False
     # 開啟excel檔案,獲取檔案屬性資訊
     remindbook = xlrd.open_workbook(path,formatting_info=True)
     sheet = remindbook.sheet_by_index(0)
     nrows=sheet.nrows
     # 建立副本
     new_remindbook=copy(remindbook)
     # 初始化事項序號
     mark = 1
     # 初始化message資訊
     message='以下事項未辦結:'
     # 執行一次備忘本掃描
     for i in range(2, nrows):
     # 如果已辦結事項或者空事項,直接跳過
     if sheet.cell(i,3).value=='是' or sheet.cell(i,2).value=='':
     continue
     # 獲取事項截止時間
     deadtime = xlrd.xldate.xldate_as_datetime(sheet.cell(i,2).value, 0)
     deadhour = deadtime.strftime('%H:%M')
     # 獲取當前時間
     nowtime = datetime.datetime.now()
     nowhour=nowtime.strftime("%H:%M")
     # 如果過期,則將過期標誌設定為是
     if Overdue(nowtime,deadtime):
     # style0
     style0 = xlwt.XFStyle()
     # 設定單元格背景顏色
     pattern= xlwt.Pattern()
     pattern.pattern=1
     pattern.pattern_fore_colour=22
     style0.pattern=pattern
     # 字型設定
     font = xlwt.Font()
     font.name = '仿宋_GB2312'
     font.colour_index = 1
     font.height =280
     style0.font = font
     # 邊框設定
     borders = xlwt.Borders()
     borders.left = xlwt.Borders.THIN
     borders.left = xlwt.Borders.THIN
     borders.right = xlwt.Borders.THIN
     borders.top = xlwt.Borders.THIN
     borders.bottom = xlwt.Borders.THIN
     style0.borders = borders
     # 為過期事項新增背景色(按指定格式重填)
     try:
     ModifyContent(i,1,sheet.cell(i,1).value,sheet,new_remindbook,path,style0)
     except:
     occupy = True
     print('檔案佔用中,休息60s...')
     time.sleep(6)
     break
     # style
     style = xlwt.XFStyle()
     # 設定單元格字型、顏色、字號
     font = xlwt.Font()
     font.name = '仿宋_GB2312'
     font.colour_index = 0
     font.height =280
     font.bold = False 
     style.font = font
     # 設定單元格對齊方式
     alig = xlwt.Alignment()
     alig.horz = xlwt.Alignment.HORZ_CENTER
     alig.vert = xlwt.Alignment.VERT_CENTER
     style.alignment = alig
     # 邊框設定
     borders = xlwt.Borders()
     borders.left = xlwt.Borders.THIN
     borders.left = xlwt.Borders.THIN
     borders.right = xlwt.Borders.THIN
     borders.top = xlwt.Borders.THIN
     borders.bottom = xlwt.Borders.THIN
     style.borders = borders
     # 按照指定格式寫入資料
     try:
     ModifyContent(i,3,'是',sheet,new_remindbook,path,style)
     except:
     occupy = True
     print('檔案佔用中,休息60s...')
     time.sleep(6)
     break
     # 未過期事項,新增到提醒資訊中
     else:
     # 截止時間單獨事項提醒
     if deadhour == nowhour:
     SendAMassage(friend, sheet.cell(i,1).value)
     message = message+'
    '+'['+str(mark)+']'+sheet.cell(i,1).value
     mark=mark+1
     # 如果沒有被佔用
     if not(occupy):
     # 沒有未辦結事項,結束迴圈
     if len(message)<=8:
     print('here')
     break
     # 首次執行訊息提醒
     if first_exec:
     SendAMassage(friend, message)
     print(message)
     first_exec = False
     release = False
     # 如果是以下時點,則推送微信訊息提醒
     if nowhour in ['08:00','10:00','12:00','14:00','16:00']:
     SendAMassage(friend, message)
     # 其他時點
     else:
     print('當前時間:'+ nowtime.strftime("%Y%m%d %H:%M:%S")+' '+'休息30秒...' )
     # 半點整點列印未辦結事項
     if nowhour[3:] in ['30','00']:
     print(message)
     time.sleep(30)
     # 所有事項已辦結
     message='所有事項已辦結。'
     SendAMassage(friend, message)
     print(message)
     # 退出微信登入
     itchat.logout()

---恢復內容結束---

總結

以上所述是小編給大家介紹的使用Python製作自動推送微信訊息提醒的備忘錄,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對指令碼之家網站的支援!