Maison  >  Article  >  Applet WeChat  >  Python implémente un robot de synchronisation des messages de groupe WeChat basé sur itchat

Python implémente un robot de synchronisation des messages de groupe WeChat basé sur itchat

高洛峰
高洛峰original
2017-02-28 09:03:533926parcourir

Récemment, le groupe WeChat de formation d'ingénieur data full-stack compte près de 500 personnes. Après avoir ouvert le deuxième groupe, afin d'ouvrir les messages entre les différents groupes WeChat, j'ai passé du temps à réaliser un robot de synchronisation de messages, qui. peut recevoir des messages dans n'importe quel groupe. Les messages sont synchronisés avec d'autres groupes et le contenu du chat est téléchargé dans la base de données pour une analyse, des statistiques et un affichage plus approfondis.

L'idée de base est d'utiliser Python pour simuler la connexion WeChat. Après avoir reçu des messages de groupe, divers types de messages tels que le texte, les images et le partage sont traités séparément et transmis à d'autres groupes.

Préparation préliminaire

Tout d'abord, vous devez disposer d'un identifiant WeChat pour la connexion par simulation de code. Comme je dois garder mon identifiant WeChat pour moi et que j'ai actuellement besoin d'un numéro de téléphone portable pour m'inscrire à WeChat, j'ai dû créer un compte de messagerie spécial et l'utiliser pour demander un nouvel identifiant WeChat. L'identifiant WeChat est honlanbot. Bien qu'il semble que vous puissiez utiliser un compte Ali pour enregistrer WeChat, j'ai entendu dire qu'il existe des risques répétés de recyclage et de sécurité, je ne l'utilise donc pas.

Deuxièmement, vous devez utiliser une bibliothèque Python itchat. Cette bibliothèque a déjà préparé la plupart des fonctions de WeChat en utilisant du code. La documentation officielle est ici.

pip install itchat

Mon téléphone prend en charge la double veille double SIM, j'ai donc installé les deux cartes dans le téléphone, ouvert WeChat et conservé deux identifiants WeChat en même temps temps Avec votre téléphone en ligne, vous pouvez presque commencer à écrire du code. Utiliser itchat pour appeler WeChat consiste principalement à simuler la connexion à la version Web de WeChat, le téléphone WeChat ID doit donc être conservé en ligne, car une fois WeChat sur le téléphone mobile déconnecté, son compte est authentifié sur le Web, PC, MAC, IPAD. et les autres terminaux correspondants seront également déconnectés.

Tentative initiale

itchat fournit du code officiel, créons un nouveau fichier py sur notre ordinateur portable ou notre ordinateur et essayons-le préliminaire.

Exécutez le code suivant, un code QR apparaîtra. Après avoir scanné le code pour vous connecter, un message sera envoyé à « l'Assistant de transfert de fichiers ».

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

Le code suivant enregistre un événement de réponse au message pour définir comment gérer le message texte après l'avoir reçu. Différents types de messages tels que le texte, les images, les cartes de visite, les emplacements, les notifications, le partage et les fichiers sont définis dans itchat et différents traitements peuvent être effectués séparément.

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

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

Voyons comment gérer d'autres types de messages. Vous pouvez imprimer un message dans l'événement de réponse au message. voir ce qu'il y a.

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

Développement d'un robot de synchronisation de messages

Après l'exemple de code ci-dessus, le développement d'un robot de synchronisation de messages Le robot peut être résumé. Idée :

  • Maintenir un dictionnaire appelé groupes. Il est utilisé pour stocker toutes les discussions de groupe qui doivent synchroniser les messages. La clé est l'ID de la discussion de groupe et le. la valeur est le nom de la discussion de groupe ;

  • Lors de la réception d'un message de discussion de groupe, si le message provient d'une discussion de groupe qui doit être synchronisée, il sera traité en fonction du message. tapez et transmis à d’autres discussions de groupe qui doivent être synchronisées.

Passons directement au code. Définissez d'abord une fonction de réponse au message. Les messages texte qui m'intéressent sont TEXT et SHARING. Utilisez isGroupChat=True pour spécifier que le message. vient de Pour les discussions de groupe, ce paramètre est par défaut 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):
      # 转发到其他需要同步消息的群聊
      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)

Parlons des messages multimédias tels que les images.

# 处理图片和视频类消息
@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)

Le code ci-dessus implémente le traitement de quatre types de messages : texte, partage, images et vidéos Si vous êtes également intéressé par d'autres types. de messages, continuez. Gérez-le simplement en conséquence. Ajoutez le code d'importation à l'avant, ajoutez le code de connexion et d'exécution à l'arrière, et vous avez terminé.

Affichage des résultats

Actuellement, les messages peuvent être synchronisés entre les deux groupes, et les amis du premier et du deuxième groupe peuvent enfin discuter librement (quand le chef du groupe ce n'est pas facile, je dois souvent distribuer beaucoup d'enveloppes rouges ==).

Python implémente un robot de synchronisation des messages de groupe WeChat basé sur itchat

Python implémente un robot de synchronisation des messages de groupe WeChat basé sur itchat

Autres travaux

Bien sûr, je ne peux pas être présent mon ordinateur portable tout le temps Pour exécuter un tel code py, déployez-le simplement sur le serveur et exécutez-le. Vous pouvez ouvrir un écran ou utiliser IPython. Si votre compte se déconnecte de temps en temps, réexécutez-le.

De plus, j'ai également écrit une API. En répondant au message, les données correspondantes seront POSTées sur mon serveur et stockées dans la base de données pour une analyse plus approfondie, des statistiques et un affichage. groupe Les responsabilités du maître ~

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun, et j'espère également que tout le monde soutiendra le site Web PHP chinois.

Pour plus d'articles basés sur Python sur le robot de synchronisation des messages de groupe WeChat basé sur itchat, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn