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.
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 debot
. Aquí tienes un código de muestra: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ódulowebbrowser
.Nota: Asegúrate de haber instalado la biblioteca
telethon
y haber añadido tu API_ID, API_HASH y BOT_TOKEN.