Python微信庫:itchat的用法詳解


本篇文章主要介紹了Python微信庫:itchat的用法詳解,現在分享給大家,也給大家做個參考。一起過來看看吧

 

在論壇上看到了用Python登錄微信並實現自動簽到,才了解到一個新的Python庫: itchat

庫文檔說明鏈接在這: itchat

我存個檔在我網站(主要是我打開很慢),以便以后閱讀。

0x01 Start

最簡單的回復

通過如下代碼,可以完成回復所有文本信息(包括群聊)。

import itchat
from itchat.content import TEXT
 
@itchat.msg_register
def simple_reply(msg):
  if msg['Type'] == TEXT:
    return 'I received: %s' % msg['Content']
 
itchat.auto_login()
itchat.run()

常用消息的配置

itchat支持所有的消息類型與群聊,下面的示例中演示了對於這些消息類型簡單的配置。

#coding=utf8
import itchat
from itchat.content import *
 
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
  itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName'])
 
# 以下四類的消息的Text鍵下存放了用於下載消息內容的方法,傳入文件地址即可
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
  msg['Text'](msg['FileName'])
  return '@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName'])
 
# 收到好友邀請自動添加好友
@itchat.msg_register(FRIENDS)
def add_friend(msg):
  itchat.add_friend(**msg['Text']) # 該操作會自動將新好友的消息錄入,不需要重載通訊錄
  itchat.send_msg('Nice to meet you!', msg['RecommendInfo']['UserName'])
 
# 在注冊時增加isGroupChat=True將判定為群聊回復
@itchat.msg_register(TEXT, isGroupChat = True)
def groupchat_reply(msg):
  if msg['isAt']:
    itchat.send(u'@%s\u2005I received: %s' % (msg['ActualNickName'], msg['Content']), msg['FromUserName'])
 
itchat.auto_login(True)
itchat.run()

當然這里不需要深究為什么這些東西可以這么寫,我在這里放出了示例程序只是為了給你一個該sdk相關代碼大概樣子的概念。

有了大概的模式的了解之后我們就可以進入下一部分的介紹。

0x02 Login

在上一部分中你看到了基本的注冊與登陸,而顯然登陸使用的是itchat提供了auto_login方法,調用即可完成登錄。

一般而言,我們都會在完成消息的注冊后登陸。

當然這里需要特別強調的是三點,分別是短時間關閉重連、命令行二維碼與自定義登陸內容。 itchat提供了登陸狀態暫存,關閉程序后一定時間內不需要掃碼即可登錄。 為了方便在無圖形界面使用itchat,程序內置了命令行二維碼的顯示。 * 如果你需要就登錄狀態就一些修改(例如更改提示語、二維碼出現后郵件發送等)。

**0x01-1 短時間關閉程序后重連**

這樣即使程序關閉,一定時間內重新開啟也可以不用重新掃碼。

最簡單的用法就是給 auto_login 方法傳入值為真的 hotReload 。

該方法會生成一個靜態文件 itchat.pkl ,用於存儲登陸的狀態。

import itchat
from itchat.content import TEXT
 
@itchat.msg_register(TEXT)
def simple_reply(msg):
  print(msg['Text'])
 
itchat.auto_login(hotReload=True)
itchat.run()
itchat.dump_login_status()

通過設置statusStorageDir可以將靜態文件指定為其他的值。

這一內置選項其實就相當於使用了以下兩個函數的這一段程序:

import itchat
from itchat.content import TEXT
 
if itchat.load_login_status():
  @itchat.msg_register(TEXT)
  def simple_reply(msg):
    print(msg['Text'])
  itchat.run()
  itchat.dump_login_status()
else:
  itchat.auto_login()
  itchat.dump_login_status()
  print('Config stored, so exit.')

其中load_login_status與dump_login_status分別對應讀取與導出設置。

通過設置傳入的fileDir的值可以設定導入導出的文件。

**0x01-2 命令行二維碼顯示**

通過以下命令可以在登陸的時候使用命令行顯示二維碼:

 

itchat.auto_login(enableCmdQR=True) 

 

部分系統可能字幅寬度有出入,可以通過將enableCmdQR賦值為特定的倍數進行調整:

 

 

# 如部分的linux系統,塊字符的寬度為一個字符(正常應為兩字符),故賦值為2
itchat.auto_login(enableCmdQR=2) 

 

默認控制台背景色為暗色(黑色),若背景色為淺色(白色),可以將enableCmdQR賦值為負值:

itchat.auto_login(enableCmdQR=-1) 

 

**0x01-2 自定義登錄過程**

如果需要控制登錄的過程,可以閱讀下面的內容。

同時itchat也提供了登陸所需的每一步的方法,登陸的過程按順序為: 獲取二維碼uuid->獲取二維碼->判斷是否已經登陸成功->獲取初始化數據->更新微信相關信息(通訊錄、手機登陸狀態)->循環掃描新信息(開啟心跳)

獲取二維碼uuid

獲取生成二維碼所需的uuid,並返回。

方法名稱: get_QRuuid
所需值:無
返回值:成功->uuid,失敗->None

獲取二維碼

根據uuid獲取二維碼並打開,返回是否成功。

方法名稱: get_QR
所需值:uuid
返回值:成功->True,失敗->False

判斷是否已經登陸成功

判斷是否已經登陸成功,返回掃描的狀態碼。

方法名稱: check_login
所需值:uuid
返回值:登陸成功->'200',已掃描二維碼->'201',二維碼失效->'408',未獲取到信息->'0'

獲取初始化數據

獲取微信用戶信息以及心跳所需要的數據。

方法名稱: web_init
所需值:無
返回值:存儲登錄微信用戶信息的字典

獲取微信通訊錄

獲取微信的所有好友信息並更新。

方法名稱: get_contract
所需值:無
返回值:存儲好友信息的列表

更新微信手機登陸狀態

在手機上顯示登錄狀態。

方法名稱: show_mobile_login
所需值:無
返回值:無

循環掃描新信息(開啟心跳)

循環掃描是否有新的消息,開啟心跳包。

方法名稱: start_receiving
所需值:無
返回值:無

EG:

一個登錄例子:

import itchat, time, sys
 
def output_info(msg):
 print('[INFO] %s' % msg)
 
def open_QR():
 for get_count in range(10):
 output_info('Getting uuid')
 uuid = itchat.get_QRuuid()
 while uuid is None: uuid = itchat.get_QRuuid();time.sleep(1)
 output_info('Getting QR Code')
 if itchat.get_QR(uuid): break
 elif get_count >= 9:
 output_info('Failed to get QR Code, please restart the program')
 sys.exit()
 output_info('Please scan the QR Code')
 return uuid
 
uuid = open_QR()
waitForConfirm = False
while 1:
 status = itchat.check_login(uuid)
 if status == '200':
 break
 elif status == '201':
 if waitForConfirm:
 output_info('Please press confirm')
 waitForConfirm = True
 elif status == '408':
 output_info('Reloading QR Code')
 uuid = open_QR()
 waitForConfirm = False
userInfo = itchat.web_init()
itchat.show_mobile_login()
itchat.get_contract()
output_info('Login successfully as %s'%userInfo['NickName'])
itchat.start_receiving()
 
# Start auto-replying
@itchat.msg_register
def simple_reply(msg):
 if msg['Type'] == 'Text':
 return 'I received: %s' % msg['Content']
itchat.run() 

0x03 Register

注冊消息方法

itchat將根據接收到的消息類型尋找對應的已經注冊的方法。

如果一個消息類型沒有對應的注冊方法,該消息將會被舍棄。

在運行過程當中也可以動態注冊方法,注冊方式與結果不變。

注冊

你可以通過兩種方式注冊消息方法

import itchat
from itchat.content import *
 
# 不帶參數注冊,所有消息類型都將調用該方法(包括群消息)
@itchat.msg_register
def simple_reply(msg):
  if msg['Type'] == 'Text':
    return 'I received: %s' % msg['Text']
 
# 帶參數注冊,該類消息類型將調用該方法
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
  itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName'])

想要了解python或學習Python的可直接點擊鏈接即可領取相關學習福利包:

python高薪就業(視頻、學習路線、免費獲取)​www.jianshu.com圖標

是安全網站放心,繼續訪問就可以領取了哦


免責聲明!

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



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