亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 微信小程式 微信開發(fā) python基於itchat實現(xiàn)微信群訊息同步機器人

python基於itchat實現(xiàn)微信群訊息同步機器人

Feb 28, 2017 am 09:03 AM

最近全端資料工程師養(yǎng)成攻略的微信群已經(jīng)將近500人,開了二群之後為了打通不同微信群之間的消息,花了點時間做了個訊息同步機器人,在任意群收到訊息時同步到其他群,並將聊天內容上傳至資料庫,以便進一步分析、統(tǒng)計和展示。

基本想法是,用 Python 模擬微信登陸,接收群組裡訊息後,分別對文字、圖片、分享等各類別訊息類型進行處理,並轉發(fā)至其他群組。

前期準備

首先得有一個微訊號,用於程式碼模擬登陸。由於我的微訊號得自己留著用,現(xiàn)階段註冊微信又必須要手機號,於是只好特意辦了個電訊號,用來申請了一個新的微信,微訊號是 honlanbot。雖說似乎可以用阿里小號來註冊微信,不過聽說有反覆回收和安全隱患問題,故不採用。

其次,需要用到一個Python庫 itchat,這個函式庫已經(jīng)做好了用程式碼呼叫微信的大多數(shù)功能,非常好用,官方文件在這裡,安裝的時候使用 pip 即可。

pip install itchat

我的手機支援雙卡雙待,於是把兩張卡都裝手機裡,再雙開微信,同時保持兩個微訊號手機在線,差不多就可以開始寫程式了。用 itchat 呼叫微信主要是模擬微信網(wǎng)頁版登陸,所以必須保持微訊號手機在線,因為手機端微信一旦退出,其在網(wǎng)頁、PC、MAC、IPAD等相應終端認證的帳號也會隨之退出。

初步嘗試

itchat 提供了一些官方程式碼,讓我們在自己的本本或電腦上新建一個 py 文件,初步嘗試一下。

執(zhí)行以下程式碼,會出現(xiàn)一張二維碼,在掃碼登陸之後會傳送訊息給「檔案傳輸助理」。

# 加載包
import itchat
# 登陸
itchat.auto_login()
# 發(fā)送文本消息,發(fā)送目標是“文件傳輸助手”
itchat.send('Hello, filehelper', toUserName='filehelper')

以下程式碼則註冊了一個訊息回應事件,用來定義接收到文字訊息後如何處理。在 itchat 裡定義了文字、圖片、名片、位置、通知、分享、文件等多種訊息類型,可以分別執(zhí)行不同的處理。

import itchat
# 注冊消息響應事件,消息類型為itchat.content.TEXT,即文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
  # 返回同樣的文本消息
  return msg['Text']

itchat.auto_login()
# 綁定消息響應事件后,讓itchat運行起來,監(jiān)聽消息
itchat.run()

再來看看如何處理其他類型訊息,可以把在訊息回應事件裡把msg 印出來,是字典,看看有哪些感興趣的字段。

import itchat
# import全部消息類型
from itchat.content import *

# 處理文本類消息
# 包括文本、位置、名片、通知、分享
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
  # 微信里,每個用戶和群聊,都使用很長的ID來區(qū)分
  # msg['FromUserName']就是發(fā)送者的ID
  # 將消息的類型和文本內容返回給發(fā)送者
  itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName'])

# 處理多媒體類消息
# 包括圖片、錄音、文件、視頻
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
  # msg['Text']是一個文件下載函數(shù)
  # 傳入文件名,將文件下載下來
  msg['Text'](msg['FileName'])
  # 把下載好的文件再發(fā)回給發(fā)送者
  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'])

# 處理群聊消息
@itchat.msg_register(TEXT, isGroupChat=True)
def text_reply(msg):
  if msg['isAt']:
    itchat.send(u'@%s\u2005I received: %s' % (msg['ActualNickName'], msg['Content']), msg['FromUserName'])

# 在auto_login()里面提供一個True,即hotReload=True
# 即可保留登陸狀態(tài)
# 即使程序關閉,一定時間內重新開啟也可以不用重新掃碼
itchat.auto_login(True)
itchat.run()

#開發(fā)訊息同步機器人

經(jīng)過上述範例程式碼,可以總結出訊息同步機器人的開發(fā)想法:

  • 維護一個字典,叫做groups 好了,用來存所有需要同步訊息的群聊,key 為群聊的ID,value 為群聊的名稱;

  • 接收到群組聊天訊息時,如果訊息來自於需要同步訊息的群組聊天,就根據(jù)訊息類型處理,同時轉送到其他需要同步的群組聊天。

直接上程式碼好了,先定義一個訊息回應函數(shù),文字類別訊息我感興趣的是TEXT 和SHARING 兩類,使用isGroupChat=True 指定訊息來自於群聊,這個參數(shù)預設為False。

@itchat.msg_register([TEXT, SHARING], isGroupChat=True)
def group_reply_text(msg):
  # 獲取群聊的ID,即消息來自于哪個群聊
  # 這里可以把source打印出來,確定是哪個群聊后
  # 把群聊的ID和名稱加入groups
  source = msg['FromUserName']

  # 處理文本消息
  if msg['Type'] == TEXT:
    # 消息來自于需要同步消息的群聊
    if groups.has_key(source):
      # 轉發(fā)到其他需要同步消息的群聊
      for item in groups.keys():
        if not item == source:
          # groups[source]: 消息來自于哪個群聊
          # msg['ActualNickName']: 發(fā)送者的名稱
          # msg['Content']: 文本消息內容
          # item: 需要被轉發(fā)的群聊ID
          itchat.send('%s: %s\n%s' % (groups[source], msg['ActualNickName'], msg['Content']), item)
  # 處理分享消息
  elif msg['Type'] == SHARING:
    if groups.has_key(source):
      for item in groups.keys():
        if not item == source:
          # msg['Text']: 分享的標題
          # msg['Url']: 分享的鏈接
          itchat.send('%s: %s\n%s\n%s' % (groups[source], msg['ActualNickName'], msg['Text'], msg['Url']), item)

再來處理下圖片等多媒體類別訊息。

# 處理圖片和視頻類消息
@itchat.msg_register([PICTURE, VIDEO], isGroupChat=True)
def group_reply_media(msg):
  source = msg['FromUserName']

  # 下載圖片或視頻
  msg['Text'](msg['FileName'])
  if groups.has_key(source):
    for item in groups.keys():
      if not item == source:
        # 將圖片或視頻發(fā)送到其他需要同步消息的群聊
        itchat.send('@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName']), item)

以上程式碼實現(xiàn)了對文字、分享、圖片、影片四類訊息的處理,如果對其他類型的訊息也感興趣,進行相應的處理即可。在前面補上 import 的程式碼,在後面補上登陸和運行的程式碼,就大功告成了。

成果展示

目前兩個群之間可以進行訊息同步了,一群和二群的小夥伴終於可以暢快地聊了起來(當群主不容易,常常要發(fā)很多紅包= =)。

python基於itchat實現(xiàn)微信群訊息同步機器人

python基於itchat實現(xiàn)微信群訊息同步機器人

進一步工作

當然,我不可能一直在筆記本上運行這麼個py 程式碼,所以把它部署到伺服器上運行就好了,開個screen 或用IPython 都可以。如果帳號偶爾下線了,再運行一下就好。

另外,我還寫了個API,回應訊息的時候會把對應的資料POST 到我的伺服器並存到資料庫,以便進一步的分析、統(tǒng)計和展示,這也是我身為一個群主應盡的職責~

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網(wǎng)。

更多python基於itchat實作微信群組訊息同步機器人相關文章請關注PHP中文網(wǎng)站!

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72