30行代碼實現微信自動回覆機器人

30行代碼實現微信自動回覆機器人

1、寫在前面

今天下午又學到了itchat另外一種有趣的玩法---微信自動回覆機器人。web

程序很簡單僅僅三十行代碼左右,實現了機器人自動與你的微信好友聊天,下面是個人機器人小籠包跟本身微信好友聊天的截圖。json

img

精心準備了大量學習資料,加入千人交流羣:923414804獲取大量學習資料與入門教程。

2、程序介紹

本程序經過itchat獲取微信的相關消息,將微信消息傳輸到機器人接口(本程序使用的是圖靈),獲取機器人的返回消息。將返回消息返回給微信消息的發送人。以此實現將微信我的號變身爲聊天機器人。api

3、具體實現

安裝服務器

itchat的安裝能夠經過下面這行代碼微信

pip install itchat

登陸
itchat.auto_login() 這種方法將會經過微信掃描二維碼登陸,可是這種登陸的方式確實短期的登陸,並不會保留登陸的狀態,也就是下次登陸時仍是須要掃描二維碼。函數

# 掃描二維碼登錄微信,實際上就是經過網頁版微信登錄
    itchat.auto_login()

若是加上hotReload==True,那麼就會保留登陸的狀態,至少在後面的幾回登陸過程當中不會再次掃描二維碼,該參數生成一個靜態文件itchat.pkl用於存儲登陸狀態post

itchat.auto_login(hotReload=True)

微信信息的發送
微信能夠發送各種消息,文本、圖片、文件等,下面是具體的方法的介紹。學習

itchat.send('Message Content', 'toUserName')

該發送消息的函數須要兩個參數,消息的內容與接受者的UserName,即標識符。
用下面的代碼舉一個小栗子,實現向文件助手發送信息。測試

import itchat

itchat.auto_login(hotReload=True)
itchat.send(u'測試消息發送', 'filehelper')

微信消息的獲取

itchat 將根據接受到的消息類型尋找對應的已註冊的方法。若是一個消息類型沒有對應的註冊方法, 該消息將會被捨棄。在運行過程當中也能夠動態註冊方法, 註冊方式與結果不變。註冊方法不帶具體對象註冊, 將註冊爲普通消息的回覆方法.spa

import itchat
    from itchat.content import *
    @itchat.msg_register(TEXT)   #這裏的TEXT表示若是有人發送文本消息,那麼就會調用下面的方法
    def simple_reply(msg):
        #這個是向發送者發送消息
        itchat.send_msg('已經收到了文本消息,消息內容爲%s'%msg['Text'],toUserName=msg['FromUserName'])
        return "T reveived: %s" % msg["Text"]     #返回的給對方的消息,msg["Text"]表示消息的內容

帶對象參數註冊, 對應消息對象將調用該方法,其中isFriendChat表示好友之間,isGroupChat表示羣聊,isMapChat表示公衆號。

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))

消息類型
向註冊方法傳入的 msg 包含微信返回的字典的全部內容.itchat 增長 Text, Type(也就是參數) 鍵值, 方便操做。

itcaht.content 中包含全部的消息類型參數例如圖片、語音、名片、分享等,也對應不一樣的註冊參數:

  • 圖片對應

    itchat.content.PICTURE

  • 語音對應

    itchat.content.RECORDING

  • 名片對應

    itchat.content.CARD

其他的能夠參考官方API
https://pypi.org/project/itchat/

import itchat

@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):
    print(msg['Text'])

itchat.auto_login()
itchat.run()

經過運行上面的代碼,實現基礎的文本信息的接收。

實現與圖靈機器人的交互

實現機器人有不少種方法,最簡單的就是使用他人提供的接口。這裏以圖靈機器人爲例,演示這一功能。圖靈機器人簡單而言就是以必定的規則給圖靈的服務器發送數據包(包含你對他說的話)圖靈的服務器會以必定的規則給你返回數據包(包含他回覆你的話)

你須要一個Tuling Key來告訴圖靈服務器你有權和他對話。

18edce3ce905a4c1dbb965e6b35c3834d
2eb720a8970964f3f855d863d24406576
31107d5601866433dba9599fac1bc0083
471f28bf79c820df10d39b4074345ef8c

接下來需配置圖靈機器人

{
    'key'    : 'TULING_KEY',
    'info'   : 'YOUR_MSG',
    'userid' : 'USERID',
}

下面使用圖靈機器人向好友發送了hello

#coding=utf8
import requests

apiUrl = 'http://www.tuling123.com/openapi/api'
data = {
    'key'    : '8edce3ce905a4c1dbb965e6b35c3834d', # 若是這個Tuling Key不能用,那就換一個
    'info'   : 'hello', # 這是咱們發出去的消息
    'userid' : 'wechat-robot', # 這裏你想改什麼均可以
}
# 咱們經過以下命令發送一個post請求
r = requests.post(apiUrl, data=data).json()
# 讓咱們打印一下返回的值,看一下咱們拿到了什麼
print(r)

完整代碼:

import requests
import itchat
KEY = '8edce3ce905a4c1dbb965e6b35c3834d'

def get_response(msg):
    # 這裏實現與圖靈機器人的交互
    # 構造了要發送給服務器的數據
    apiUrl = 'http://www.tuling123.com/openapi/api'
    data = {
        'key' : KEY,
      'info' : msg,
      'userid' : 'wechat-robot',
    }
    try:
        r = requests.post(apiUrl, data=data).json()
        # 字典的get方法在字典沒有'text'值的時候會返回None而不會拋出異常
        return r.get('text')
    # 爲了防止服務器沒有正常響應致使程序異常退出,這裏用try-except捕獲了異常
    # 若是服務器沒能正常交互(返回非json或沒法鏈接),那麼就會進入下面的return
    except:
        # 將會返回一個None
        return

# 這裏實現微信消息的獲取
@itchat.msg_register(itchat.content.TEXT)
def tuling_reply(msg):
    # 爲了保證在圖靈Key出現問題的時候仍舊能夠回覆,這裏設置一個默認回覆
    defaultReply = 'I received: ' + msg['Text']
    # 若是圖靈Key出現問題,那麼reply將會是None
    reply = get_response(msg['Text'])
    # a or b的意思是,若是a有內容,那麼返回a,不然返回b
    # 有內容通常就是指非空或者非None,你能夠用`if a: print('True')`來測試
    return reply or defaultReply

# 爲了讓實驗過程更加方便(修改程序不用屢次掃碼),咱們使用熱啓動
itchat.auto_login(hotReload=True)
itchat.run()

itchat不只僅可以實現自動回覆,還有其餘的相關功能好比羣發助手,好友單刪檢測,獲取微信好友信息等功能,後續會慢慢去體驗各類玩法。

小提示:不要頻繁操做,不然會禁止登陸web微信。

相關文章
相關標籤/搜索