python使用itchat發送微信消息提醒

最近在學習一點python,先找了找有趣的應用,實際修改跑了一下提升興趣程度。python

找到itchat,它的簡介是這樣的:git


「itchat是一個開源的微信我的號接口,使用python調用微信從未如此簡單。github

使用不到三十行的代碼,你就能夠完成一個可以處理全部信息的微信機器人。api

固然,該api的使用遠不止一個機器人,更多的功能等着你來發現,好比這些微信

該接口與公衆號接口itchatmp共享相似的操做方式,學習一次掌握兩個工具。函數

現在微信已經成爲了我的社交的很大一部分,但願這個項目可以幫助你擴展你的我的的微信號、方便本身的生活。」工具

http://itchat.readthedocs.io/zh/latest/學習


 

itchat使用須要先下載安裝,安裝過程很簡單,直接測試

pip install itchat

我安裝的python3.6自帶pip,若是沒有pip的話我建議升級python。spa

在網上已經有很多itchat的應用,最簡單的就是查找特定用戶來發送微信消息。我結合另外一個示範將消息擴展了一點:間隔特定時間給特定的好友發送微信消息提醒(久坐提醒?)

代碼以下:

 1 #-*-coding:utf8-*-
 2 import itchat
 3 import datetime, os, platform,time
 4 
 5 def timerfun(sched_time) :
 6     flag = 0
 7     while True:
 8         now = datetime.datetime.now()
 9         if now > sched_time and now < sched_time + datetime.timedelta(seconds=1) :  # 由於時間秒以後的小數部分不必定相等,要標記一個範圍判斷
10             send_move()
11             time.sleep(1)    # 每次判斷間隔1s,避免屢次觸發事件
12             flag = 1
13         else :
14             #print('schedual time is {0}'.format(sched_time))
15             #print('now is {0}'.format(now))
16             if flag == 1 :
17                 sched_time = sched_time + datetime.timedelta(hours=1)  # 把目標時間增長一個小時,一個小時後觸發再次執行
18                 flag = 0
19 
20 def send_move:
21     # nickname = input('please input your firends\' nickname : ' )
22     #   想給誰發信息,先查找到這個朋友,name後填微信備註便可,deepin測試成功
23     # users = itchat.search_friends(name=nickname)
24     users = itchat.search_friends(name='大壯')   # 使用備註名來查找實際用戶名
25     #獲取好友所有信息,返回一個列表,列表內是一個字典
26     print(users)
27     #獲取`UserName`,用於發送消息
28     userName = users[0]['UserName']
29     itchat.send("該起來動一下了!",toUserName = userName)
30     print('succeed')
31 
32 if __name__=='__main__':
33     itchat.auto_login(hotReload=True)  # 首次掃描登陸後後續自動登陸
34     sched_time = datetime.datetime(2017,11,6,16,24,10)   #設定初次觸發事件的事件點
35     print('run the timer task at {0}'.format(sched_time))
36     timerfun(sched_time)

 

有幾個地方調試了一下:

  1. 第9行判斷時間是否到達指定時間處,由於now = datetime.datetime.now()返回的時間精確到了ms,因此直接拿精確到s的特定時間去比較會移植爲False。因此我改用了判斷是否在時間範圍內。而且判斷完後會用time.sleep(1)延時1s再次比較,避免屢次命中或屢次判斷。
  2. 第17行內,每次時間判斷知足指定時間範圍時,將指定時間日後延必定時間,這裏 + datetime.timedelta(hours=1)表示延後一個小時,達到每過一個小時觸發一次send_move函數的目的
  3. 第33行,itchat.auto_login(hotReload=True)如註釋說明的同樣,避免每次都要掃描二維碼登陸,在登陸一次以後「保持在線狀態」
  4. 第35行,注意一下這裏的print函數對sched_time字符串的使用方式。參考python手冊:A datetime object is a single object containing all the information from a date object and a time object,爲了按照通常時間格式打印輸出,對sched_time進行了format格式化處理,我理解就是保持sched_time本來的時間形式不變,而按照字符串的方法進行處理。這裏用{0}來表示格式化後的sched_time,讓其可以以原來時間格式與前面待打印的字符串進行字符串拼接。
  5. 第32行,if __name__=='__main__'表示當前模塊僅在本身運行時才運行後續的語句,不然當該模塊被其餘模塊引用時,不會運行後續語句。每一個模塊都有__name__屬性,當它等於'__main__'時,表示該模塊被用戶單獨運行,能夠執行特殊的操做。

 

這個程序正常狀況下直接運行便可,第一次運行可能須要掃碼登陸一下。另外能夠將第11行的判斷間隔增大一些,減小程序運行消耗。

 

後續仍是要繼續學習python基礎,只學習網上現成的實例的話,根基不穩,後續學習效率高不了。

相關文章
相關標籤/搜索