Nous écrivons un chat bot pour VKontakte en python en utilisant longpoll. Deuxième partie Boucles doubles, exceptions et autres hérésies

Salutations, Habr. Cet article est une continuation de celui-ci . Avant de lire, je vous recommande fortement de le lire si vous ne l'avez pas déjà fait auparavant.

Aujourd'hui, vous apprendrez:

  1. Comment obtenir plus d'une réponse, bien que la ferme collective
  2. Comment connecter un traducteur Yandex à ce
  3. Et comment écrire à l'utilisateur qu'il a tout fait de travers

Traducteur Api Yandex


Le traducteur Yandex a une bonne API et nous l'utiliserons. Nous étudions attentivement la documentation et partons au combat. Mais ici, Yandex nous met un cochon.
Conditions requises pour utiliser les résultats de la traduction
Selon la licence d'utilisation de Yandex.Translator, le texte traduit par le service Yandex.Translator avec un lien actif vers la page translate.yandex.ru doit être indiqué au-dessus ou au-dessous du résultat de la traduction.

Exigences de mise en page du texte
Le texte doit être précisé:
dans la description du produit logiciel;
Aide pour un produit logiciel
sur le site officiel du produit logiciel;
sur toutes les pages ou écrans où les données de service sont utilisées.
Eh bien, nous ne sommes pas des gens fiers, nous survivrons.

Comment ça marche


L'utilisateur nous écrit un message, nous lui demandons dans quelle langue il veut traduire la phrase. Après avoir demandé la traduction du texte et envoyé le résultat.

Implémentation technique


Obtenez la clé API
Nous utilisons cette bibliothèque

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

Nous lançons longpoll comme je l'ai décrit dans la 1ère partie.

 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 

Quelles sont les exceptions et ce qu'ils mangent


Exceptions - c'est une chose qui, en cas d'erreur, s'exécute et nous en informe. Pour gérer les exceptions, utilisez la construction try-except.

Essayons d'implémenter notre code sans cette construction.

-Traduction
-Quelle langue? Indiquez en deux lettres.
Par exemple: russe - ru, anglais - en
-en
-Saisissez la phrase que vous souhaitez traduire
-Hi Habr
-Traduit par le service Yandex.Translator translate.yandex.ru
[«Salut Habr»]

Eh bien, cela fonctionne, et pourquoi avons-nous besoin de vos exceptions?

Mais pourquoi:
-Traduction
-Quelle langue? Indiquez en deux lettres.
Par exemple: russe - ru, anglais - en
-abracadabra
-Saisissez la phrase que vous souhaitez traduire
-Hi Habr
...

En attendant, dans la console:

 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 

Et avec des exceptions:

-Traduction
-Quelle langue? Indiquez en deux lettres.
Par exemple: russe - ru, anglais - en
-Abracadabra
-Saisissez la phrase que vous souhaitez traduire
-Hi Habr
- Langue saisie incorrectement

Je vais essayer - sauf construire plus en détail:

 try: #sample code except Exception: #       

Je vais donner un exemple avec l'api wikipedia:

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

Comme vous le comprenez, il peut y avoir plusieurs exceptions.

Sur ce, je vous dis au revoir. Tout le meilleur

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


All Articles