1. 程式人生 > >超簡單Python實現微信機器人自動回覆

超簡單Python實現微信機器人自動回覆

下面這個小文章適合初學Python的童鞋哦~~~

一個很好用的微信庫:itchat

拿使用圖靈機器人設定自動回覆,讓機器人跟微信好友傻傻的聊天,機器人比小編還會聊天尷尬,無論是對美眉還是漢紙,上來就是愛!愛!愛!簡直太辣眼睛!!!害羞用它進行來調戲微信好友,簡直6的一筆!

(記住一條!千萬不能對女票使用,遭遇一萬點傷害哭

好啦,下面就來一起看一下如何使用吧!

使用工具:itchat,requests

  1. 搭建python開發環境,這個就不用多說了嘛,可自行百度,需要注意一點的就是記得將python安裝路徑加入環境變數~

  2. 安裝itchat庫

    通過管理員許可權執行命令提示符,直接輸入以下程式碼:

    pip install itchat

    pip install requests

    然後會自動從網上下載資料自行安裝,很簡單,很傻瓜~有木有~python真的好呆萌~~~

  3. 獲取一個圖靈機器人API

    不要把API想的太複雜,就是一個介面啦,啥?你不明白啥是介面,唉呀~就是一個口子,你能進去,乾點事情或者拿點東西再出來,就這麼個東東~~(額~同學不要想多了,一不留神就開車~~吐舌頭

    實現原理:當我們獲取微信好友發來的訊息時,我們將這個訊息傳給機器人的API,然後它就會根據訊息做出答覆,然後我們再將這個訊息返回給微信好友,就OK啦!

    雖然描述的過程比較長,但是機器執行的很快,呼叫這個介面實現的過程真的特別~特別快~~~(哎呀~車輛轉彎,請抓穩扶好~~害羞害羞

    童鞋可以從下面這個官網上註冊帳號,獲取圖靈機器人的API:

    註冊成功後,我們就可以獲得下面這個api的key啦,先拿下留用!

    (小編將key打碼了,童鞋可以自行獲取無碼的key,咳咳~~害羞

  4. 程式碼實現

    說了這麼多,下面可以列程式碼了,童鞋不要緊張,程式碼很少喲~(如果程式碼讓你感覺不舒服,文章底部有整理好的原始碼,童鞋可以拿去自行玩耍。記住,不在太嗨了喲~~~)

    第一步:匯入我們需要使用的工具

    import itchat
        import requests
        import re

    第二步:定義一個獲取網頁的函式

    原理:上面我們已經提到,將微信好友發來的訊息傳送給圖靈機器人API,以下我們簡稱為小圖。而小圖實際上就是在一個網頁上執行的,下面上圖來看一下:

    其中"text"

    就表示我們要跟小圖說的話,這部分將被替換為微信好友發來的訊息,以下定義一個抓取網頁的函式:

    def getHtmlText(url):
        try:
           r = requests.get(url,timeout=30)
           r.raise_for_status()
           r.encoding = r.apparent_encoding
           return r.text
        except:
           return ""

    第三步:呼叫itchat封裝好的裝飾器

    @itchat.msg_register(['Text','Map', 'Card', 'Note', 'Sharing', 'Picture'])

    其中"Text"即表示為文字訊息,除此之外還有其他的圖片、表情等訊息,都可以將此發給小圖~它還很聰明的~~

    第四步:定義自動回覆函式

    def text_reply(msg):
       # 判斷一下發件人不是自己
         if not msg['FromUserName'] == Name["你的暱稱"]:
            url = "http://www.tuling123.com/openapi/api?key=(此處填寫您的key)&info="
            # 將獲取的資訊附在連結的尾部
            url = url + msg['Text']
            # 通過定義的網頁抓取函式獲取頁面內容
            html = getHtmlText(url)
            # 以下兩行程式碼用到了正則表示式,感興趣的同學可以查一下哦
            message = re.findall(r'\"text\"\:\".*?\"',html)
            reply = eval(message[0].split(':')[1])
            return reply

    第五步:定義一個主函式來執行它

    if __name__ == '__main__':
         #  通過itchat掃碼登入微信網頁版
         itchat.auto_login()
         #  獲取所有微信好友的資訊
         friends = itchat.get_friends(update=True)[0:]
         #  使用字典存放好友暱稱與使用者名稱
         Name = {}
         #  好友暱稱
         Nic = []
         #  好友使用者名稱
         User = []
             for i in range(len(friends)):
                 Nic.append(friends[i]["NickName"])
                 User.append(friends[i]["UserName"])
             for i in range(len(friends)):
                  Name[Nic[i]] = User[i]
                  itchat.run()

    好啦,大功告成啦,有興趣的同學可以一起玩玩看哦~下面附原始碼:

    如果內容有錯誤,請看客指出哦,謝謝啦~~~

    另外補充一下,小編真的是一位很純潔的小哥哦,嘿嘿嘿~~~

    # 原始碼如下:
    # wechat autoreply
    import itchat
    import requests
    import re
    # 抓取網頁
    def getHtmlText(url):
            try:
                    r = requests.get(url,timeout=30)
                    r.raise_for_status()
                    r.encoding = r.apparent_encoding
                    return r.text
            except:
                    return ""
    # 自動回覆
    # 封裝好的裝飾器,當接收到的訊息是Text,即文字訊息
    @itchat.msg_register(['Text','Map', 'Card', 'Note', 'Sharing', 'Picture'])
    def text_reply(msg):
        # 當訊息不是由自己發出的時候
        if not msg['FromUserName'] == Name["Jestiao"]:
            # 回覆給好友
            url = "http://www.tuling123.com/openapi/api?key=您的小圖key&info="
            url = url + msg['Text']
            html = getHtmlText(url)
            message = re.findall(r'\"text\"\:\".*?\"',html)
            reply = eval(message[0].split(':')[1])
            return reply
    
    if __name__ == '__main__':
        itchat.auto_login()
    
        # 獲取自己的UserName
        friends = itchat.get_friends(update=True)[0:]
        Name = {}
        Nic = []
        User = []
        for i in range(len(friends)):
                Nic.append(friends[i]["NickName"])
                User.append(friends[i]["UserName"])
        for i in range(len(friends)):
                Name[Nic[i]] = User[i]
        itchat.run()