ホームページ > 記事 > WeChat アプレット > Python は itchat に基づいて WeChat グループ メッセージ同期ロボットを実装します
最近、フル スタック データ エンジニア トレーニング ガイドの WeChat グループには 500 人近くのグループがあり、異なる WeChat グループ間でメッセージを公開するために、時間をかけてメッセージ同期ロボットを作成しました。メッセージを受信すると、他のグループと同期し、さらに分析、統計、表示するためにチャット コンテンツをデータベースにアップロードします。
基本的なアイデアは、Python を使用して WeChat ログインをシミュレートすることです。グループ メッセージを受信した後、テキスト、写真、共有などのさまざまなメッセージ タイプが個別に処理され、他のグループに転送されます。
準備
まず、コードシミュレーションログイン用のWeChat IDが必要です。 WeChat ID は自分で保持する必要があり、現在 WeChat に登録するには携帯電話番号が必要なので、特別な電子メール アカウントを作成し、それを使用して新しい WeChat ID を申請する必要がありました。 WeChatの登録にはAliアカウントも使えるようですが、再利用やセキュリティリスクがあると聞いたので私は使っていません。
次に、Python ライブラリ itchat を使用する必要があります。このライブラリはコードを使用して既に準備されています。公式ドキュメントはここにあります。
pip install itchat
私の携帯電話はデュアル SIM カードとデュアル スタンバイをサポートしているので、両方の SIM カードを電話機に取り付け、WeChat を開き、両方の WeChat ID を同時にオンラインに保ち、コードを書き始めるところでした。 itchat を使用して WeChat を呼び出すのは、主に WeChat Web バージョンへのログインをシミュレートするためです。そのため、携帯電話の WeChat がログアウトされると、そのアカウントは Web、PC、MAC、IPAD で認証されるため、WeChat ID 電話をオンラインにしておく必要があります。他の対応する端末もログアウトされます。
初期試行
itchat がいくつかの公式コードを提供しています。ラップトップまたはコンピューターで新しい py ファイルを作成し、予備的に試してみましょう。
次のコードを実行すると、QR コードが表示され、コードをスキャンしてログインすると、「ファイル転送アシスタント」にメッセージが送信されます。
# 加载包 import itchat # 登陆 itchat.auto_login() # 发送文本消息,发送目标是“文件传输助手” itchat.send('Hello, filehelper', toUserName='filehelper')
次のコードは、メッセージ応答イベントを登録して、テキスト メッセージを受信した後の処理方法を定義します。 itchatでは、テキスト、写真、名刺、場所、通知、共有、ファイルなどのさまざまなメッセージタイプが定義されており、異なる処理を個別に実行できます。
import itchat # 注册消息响应事件,消息类型为itchat.content.TEXT,即文本消息 @itchat.msg_register(itchat.content.TEXT) def text_reply(msg): # 返回同样的文本消息 return msg['Text'] itchat.auto_login() # 绑定消息响应事件后,让itchat运行起来,监听消息 itchat.run()
他のタイプのメッセージを処理する方法を見てみましょう。メッセージ応答イベント内のメッセージを出力して、どのようなフィールドがあるかを確認できます。
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()
メッセージ同期ロボットの開発
上記のサンプルコードの後、メッセージ同期ロボットの開発アイデアを要約できます:
すべてを保存するために使用されるグループと呼ばれる辞書を維持します。グループ チャットを同期する必要があるメッセージ。キーはグループ チャットの ID、値はグループ チャットの名前です。
グループ チャット メッセージを受信する場合、メッセージが同期する必要があるグループ チャットからのものである場合。同期されると、メッセージ タイプに従って処理され、同期が必要な他のグループ チャットに転送されます。
まず、メッセージ応答関数を定義します。対象となるテキスト メッセージは、グループ チャットからのものであることを指定します。間違い。
@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)
写真などのマルチメディアメッセージを扱いましょう。
# 处理图片和视频类消息 @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)
上記のコードは、テキスト、共有、写真、ビデオの 4 種類のメッセージの処理を実装しています。他の種類のメッセージにも興味がある場合は、それに応じて処理してください。前にインポート コードを追加し、後ろにログイン コードと実行コードを追加すれば完了です。
結果表示
これで、2 つのグループ間のメッセージが同期され、最終的に最初のグループと 2 番目のグループの友達が楽しくチャットできるようになります (グループのリーダーになるのは簡単ではなく、頻繁にメッセージを送信する必要があります)赤い封筒がたくさん出てきました = =)。
さらなる作業
もちろん、このような py コードをラップトップで常に実行できるわけではないので、単にサーバーにデプロイして実行するだけで、画面を開いたり、使用したりできます。パイソン。アカウントが時々オフラインになる場合は、もう一度実行してください。
さらに、メッセージに応答するときに、対応するデータをサーバーに POST し、さらに分析、統計、表示するためにデータベースに保存する API も作成しました。 . 責任〜
以上がこの記事の全内容です、皆様の学習に役立つことを願っております。また、皆様にも PHP 中国語ウェブサイトをサポートしていただければ幸いです。
itchat に基づいて WeChat グループ メッセージ同期ロボットを実装する Python に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。