itchat的使用

python 微信接口 -- itchat 文檔

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 : 實際 NickName
  • Content : 實際 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&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;fromtag=46
            </dataurl>
            <lowdataurl>
                http://ws.stream.qqmusic.qq.com/C100003i9hMt1bgui0.m4a?vkey=6867EF99F3684&amp;guid=ffffffffc104ea2964a111cf3ff3edaf&amp;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 : 實際 Content

    MsgType: 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

九. Github

itchat

django之零--入門篇
AngularJS高級程序設計讀書筆記--jqLite
相關文章
相關標籤/搜索