itchat
一. 安裝
$ pip install itchat
特殊的字典使用方式
經過打印 itchat 的用戶以及註冊消息的參數, 能夠發現這些值都是字典.python
但實際上 itchat 精心構造了相應的消息,用戶,羣聊,公衆號等.android
其全部的鍵值均可以經過這一方式訪問:git
@itchat.msg_register(TEXT) def _(msg): # equals to print(msg['FromUserName']) print(msg.fromUserName)
屬性名爲鍵值首字母小寫後的內容.github
author = itchat.search_frients(nickName="LittleCoder")[0] author.send("greeting , LittleCoder!")
二. 登陸
通常而言, 會在完成消息的註冊後登陸.web
強調三點:django
- 登陸狀態緩存, 短期關閉重連, 關閉程序後必定時間內不須要掃碼便可登陸. 因爲目前微信網頁版提供上一次登陸的微信號不掃碼直接手機確認登陸, 因此若是開啓登陸狀態暫存, 將會自動使用這一功能.
- 命令行二維碼,
- 自定義登陸內容(如更改提示語, 二維碼出現後郵件發送等).
1. 短期關閉程序後重連.
即便程序關閉,必定時間內從新開啓也能夠不用從新掃碼.json
使用 auto_login
方法傳入值爲真的 hotReload
.
該方法會生成一個靜態文件 itchat.pkl
, 用於存儲登陸的狀態. 緩存
import itchat from itchat.content import TEXT @itchat.msg_register(TEXT) def simple_reply(TEXT): print(msg.text) itchat.auto_login(hotReload=True) itchat.run()
經過設置 statusStorageDir
能夠將靜態文件指定爲其餘的值. 這一內置選項,至關於使用瞭如下兩個函數的這一段程序:微信
import itchat from itchat.content import TEXT if itchat.load_login_status(): # itchat.load_login_status() 用於讀取設置 @itchat.msg_register(TEXT): def simple_reply(msg): print(msg["Text"]) itchat.run() itchat.dump_login_status() # itchat.dump_login_status() 用於導出設置 else: itchat.auto_login() itchat.dump_login_status() print("Config stored, so exit.")
經過設置傳入的 fileDir
的值, 能夠設定導入導出的文件.app
2. 命令行二維碼
經過以下命令在登陸的時候, 使用命令行顯示 二維碼.
itchat.auto_login(enableCmdQR=True)
部分系統可能字符寬度有出入, 能夠經過將 enableCmdQR 賦值爲特定的倍數進行調整.
# 如部分 Linux 系統, 塊字符的寬度爲一個字符(正常爲兩個字符), 故賦值爲 2 itchat.auto_login(enableCmdQR=2)
默認控制檯背景顏色爲暗色(黑色), 若背景色爲淺色, 可將 enableCmdQR 賦值爲負值:
itchat.auto_login(enableCmdQR=-1)
3. 自定義登陸過程
itchat 提供了登陸所需的每一步的方法, 登陸的過程按殊勳爲:
1) 獲取二維碼 uuid
, 並返回該 uuid
- 方法名稱: `get_QRuuid()` - 參數: 無 - 返回值: 成功返回 uuid, 失敗返回 None
2) 獲取二維碼 : 根據uuid
獲取二維碼並打開.
- 方法名: `get_QR()` - 參數: uuid - 返回值: True, False
3) 判斷是否已登陸成功
- 方法名稱: `check_login()` - 參數: uuid - 返回值: 200 登陸成功, 201 以掃描二維碼, 408 二維碼失效, 0 未獲取到信息.
4) 獲取初始化數據: 獲取微信用戶信息以及心跳所須要的數據.
- 方法名稱: `web_init()` - 參數: 無 - 返回值: 存儲登陸微信用戶信息的字典.
5) 獲取微信通信錄, 獲取微信的全部好友信息並更新
- 方法名稱: `get_frients()` - 參數: 無 - 返回值: 存儲好友信息的列表
6) 更新微信手機登陸狀態, 在手機上顯示登陸狀態.
- 方法名稱: `show_mobile_login()` - 參數: 無 - 返回值: 無
7) 循環掃描新信息(開啓心跳)
- 方法名稱: `start_receiving()` - 參數: 無 - 返回值: 無
4. auto_login
的實現代碼:
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") uuit = itchat.get_QRuuid() while uuid is None: uuitd = itchat.get_QRuuid(); time.sleep(1) output_info("Getting QR code") if itchat.get_QR(uuid): break elif get_coun >= 9: output_info("Failed to get QR code, plz restart the program") sys.exit() output_info("Plz scan the QE 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("Plz 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_friends(True) 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()
5. 退出及登陸完成後調用的特定方法
登陸完成後的方法須要賦值在 loginCallback
中
退出後的方法,須要賦值在 exitCallback
中.
import itchat, time def lc(): print("Finash Login!") def ec(): print("exit") itchat.auto_login(loginCallback=lc, exitCallback=ec) time.sleep() itchat.logout()
若不設置 loginCallback
的值, 將會自動刪除二維碼圖片並清空命令行顯示.
6. 用戶多開
import itchat netInstance = itchat.new_instance() netInstance.auto_login(hotReload=True, statusStorageDir="newInstance.pkl") @newInstance.msg_register(TEXT) def reply(msg): return msg.text netInstance.run()
三. 回覆
五種回覆方法, 建議直接使用 send
方法
1. send
- 方法:
send(msg="Text Message", toUserName=None)
-
參數:
msg
: 文本消息內容@fil@path_to_file
: 發送文件@img@path_to_img
: 發送圖片@vid@path_to_video
: 發送視頻toUserName
: 發送對象, 若是留空, 將發送給本身.
-
返回值: True, False
-
示例代碼:
# coding-utf-8 import itchat itchat.auto_login() itchat.send("Hello World!") ithcat.send("@fil@%s" % '/tmp/test.text') ithcat.send("@img@%s" % '/tmp/test.png') ithcat.send("@vid@%s" % '/tmp/test.mkv')
2. send_msg
- 方法:
send_msg(msg='Text Message', toUserName=None)
- 參數:
msg
: 消息內容toUserName
: 發送對象, 若是留空, 將發送給本身.
- 返回值: True, False
-
示例代碼:
import itchat itchat.auto_login() itchat.send_msg("hello world.")
3. send_file
- 方法:
send_file(fileDir, toUserName=None)
- 參數:
fileDir
: 文件路徑, 當文件不存在時, 將打印無此文件的提醒.toUserName
: 發送對象, 若是留空, 將發送給本身.
- 返回值: True, False
-
示例代碼:
import itchat itchat.auto_login() itchat.send_file("/tmp/test.txt")
4. send_img
- 方法:
send_img(fileDir, toUserName=None)
-
參數:
fileDir
: 文件路徑, 當文件不存在時, 將打印無此文件的提醒.toUserName
: 發送對象, 若是留空, 將發送給本身.
-
返回值: True, False
-
示例代碼:
import itchat itchat.auto_login() itchat.send_img("/tmp/test.txt")
5. send_video
- 方法:
send_video(fileDir, toUserName=None)
- 參數:
fileDir
: 文件路徑, 當文件不存在時, 將打印無此文件的提醒.toUserName
: 發送對象, 若是留空, 將發送給本身.
- 返回值: True, False
-
示例代碼:
import itchat itchat.auto_login() itchat.send_video("/tmp/test.txt")
四. 註冊消息方法
itchat 將根據接受到的消息類型尋找對應的已註冊的方法.
若是一個消息類型沒有對應的註冊方法, 該消息將會被捨棄.
在運行過程當中也能夠動態註冊方法, 註冊方式與結果不變.
1. 註冊方法:
兩種方法註冊消息.
-
不帶具體對象註冊, 將註冊爲普通消息的回覆方法.
import itchat from itchat.content import * @itchat.msg_register(TEXT) def simple_reply(msg): return "T reveived: %s" % msg["Text"]
-
帶對象參數註冊, 對應消息對象將調用該方法.
import itchat from itchat.content import * @itchat.msg_register(TEXT, isFriendChat=True, isGroupChat=True,isMpChat=True) def text_reply(msg): msg.user.send("%s : %s" % (mst.type, msg.text))
2. 消息類型
向註冊方法傳入的 msg
包含微信返回的字典的全部內容.
itchat 增長 Text
, Type
(也就是參數) 鍵值, 方便操做.
itcaht.content
中包含全部的消息類型參數, 以下表:
參數 | 類型 | Text 鍵值 |
---|---|---|
TEXT | 文本 | 文本內容 |
MAP | 地圖 | 位置文本 |
CARD | 名片 | 推薦人字典 |
NOTE | 通知 | 通知文本 |
SHARING | 分享 | 分享名稱 |
PICTURE | 圖片/表情 | 下載方法 |
RECORDING | 語音 | 下載方法 |
ATTACHMENT | 附件 | 下載方法 |
VIDEO | 小視頻 | 下載方法 |
FRIENDS | 好友邀請 | 添加好友所需參數 |
SYSTEM | 系統消息 | 更新內容的用戶或羣聊的UserName 組成的列表 |
代碼示例: 存儲接受的文件
@itchat.msg_register(ATTACHMENT) def download_files(msg): msg["Text"](msg["FileName"])
附件的下載與發送
itchat 的附件下載方法存儲在 msg 的 Text 鍵中.
發送的文件名(圖片給出的默認文件名), 都存儲在 msg 的 FileName 鍵中.
下載方法, 接受一個可用的位置參數(包括文件名), 並將文件響應的存儲.
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): msg.download(msg.fileName) itchat.send('@%s@%s' % ('img' if msg['Type'] == 'Picture' else 'fil', msg["FileName"]), msg["FromUserName"]) return "%s received" % msg["Type"]
若是不須要下載到本地, 僅須要讀取二進制串進一步處理能夠不傳入參數, 方法將會返回圖片的二進制串.
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_files(msg): with open(msg.fileName, 'wb') as f: f.write(msg.download())
羣消息增長了三個鍵值:
isAt
: 判斷是否 @ 本號ActualNickName
: 實際 NickNameContent
: 實際 Content
測試程序:
import itcaht from itchat.content import TEXT @itchat.msg_register(TEXT, isGroupChat=True) def text_reply(msg): print(msg.isAt) print(msg.actualNickName) print(msg.text) itchat.auto_login() itchat.run()
3. 註冊消息的優先級
優先級規則:
- 後註冊消息 > 先註冊消息
- 帶參數消息 > 不帶參數消息
4. 動態註冊消息
-
將
itchat.run()
放入另外一線程import thread thread.start_new_thread(itcaht.run(), ())
-
使用
configured_reply()
方法處理消息.while 1: itcaht.configured_reply() # some other functions time.sleep()
示例:
#coding=utf-8 import thread import itchat from itchat.content import * replyToGroupChat = True functionStatus = False def change_function(): if replyToGroupChat != functionStatus: if replyToGroupChat: @itchat.msg_register(TEXT, isGroupChat=True) def group_text_reply(msg): if u'關閉' in msg["Text"]: replyToGroupChat = False return u"以關閉" elif u"開啓" in msg["Text"]: return u"已經在運行" return u'輸入"關閉" 或者 "開啓" 測試功能' else: @itcaht.msg_register(TEXT, isGroupCaht=True) def group_text_reply(msg): if u"開啓" in msg["Text"]: replyToGroupChat = True return u"從新開啓成功" functionStatus = replyToGroupChat thread.start_new_thread(itcaht.run, ()) while 1: change_function() time.sleep(1) # 各種消息的註冊: 經過以下代碼, 微信已經能夠就平常的各類信息進行獲取與回覆. import itchat, time from itchat.content import * @itchat.msg_register([TEXT, MAP, NOTE, SHARING]) def text_replay(msg): msg.user.send('%s %s' % (msg.type, msg.text)) @itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO]) def download_file(msg): msg.download(msg.fileName) typeSymbol = { PICTURE: 'img', VIDEO: 'vid', }.get(msg.type, 'fil') return "@%s@%s" % (typeSymbol, msg.fileName) @itchat.msg_register(FRIENDS) def add_friend(msg): msg.user.verify() msg.user.send("Nice to meet you!") @itchat.msg_register(TEXT, isGroupChat=True) def text_replay(msg): if msg.isAt: msg.user.send(u'@$s\u2005I received: %s' % (msg.actualNickName, msg.text)) itchat.auto_login(True) itchat.run(True)
五. 消息內容
1. 微信通常消息內容
微信回覆的全部消息都遵循這一格式.
{ "FromUserName": "", "ToUserName": "", "Content": "", "StatusNotifyUserName": "", "ImgWidth": 0, "PlayLength": 0, "RecommendInfo": {}, "StatusNotifyCode": 0, "NewMsgId": "", "Status": 0, "VoiceLength": 0, "ForwardFlag": 0, "AppMsgType": 0, "Ticket": "", "AppInfo": {}, "Url": "", "ImgStatus": 0, "MsgType": 0, "ImgHeight": 0, "MediaId": "", "MsgId": "", "FileName": "", "HasProductId": 0, "FileSize": "", "CreateTime": 0, "SubMsgType": 0 }
2. 消息具體內容
1) 初始化消息
MsgType: 51 FromUserName: 本身ID ToUserName: 本身ID StatusNotifyUserName: 最近聯繫的聯繫人ID Content: <msg> <op id='4'> <username> # 最近聯繫的聯繫人 filehelper,xxx@chatroom,wxid_xxx,xxx,... </username> <unreadchatlist> <chat> <username> # 朋友圈 MomentsUnreadMsgStatus </username> <lastreadtime> 1454502365 </lastreadtime> </chat> </unreadchatlist> <unreadfunctionlist> # 未讀的功能帳號消息,羣發助手,漂流瓶等 </unreadfunctionlist> </op> </msg>
2) 文本消息
MsgType: 1 FromUserName: 發送方ID ToUserName: 接收方ID Content: 消息內容
3) 圖片消息
itchat 增長了 Text 鍵, 鍵值爲 下載該圖片的方法.
MsgType: 3 FromUserName: 發送方ID ToUserName: 接收方ID MsgId: 用於獲取圖片 Content: <msg> <img length="6503" hdlength="0" /> <commenturl></commenturl> </msg>
4) 小視頻消息
itchat 增長了 Text 鍵, 鍵值爲 下載該視頻的方法.
MsgType: 62 FromUserName: 發送方ID ToUserName: 接收方ID MsgId: 用於獲取小視頻 Content: <msg> <img length="6503" hdlength="0" /> <commenturl></commenturl> </msg>
5) 地理位置消息
itchat 增長了 Text 鍵, 鍵值爲 該地點的文本形式.
MsgType: 1 FromUserName: 發送方ID ToUserName: 接收方ID Content: http://weixin.qq.com/cgi-bin/redirectforward?args=xxx
6) 名片消息
itchat 增長了 Text 鍵, 鍵值爲 該調用 add_friend
須要的屬性.
MsgType: 42 FromUserName: 發送方ID ToUserName: 接收方ID Content: <?xml version="1.0"?> <msg bigheadimgurl="" smallheadimgurl="" username="" nickname="" shortpy="" alias="" imagestatus="3" scene="17" province="" city="" sign="" sex="1" certflag="0" certinfo="" brandIconUrl="" brandHomeUrl="" brandSubscriptConfigUrl="" brandFlags="0" regionCode="" /> RecommendInfo: { "UserName": "xxx", # ID "Province": "xxx", "City": "xxx", "Scene": 17, "QQNum": 0, "Content": "", "Alias": "xxx", # 微信號 "OpCode": 0, "Signature": "", "Ticket": "", "Sex": 0, # 1:男, 2:女 "NickName": "xxx", # 暱稱 "AttrStatus": 4293221, "VerifyFlag": 0 }
7) 語音消息
itchat 增長了 Text 鍵, 鍵值爲 下載該語音文件的方法.
MsgType: 34 FromUserName: 發送方ID ToUserName: 接收方ID MsgId: 用於獲取語音 Content: <msg> <voicemsg endflag="1" cancelflag="0" forwardflag="0" voiceformat="4" voicelength="1580" length="2026" bufid="216825389722501519" clientmsgid="49efec63a9774a65a932a4e5fcd4e923filehelper174_1454602489" fromusername="" /> </msg>
8) 動畫表情
itchat添加了Text鍵,鍵值爲下載該圖片表情的方法。
因爲版權問題,部分微信商店提供的表情是沒法下載的,注意。
MsgType: 47 FromUserName: 發送方ID ToUserName: 接收方ID Content: <msg> <emoji fromusername = "" tousername = "" type="2" idbuffer="media:0_0" md5="e68363487d8f0519c4e1047de403b2e7" len = "86235" productid="com.tencent.xin.emoticon.bilibili" androidmd5="e68363487d8f0519c4e1047de403b2e7" androidlen="86235" s60v3md5 = "e68363487d8f0519c4e1047de403b2e7" s60v3len="86235" s60v5md5 = "e68363487d8f0519c4e1047de403b2e7" s60v5len="86235" cdnurl = "http://emoji.qpic.cn/wx_emoji/eFygWtxcoMF8M0oCCsksMA0gplXAFQNpiaqsmOicbXl1OC4Tyx18SGsQ/" designerid = "" thumburl = "http://mmbiz.qpic.cn/mmemoticon/dx4Y70y9XctRJf6tKsy7FwWosxd4DAtItSfhKS0Czr56A70p8U5O8g/0" encrypturl = "http://emoji.qpic.cn/wx_emoji/UyYVK8GMlq5VnJ56a4GkKHAiaC266Y0me0KtW6JN2FAZcXiaFKccRevA/" aeskey= "a911cc2ec96ddb781b5ca85d24143642" ></emoji> <gameext type="0" content="0" ></gameext> </msg>
9) 普通連接或應用分享消息
MsgType: 49 AppMsgType: 5 FromUserName: 發送方ID ToUserName: 接收方ID Url: 連接地址 FileName: 連接標題 Content: <msg> <appmsg appid="" sdkver="0"> <title></title> <des></des> <type>5</type> <content></content> <url></url> <thumburl></thumburl> ... </appmsg> <appinfo> <version></version> <appname></appname> </appinfo> </msg>
10) 音樂連接消息
MsgType: 49 AppMsgType: 3 FromUserName: 發送方ID ToUserName: 接收方ID Url: 連接地址 FileName: 音樂名 AppInfo: # 分享連接的應用 { Type: 0, AppID: wx485a97c844086dc9 } Content: <msg> <appmsg appid="wx485a97c844086dc9" sdkver="0"> <title></title> <des></des> <action></action> <type>3</type> <showtype>0</showtype> <mediatagname></mediatagname> <messageext></messageext> <messageaction></messageaction> <content></content> <contentattr>0</contentattr> <url></url> <lowurl></lowurl> <dataurl> http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&guid=ffffffffc104ea2964a111cf3ff3edaf&fromtag=46 </dataurl> <lowdataurl> http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&guid=ffffffffc104ea2964a111cf3ff3edaf&fromtag=46 </lowdataurl> <appattach> <totallen>0</totallen> <attachid></attachid> <emoticonmd5></emoticonmd5> <fileext></fileext> </appattach> <extinfo></extinfo> <sourceusername></sourceusername> <sourcedisplayname></sourcedisplayname> <commenturl></commenturl> <thumburl> http://imgcache.qq.com/music/photo/album/63/180_albumpic_143163_0.jpg </thumburl> <md5></md5> </appmsg> <fromusername></fromusername> <scene>0</scene> <appinfo> <version>29</version> <appname>搖一搖搜歌</appname> </appinfo> <commenturl></commenturl> </msg>
11) 羣消息
itchat 增長了三個羣聊相關的鍵值:
isAt
: 判斷是否 @ 本號ActualNickName
: 實際 NickName-
Content
: 實際 ContentMsgType: 1 FromUserName: @@xxx ToUserName: @xxx Content: @xxx:<br/>xxx
12) 紅包消息
MsgType: 49 AppMsgType: 2001 FromUserName: 發送方ID ToUserName: 接收方ID Content: 未知
13) 系統消息
MsgType: 10000 FromUserName: 發送方ID ToUserName: 本身ID Content: "你已添加了 xxx ,如今能夠開始聊天了。" "若是陌生人主動添加你爲朋友,請謹慎覈實對方身份。" "收到紅包,請在手機上查看"
六. 帳號類型
itchat 爲三種帳號都提供了 總體獲取方法與搜索方法.
羣聊多出了獲取用戶列表方法以及建立羣聊,增長/刪除用戶的方法.
1. 好友
-
get_friends
: 返回完整的好友列表- 每一個好友爲一個字典, 其中第一項爲本人的帳號信息;
- 傳入 update=True, 將更新好友列表並返回,
get_friends(update=True)
.
-
search_friends
: 好友搜索, 有四種搜索方式-
僅獲取本身的用戶信息
# 獲取本身的用戶信息,返回本身的屬性字典 itchat.search_friends()
-
獲取特定
UserName
的用戶信息# 獲取特定UserName的用戶信息 itchat.search_friends(userName='@abcdefg1234567')
-
獲取備註,微信號, 暱稱中的任何一項等於
name
鍵值的用戶. (能夠與下一項配置使用.)# 獲取任何一項等於name鍵值的用戶 itchat.search_friends(name='littlecodersh')
-
獲取備註,微信號, 暱稱分別等於相應鍵值的用戶. (能夠與上一項配置使用.)
# 獲取分別對應相應鍵值的用戶 itchat.search_friends(wechatAccount='littlecodersh') # 3、四項功能能夠一同使用 itchat.search_friends(name='LittleCoder機器人', wechatAccount='littlecodersh')
-
-
update_friend
: 好友更新- 特定用戶: 傳入用戶
UserName
, 返回指定用戶的最新信息. -
用戶列表: 傳入
UserName
組成的列表, 返回用戶最新信息組成的列表.memberList = itchat.update_friend('@abcdefg1234567')
- 特定用戶: 傳入用戶
2. 公衆號
-
get_mps
: 將返回完整的工做號列表.- 每一個公衆號爲一個字典,
- 傳入
update=True
將更新公衆號列表, 並返回.
-
search_mps
: 有兩種搜索方法:-
獲取特定
UserName
的公衆號# 獲取特定UserName的公衆號,返回值爲一個字典 itchat.search_mps(userName='@abcdefg1234567')
-
獲取名字中還有特定字符的公衆號.
# 獲取名字中含有特定字符的公衆號,返回值爲一個字典的列表 itchat.search_mps(name='LittleCoder')
-
當兩項都是勇士, 將僅返回特定
UserName
的公衆號.
-
3. 羣聊
-
get_chatrooms
: 返回完整的羣聊列表. -
search_chatrooms
: 羣聊搜索. -
update_chatroom
: 獲取羣聊用戶列表或更新該羣聊.羣聊在首次獲取中不會獲取羣聊的用戶列表, 因此須要調用該命令才能獲取羣聊成員.
- 傳入羣聊的
UserName
, 返回特定羣聊的詳細信息. -
傳入
UserName
組成的列表, 返回指定用戶的最新信息組成的列表.memberList = itchat.update_chatroom('@@abcdefg1234567', detailedMember=True)
- 傳入羣聊的
-
建立羣聊,增長/刪除羣聊用戶:
- 因爲以前經過羣聊檢測是否被好友拉黑的程序, 目前這三個方法都被嚴格限制了使用頻率.
- 刪除羣聊須要本帳號爲管理員, 不然無效.
- 將用戶加入羣聊有
直接加入
與發送邀請
, 經過useInvitation
設置. -
超過 40 人的羣聊沒法使用直接加入的加入方式.
memberList = itchat.get_frients()[1:] # 建立羣聊, topic 鍵值爲羣聊名稱. chatroomUserName = itchat.create_chatroom(memberList, "test chatroom") # 刪除羣聊內的用戶 itchat.delete_member_from_chatroom(chatroomUserName, memberList[0]) # 增長用戶進入羣聊. itchat.add_member_into_chatroom(chatroomUserName, memberList[0], useInvitation=False)
4. Uins : 經過Uin惟一的肯定好友與羣聊。
Uin 是微信中用於標識用戶的方式, 每個用戶/羣聊都有惟一且不一樣的 Uin.
經過 Uin, 即便退出了從新登陸, 也能夠輕鬆的確認正在對話的是上一次登陸的哪個用戶.
Uin 與其餘值不一樣, 微信後臺作了一些限制, 必須經過特殊的操做才能獲取. 首次點開登陸用的手機端的某個好友或者羣聊, itchat 就能獲取到該好友或者羣聊 Uin. 若是想要經過程序獲取, 能夠用程序將某個好友或者羣聊置頂(取消置頂).
示例程序:
import re, sys, json import itchat from itchat.content import * itcaht.auto_login() @itchat.msg_register(SYSTEM) def get_uin(msg): if msg["SystemInfo"] != 'unis': return ins = itchat.instanceList[0] fullContact = ins.memberList + ins.chatroomList + ins.mpList print("** Uin updated **") for username in msg["Text"]: member = itchat.utils.search_dict_list(fullContact, 'UserName', username) print(("%s: %s" % (member.get("NickName", ''), member["Uin"])).encode(sys.stdin.encoding, 'replace')) itchat.run(True)
每當 Uin 更新了, 就會打印相應的更新狀況. 一樣, 吐過但願獲取 Uin 更新的狀況, 也統過獲取SYSTEM
類型的消息實現.
七. Q & A
1. 中文文件名文件上傳
Q: 爲何中文的文件沒有辦法上傳? A: 這是因爲requests的編碼問題致使的。若須要支持中文文件傳輸,將fields.py(py3版本見這裏)文件放入requests包的packages/urllib3下便可
2. 命令行顯示二維碼
Q: 爲何我在設定了itchat.auto_login()的enableCmdQR爲True後仍是沒有辦法在命令行顯示二維碼? A: 這是因爲沒有安裝可選的包pillow,可使用右邊的命令安裝:pip install pillow
3. 如何經過itchat實現控制器
Q: 如何經過這個包將本身的微信號變爲控制器? A: 有兩種方式:發送、接受本身UserName的消息;發送接收文件傳輸助手(filehelper)的消息
八. itchat 方法彙總:
itchat.add_friend itchat.new_instance itchat.add_member_into_chatroom itchat.originInstance itchat.auto_login itchat.returnvalues itchat.check_login itchat.run itchat.components itchat.search_chatrooms itchat.config itchat.search_friends itchat.configured_reply itchat.search_mps itchat.content itchat.send itchat.core itchat.send_file itchat.Core itchat.send_image itchat.create_chatroom itchat.send_msg itchat.delete_member_from_chatroom itchat.send_raw_msg itchat.dump_login_status itchat.send_video itchat.get_chatrooms itchat.set_alias itchat.get_contact itchat.set_chatroom_name itchat.get_friends itchat.set_logging itchat.get_head_img itchat.set_pinned itchat.get_mps itchat.show_mobile_login itchat.get_msg itchat.start_receiving itchat.get_QR itchat.storage itchat.get_QRuuid itchat.update_chatroom itchat.instanceList itchat.update_friend itchat.load_login_status itchat.upload_file itchat.log itchat.utils itchat.login itchat.VERSION itchat.logout itchat.web_init itchat.msg_register