Heim  >  Artikel  >  WeChat-Applet  >  Python implementiert den auf itchat basierenden Roboter zur Synchronisierung von WeChat-Gruppennachrichten

Python implementiert den auf itchat basierenden Roboter zur Synchronisierung von WeChat-Gruppennachrichten

高洛峰
高洛峰Original
2017-02-28 09:03:533855Durchsuche

Vor kurzem umfasste die WeChat-Gruppe für die Ausbildung zum Full-Stack-Dateningenieur fast 500 Personen. Um die Nachrichten zwischen verschiedenen WeChat-Gruppen zu öffnen, habe ich einige Zeit damit verbracht, einen Nachrichtensynchronisierungsroboter zu erstellen kann Nachrichten in jeder Gruppe empfangen. Nachrichten werden mit anderen Gruppen synchronisiert und Chat-Inhalte werden zur weiteren Analyse, Statistik und Anzeige in die Datenbank hochgeladen.

Die Grundidee besteht darin, Python zur Simulation der WeChat-Anmeldung zu verwenden. Nach dem Empfang von Gruppennachrichten werden verschiedene Nachrichtentypen wie Text, Bilder und Teilen separat verarbeitet und an andere Gruppen weitergeleitet.

Vorbereitende Vorbereitung

Zunächst benötigen Sie eine WeChat-ID für die Anmeldung bei der Codesimulation. Da ich meine WeChat-ID für mich behalten muss und derzeit eine Mobiltelefonnummer benötige, um mich für WeChat zu registrieren, musste ich ein spezielles E-Mail-Konto erstellen und damit eine neue WeChat-ID beantragen. Obwohl es den Anschein hat, dass Sie das Ali-Konto zur Registrierung von WeChat verwenden können, habe ich gehört, dass es wiederholt Recycling- und Sicherheitsrisiken gibt, weshalb ich es nicht verwende.

Zweitens müssen Sie eine Python-Bibliothek verwenden. Diese Bibliothek hat die meisten Funktionen von WeChat bereits vorbereitet. Die offizielle Dokumentation ist hier verfügbar.

pip install itchat

Mein Telefon unterstützt Dual-SIM-Dual-Standby, also habe ich beide Karten im Telefon installiert, WeChat geöffnet und gleichzeitig zwei WeChat-IDs verwaltet Sobald Ihr Telefon online ist, können Sie fast mit dem Schreiben von Code beginnen. Die Verwendung von itchat zum Aufrufen von WeChat dient hauptsächlich dazu, die Anmeldung bei der WeChat-Webversion zu simulieren. Daher muss das WeChat-ID-Telefon online bleiben, da nach dem Abmelden von WeChat auf dem Mobiltelefon sein Konto im Web, PC, MAC, IPAD authentifiziert wird und andere entsprechende Endgeräte werden ebenfalls abgemeldet.

Erster Versuch

itchat stellt einen offiziellen Code bereit. Lassen Sie uns eine neue Py-Datei auf unserem Laptop oder Computer erstellen und einen ersten Versuch unternehmen.

Führen Sie den folgenden Code aus. Nach dem Scannen des Codes zum Anmelden wird eine Nachricht an den „Dateiübertragungsassistenten“ gesendet.

# 加载包
import itchat
# 登陆
itchat.auto_login()
# 发送文本消息,发送目标是“文件传输助手”
itchat.send('Hello, filehelper', toUserName='filehelper')

Der folgende Code registriert ein Nachrichtenantwortereignis, um zu definieren, wie mit der Textnachricht nach dem Empfang umgegangen werden soll. In itchat sind verschiedene Nachrichtentypen wie Text, Bilder, Visitenkarten, Standorte, Benachrichtigungen, Teilen und Dateien definiert und verschiedene Verarbeitungen können separat durchgeführt werden.

import itchat
# 注册消息响应事件,消息类型为itchat.content.TEXT,即文本消息
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
  # 返回同样的文本消息
  return msg['Text']

itchat.auto_login()
# 绑定消息响应事件后,让itchat运行起来,监听消息
itchat.run()

Schauen wir uns an, wie mit anderen Nachrichtentypen umgegangen wird. Sie können Nachrichten im Nachrichtenantwortereignis ausdrucken Sehen Sie, was es gibt.

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

# 处理文本类消息
# 包括文本、位置、名片、通知、分享
@itchat.msg_register([TEXT, MAP, CARD, NOTE, SHARING])
def text_reply(msg):
  # 微信里,每个用户和群聊,都使用很长的ID来区分
  # msg['FromUserName']就是发送者的ID
  # 将消息的类型和文本内容返回给发送者
  itchat.send('%s: %s' % (msg['Type'], msg['Text']), msg['FromUserName'])

# 处理多媒体类消息
# 包括图片、录音、文件、视频
@itchat.msg_register([PICTURE, RECORDING, ATTACHMENT, VIDEO])
def download_files(msg):
  # msg['Text']是一个文件下载函数
  # 传入文件名,将文件下载下来
  msg['Text'](msg['FileName'])
  # 把下载好的文件再发回给发送者
  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
# 即可保留登陆状态
# 即使程序关闭,一定时间内重新开启也可以不用重新扫码
itchat.auto_login(True)
itchat.run()

Entwicklung eines Nachrichtensynchronisationsroboters

Nach dem obigen Beispielcode erfolgt die Entwicklung einer Nachrichtensynchronisation Der Roboter kann wie folgt zusammengefasst werden:

  • Verwalten Sie ein Wörterbuch namens Gruppen. Es wird zum Speichern aller Gruppenchats verwendet, die Nachrichten synchronisieren müssen value ist der Name des Gruppenchats;

  • Wenn beim Empfang einer Gruppenchatnachricht die Nachricht von einem Gruppenchat stammt, der synchronisiert werden muss, wird sie entsprechend der Nachricht verarbeitet eingeben und an andere Gruppenchats weiterleiten, die synchronisiert werden müssen.

Definieren wir zunächst eine Nachrichtenantwortfunktion, die mich interessiert: TEXT und SHARING, um die Nachricht anzugeben kommt von: Für Gruppenchats ist dieser Parameter standardmäßig auf „Falsch“ eingestellt.

@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):
      # 转发到其他需要同步消息的群聊
      for item in groups.keys():
        if not item == source:
          # groups[source]: 消息来自于哪个群聊
          # msg['ActualNickName']: 发送者的名称
          # msg['Content']: 文本消息内容
          # item: 需要被转发的群聊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)

Befassen wir uns mit Multimedia-Nachrichten wie Bildern.

# 处理图片和视频类消息
@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:
        # 将图片或视频发送到其他需要同步消息的群聊
        itchat.send('@%s@%s' % ({'Picture': 'img', 'Video': 'vid'}.get(msg['Type'], 'fil'), msg['FileName']), item)

Der obige Code implementiert die Verarbeitung von vier Arten von Nachrichten: Text, Teilen, Bilder und Videos. Wenn Sie auch an anderen Arten interessiert sind Gehen Sie bei der Anzahl der Nachrichten wie folgt vor: Gehen Sie einfach entsprechend vor. Fügen Sie vorne den Importcode hinzu, fügen Sie hinten den Anmelde- und Laufcode hinzu, und schon sind Sie fertig.

Ergebnisanzeige

Derzeit können Nachrichten zwischen den beiden Gruppen synchronisiert werden, und Freunde in der ersten und zweiten Gruppe können endlich frei chatten (wenn der Gruppenleiter dies nicht tut). einfach, ich muss oft viele rote Umschläge verteilen = =).

Python implementiert den auf itchat basierenden Roboter zur Synchronisierung von WeChat-Gruppennachrichten

Python implementiert den auf itchat basierenden Roboter zur Synchronisierung von WeChat-Gruppennachrichten

Weitere Arbeiten

Natürlich kann ich nicht dabei sein ständig auf meinem Laptop. Um solchen Py-Code auszuführen, stellen Sie ihn einfach auf dem Server bereit und führen Sie ihn aus. Sie können einen Bildschirm öffnen oder IPython verwenden. Wenn Ihr Konto gelegentlich offline geht, führen Sie es einfach erneut aus.

Zusätzlich habe ich auch eine API geschrieben, bei der die entsprechenden Daten an meinen Server gesendet und zur weiteren Analyse, Statistik und Anzeige gespeichert werden Gruppe Die Verantwortlichkeiten des Meisters~

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird, und ich hoffe auch, dass jeder die chinesische PHP-Website unterstützt.

Weitere Artikel zur Python-Implementierung des auf itchat basierenden WeChat-Gruppennachrichten-Synchronisierungsroboters finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn