versión en inglés
itchat es una interfaz de cuenta personal de WeChat de código abierto. Nunca ha sido tan fácil llamar a WeChat usando Python.
Con menos de treinta líneas de código, puedes completar un bot de WeChat que pueda manejar toda la información.
Por supuesto, el uso de esta API es mucho más que un simple robot, y hay más funciones esperando que las descubras, como estas.
Esta interfaz comparte un método de operación similar con la interfaz de cuenta pública itchatmp, y puede aprender a dominar dos herramientas a la vez.
Hoy en día, WeChat se ha convertido en una parte importante de la interacción social personal. Espero que este proyecto pueda ayudarlo a expandir su cuenta personal de WeChat y facilitarle la vida.
Puedes instalar itchat con este comando:
pip install itchat
Con itchat, si deseas enviar un mensaje al asistente de transferencia de archivos, simplemente haz esto:
import itchat
itchat . auto_login ()
itchat . send ( 'Hello, filehelper' , toUserName = 'filehelper' )
Si desea responder a un mensaje de texto que le enviaron a usted mismo, simplemente haga esto:
import itchat
@ itchat . msg_register ( itchat . content . TEXT )
def text_reply ( msg ):
return msg . text
itchat . auto_login ()
itchat . run ()
Algunas aplicaciones avanzadas se pueden ver en el código fuente y las aplicaciones avanzadas del robot de código abierto a continuación, o también puede leer la documentación.
Este es un pequeño robot de código abierto basado en este proyecto. Es mejor escucharlo que verlo. Si está interesado, puede probarlo.
Debido a que el número de amigos está creciendo demasiado rápido, la demostración de la función de pasar automáticamente la verificación de amigos se cierra temporalmente.
Al imprimir el usuario de itchat y los parámetros del mensaje de registro, puede encontrar que estos valores son todos diccionarios.
Pero, de hecho, itchat ha construido cuidadosamente mensajes, usuarios, chats grupales y cuentas públicas correspondientes.
Se puede acceder a todos sus valores clave de esta manera:
@ itchat . msg_register ( TEXT )
def _ ( msg ):
# equals to print(msg['FromUserName'])
print ( msg . fromUserName )
El nombre del atributo es la primera letra minúscula del valor clave.
author = itchat . search_friends ( nickName = 'LittleCoder' )[ 0 ]
author . send ( 'greeting, littlecoder!' )
A través del siguiente código, WeChat ya puede obtener y responder diversa información diaria.
import itchat , time
from itchat . content import *
@ itchat . msg_register ([ TEXT , MAP , CARD , NOTE , SHARING ])
def text_reply ( msg ):
msg . user . send ( '%s: %s' % ( msg . type , msg . text ))
@ itchat . msg_register ([ PICTURE , RECORDING , ATTACHMENT , VIDEO ])
def download_files ( msg ):
msg . download ( msg . fileName )
typeSymbol = {
PICTURE : 'img' ,
VIDEO : 'vid' , }. get ( msg . type , 'fil' )
return '@%s@%s' % ( typeSymbol , msg . fileName )
@ itchat . msg_register ( FRIENDS )
def add_friend ( msg ):
msg . user . verify ()
msg . user . send ( 'Nice to meet you!' )
@ itchat . msg_register ( TEXT , isGroupChat = True )
def text_reply ( msg ):
if msg . isAt :
msg . user . send ( u'@%s u2005 I received: %s' % (
msg . actualNickName , msg . text ))
itchat . auto_login ( True )
itchat . run ( True )
Puede utilizar la línea de comando para mostrar el código QR al iniciar sesión con el siguiente comando:
itchat . auto_login ( enableCmdQR = True )
Algunos sistemas pueden tener diferentes anchos de caracteres, que se pueden ajustar asignando enableCmdQR a un múltiplo específico:
# 如部分的linux系统,块字符的宽度为一个字符(正常应为两字符),故赋值为2
itchat . auto_login ( enableCmdQR = 2 )
El color de fondo predeterminado de la consola es oscuro (negro). Si el color de fondo es claro (blanco), a enableCmdQR se le puede asignar un valor negativo:
itchat . auto_login ( enableCmdQR = - 1 )
Inicie sesión mediante el siguiente comando Incluso si el programa está cerrado, puede volver a abrirlo dentro de un cierto período de tiempo sin volver a escanear el código.
itchat . auto_login ( hotReload = True )
Utilice el método search_friends
para buscar usuarios. Hay cuatro métodos de búsqueda:
UserName
específiconame
Se pueden utilizar tres o cuatro de ellos juntos. El siguiente es un programa de muestra:
# 获取自己的用户信息,返回自己的属性字典
itchat . search_friends ()
# 获取特定UserName的用户信息
itchat . search_friends ( userName = '@abcdefg1234567' )
# 获取任何一项等于name键值的用户
itchat . search_friends ( name = 'littlecodersh' )
# 获取分别对应相应键值的用户
itchat . search_friends ( wechatAccount = 'littlecodersh' )
# 三、四项功能可以一同使用
itchat . search_friends ( name = 'LittleCoder机器人' , wechatAccount = 'littlecodersh' )
La adquisición y búsqueda de cuentas oficiales y chats grupales se describen con más detalle en la documentación.
El método de descarga de archivos adjuntos de Itchat se almacena en la clave de texto del mensaje.
El nombre del archivo enviado (el nombre de archivo predeterminado proporcionado por la imagen) se almacena en la clave FileName de msg.
El método de descarga acepta un argumento posicional disponible (incluido el nombre del archivo) y almacena el archivo en consecuencia.
@ itchat . msg_register ([ PICTURE , RECORDING , ATTACHMENT , VIDEO ])
def download_files ( msg ):
msg . download ( msg . fileName )
itchat . send ( '@%s@%s' % (
'img' if msg [ 'Type' ] == 'Picture' else 'fil' , msg [ 'FileName' ]),
msg [ 'FromUserName' ])
return '%s received' % msg [ 'Type' ]
Si no necesita descargarlo localmente y solo desea leer la cadena binaria para su posterior procesamiento, no puede pasar ningún parámetro. El método devolverá la cadena binaria de la imagen.
@ itchat . msg_register ([ PICTURE , RECORDING , ATTACHMENT , VIDEO ])
def download_files ( msg ):
with open ( msg . fileName , 'wb' ) as f :
f . write ( msg . download ())
Utilice el siguiente comando para completar múltiples operaciones abiertas:
import itchat
newInstance = itchat . new_instance ()
newInstance . auto_login ( hotReload = True , statusStorageDir = 'newInstance.pkl' )
@ newInstance . msg_register ( itchat . content . TEXT )
def reply ( msg ):
return msg . text
newInstance . run ()
El método después de completar el inicio de sesión debe asignarse en loginCallback
.
El método después de la salida debe asignarse en exitCallback
.
import time
import itchat
def lc ():
print ( 'finish login' )
def ec ():
print ( 'exit' )
itchat . auto_login ( loginCallback = lc , exitCallback = ec )
time . sleep ( 3 )
itchat . logout ()
Si no se establece el valor de loginCallback, la imagen del código QR se eliminará automáticamente y se borrará la visualización de la línea de comando.
P: ¿Cómo puedo convertir mi ID de WeChat en un controlador a través de este paquete?
R: Hay dos formas: enviar y recibir mensajes de su propio nombre de usuario; enviar y recibir mensajes del asistente de transferencia de archivos (filehelper)
P: ¿Por qué algunos de los mensajes no se envían correctamente cuando los envío?
R: Algunas cuentas no pueden enviar mensajes a sus propias cuentas. Se recomienda utilizar filehelper
en su lugar.
LittleCoder: diseño y mantenimiento de versiones de Python2 y Python3.
tempdban: protocolo, arquitectura y mantenimiento diario.
Chyroc: Completó la primera versión de la arquitectura Python3.
youfou/wxpy: excelente empaquetado de API y complementos de soporte, robot WeChat/elegante API de cuenta personal WeChat
liuwons/wxBot: robot WeChat similar basado en Python
zixia/wechaty: marco/biblioteca NodeJS del robot de cuenta personal WeChat basado en Javascript (ES6)
sjdy521/Mojo-Weixin: marco de cliente WeChat escrito en lenguaje Perl, que puede proporcionar una interfaz API basada en el protocolo HTTP a través de complementos para que otros lenguajes llamen
HanSon/vbot: robot de cuenta personal de WeChat basado en PHP7, que puede implementar fácilmente varias funciones personalizadas mediante la implementación de funciones anónimas
yaphone/itchat4j: uso de Java para ampliar las capacidades personales de identificación de WeChat
kanjielu/jeeves: robot WeChat desarrollado usando springboot
Si tiene alguna pregunta o sugerencia, puede discutirla conmigo en esta edición.
O también puedes comunicarte en gitter:
Por supuesto, también puedes unirte a nuestro nuevo grupo de discusión QQ: 549762872, 205872856