Estamos escribiendo un chat bot para VKontakte en python usando longpoll. Segunda parte Dobles lazos, excepciones y otras herejías

Saludos, Habr. Este artículo es una continuación de este . Antes de leer, le recomiendo que lo lea si no lo ha hecho antes.

Hoy aprenderás:

  1. Cómo obtener más de una respuesta, aunque sea una granja colectiva
  2. Cómo conectar un traductor Yandex a esto
  3. Y cómo escribirle al usuario que hizo todo mal

Traductor Api Yandex


El traductor Yandex tiene una buena API y la usaremos. Estudiamos cuidadosamente la documentación y vamos a la batalla. Pero aquí Yandex nos pone un cerdo.
Requisitos para usar los resultados de traducción
De acuerdo con la Licencia para usar Yandex.Translator, el texto traducido por el servicio Yandex.Translator con un enlace activo a la página translate.yandex.ru debe indicarse arriba o debajo del resultado de la traducción.

Requisitos de diseño de texto
El texto debe especificarse:
en la descripción del producto de software;
Ayuda para un producto de software
en el sitio web oficial del producto de software;
en todas las páginas o pantallas donde se utilizan datos de servicio.
Bueno, no somos personas orgullosas, sobreviviremos.

Como funciona


El usuario nos escribe un mensaje, le preguntamos en qué idioma quiere traducir la frase. Después pedimos que se traduzca el texto y se envíe el resultado.

Implementación técnica


Obtenga la clave de la API
Usamos esta biblioteca

from yandex_translate import YandexTranslate #  translate = YandexTranslate('  ') 

Pateamos Longpoll como describí en la primera parte.

 if event.text == '': #     "" if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  ?   .\n :  - ru,  - en' #C  "  ?   .\n :  - ru,  - en".       ) elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  ?   .\n :  - ru,  - en' ) flag = 0 #     2-  for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #     trTo = event.text #    if event.from_user: vk.messages.send( #  user_id=event.user_id, message=' ,    ' ) elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message=' ,    ' ) for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text: #     trNormal = 1 #    try: #,     trFrom = translate.detect(event.text) #  trResult = translate.translate(event.text, trFrom + '-' + trTo) # except Exception as e: # -    trNormal = 0 #   print("Exception:", e) #   pass if trNormal == 1: #   if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  «.» translate.yandex.ru\n' + str(trResult['text']) ) flag = 1 #  2-  break elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  «.» translate.yandex.ru\n' + str(trResult['text']) ) flag = 1 break if trNormal == 0: #   if event.from_user: vk.messages.send( #  user_id=event.user_id, message='  ' #..    99%  - ,          ) flag = 1 #  2-  break elif event.from_chat: vk.messages.send( # ,    chat_id=event.chat_id, message='  ' ) flag = 1 break if flag == 1: #     2-  break 

¿Qué son las excepciones y qué comen?


Excepciones: esto es tal que, en caso de error, se ejecuta y nos informa al respecto. Para el manejo de excepciones, se usa try - except construct.

Intentemos implementar nuestro código sin esta construcción.

-Traducción
-¿Qué idioma? Indicar en dos letras.
Por ejemplo: ruso - ru, inglés - en
-en
-Ingrese la frase que desea traducir
-Hola Habr
-Traducido por el servicio Yandex.Translator translate.yandex.ru
['Hola Habr']

Bueno, funciona, y ¿por qué necesitamos sus excepciones?

Pero por qué:
-Traducción
-¿Qué idioma? Indicar en dos letras.
Por ejemplo: ruso - ru, inglés - en
-abracadabra
-Ingrese la frase que desea traducir
-Hola Habr
...

Mientras tanto, en la consola:

 Traceback (most recent call last): File "C:\Py_trash\habrex.py", line 112, in <module> main() File "C:\Py_trash\habrex.py", line 78, in main trResult = translate.translate(event.text, trFrom + '-' + trTo) File "C:\Users\Hukuma\AppData\Local\Programs\Python\Python37-32\lib\site-packages\yandex_translate\__init__.py", line 150, in translate raise YandexTranslateException(status_code) yandex_translate.YandexTranslateException: None 

Y con excepciones:

-Traducción
-¿Qué idioma? Indicar en dos letras.
Por ejemplo: ruso - ru, inglés - en
-Abracadabra
-Ingrese la frase que desea traducir
-Hola Habr
- Idioma ingresado incorrectamente

Veré el intento, excepto la construcción con más detalle:

 try: #sample code except Exception: #       

Daré un ejemplo con la API de Wikipedia:

  try: result = str(wikipedia.summary(event.text)) except wikipedia.exceptions.PageError: print('  ') except wikipedia.exceptions.DisambiguationError: print('') 

Como entiendes, puede haber varias excepciones.

En esto te digo adiós. Todo lo mejor

Source: https://habr.com/ru/post/es428790/


All Articles