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


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

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


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

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

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

該接口與公眾號接口itchatmp共享類似的操作方式,學習一次掌握兩個工具。

如今微信已經成為了個人社交的很大一部分,希望這個項目能夠幫助你擴展你的個人的微信號、方便自己的生活。”

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


 

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

pip install itchat

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

在網上已經有不少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基礎,只學習網上現成的實例的話,根基不穩,后續學習效率高不了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM