es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar qué parte del mensaje de texto tiene un enlace anidado y abrirlo?

Mensaje de texto de ejemplo que recibí en Telegram:

Escucha la mejor música: Ava Max – My Head & My Heart

Mi pregunta es, ¿cómo puede mi script verificar el mensaje y eventualmente abrir el sitio a través del enlace anidado? Intenté:

for entity in event.message.text:
    if isinstance(entity, MessageEntityTextUrl):
        open_url(entity.url)

pero sin suerte: el script no abre el enlace.

//Editar
Implementé la solución de watzon:

async def my_event_handler(event):
    msg = event.message.message
    for _, inner_text in msg.get_entities_text(MessageEntityTextUrl):
        open_url(inner_text)

y ahora el error es:

...en my_event_handler
    for _, inner_text in msg.get_entities_text(MessageEntityTextUrl):
AttributeError: el objeto 'str' no tiene ningún atributo 'get_entities_text'

Debo haber pasado por alto un error aquí, ¿qué debo cambiar en el mensaje (msg)?

//Editar2

msg = event.message

corrigió el error, pero aún no obtengo el enlace como salida.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para comprobar si hay un enlace anidado en un mensaje de Telegram y abrirlo en Python, puedes utilizar la biblioteca telethon, que es una biblioteca MTProto de Python 3 para interactuar con la API de Telegram como usuario o a través de una cuenta de bot. Aquí tienes un código de muestra:

    from telethon import TelegramClient, events
    import webbrowser
    
    # tu API_ID, API_HASH y BOT_TOKEN obtenidos de Telegram
    API_ID = TU_API_ID
    API_HASH = 'TU_API_HASH'
    BOT_TOKEN = 'TU_BOT_TOKEN'
    
    client = TelegramClient('nombre_sesion', API_ID, API_HASH).start(bot_token=BOT_TOKEN)
    
    # definiendo un controlador de eventos para manejar mensajes entrantes
    @client.on(events.NewMessage)
    async def mi_controlador_de_eventos(evento):
        # obtener el texto del mensaje
        msg = evento.message.message
    
        # recorrer las entidades en el mensaje
        for entidad in evento.message.entities:
            # comprobar si la entidad es una URL
            if isinstance(entidad, MessageEntityUrl):
                # obtener el texto del URL del mensaje
                texto_url = msg[entidad.offset:entidad.offset+entidad.length]
                # abrir el URL en el navegador
                webbrowser.open(texto_url)
    
    # ejecutar el cliente
    client.run_until_disconnected()
    

    En este código, definimos un controlador de eventos para manejar mensajes entrantes. Utilizando la biblioteca telethon, podemos extraer fácilmente el texto del mensaje y recorrer las entidades en el mensaje. Comprobamos si la entidad es una URL y, si es así, extraemos el texto del URL del mensaje utilizando el desplazamiento y la longitud de la entidad. Finalmente, abrimos el URL en el navegador utilizando el módulo webbrowser.

    Nota: Asegúrate de haber instalado la biblioteca telethon y haber añadido tu API_ID, API_HASH y BOT_TOKEN.

Comments are closed.