longpollを使用して、PythonでVKのチャットボットを作成しています。 パート2 二重ループ、例外、その他の異端

こんにちは、Habr。 この記事は、この記事の続きです。 読む前に、これをやったことがない場合は読むことを強くお勧めします。

今日は以下を学びます:

  1. 集合農場ではあるが、複数の答えを得る方法
  2. Yandexトランスレーターをこれに接続する方法
  3. そして、彼がすべて間違ったことをユーザーに書く方法

API Yandexトランスレーター


Yandexトランスレータには優れたAPIがあり、これを使用します。 ドキュメントを慎重に検討し、戦いに入ります。 しかし、ここではYandexが豚を置きます。
翻訳結果を使用するための要件
Yandex.Translatorを使用するためのライセンスによれば、 translate.yandex.ruページへのアクティブリンクを含むYandex.Translatorサービスによって翻訳されたテキストは、転送結果の上または下に表示する必要があります。

テキストレイアウトの要件
テキストを指定する必要があります。
ソフトウェア製品の説明内。
ソフトウェア製品のヘルプ
ソフトウェア製品の公式Webサイト。
サービスデータが使用されるすべてのページまたは画面。
まあ、私たちは誇りに思う人々ではありません、私たちは生き残ります。

仕組み


ユーザーは私たちにメッセージを書き、フレーズをどの言語に翻訳したいかを尋ねます。 テキストの翻訳を依頼し、結果を送信した後。

技術的な実装


APIキーを取得する
このライブラリを使用します

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

第1部で説明したように、ロングポールをキックします。

 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 

例外とは何ですか?


例外-これは、エラーが発生した場合に実行され、そのことを通知するようなものです。 例外を処理するには、try-exceptコンストラクトを使用します。

このコンストラクトなしでコードを実装してみましょう。

-翻訳
-どの言語? 2文字で示します。
例:ロシア語-ru、英語-en
-en
-翻訳したいフレーズを入力してください
-こんにちはHabr
-Yandex.Translatorサービスtranslate.yandex.ruによる翻訳
['Hi Habr']

まあ、それは機能します。なぜあなたの例外が必要なのですか?

しかし、なぜ:
-翻訳
-どの言語? 2文字で示します。
例:ロシア語-ru、英語-en
-アブラカダブラ
-翻訳したいフレーズを入力してください
-こんにちはHabr
...

一方、コンソールでは:

 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 

そして例外を除いて:

-翻訳
-どの言語? 2文字で示します。
例:ロシア語-ru、英語-en
-アブラカダブラ
-翻訳したいフレーズを入力してください
-こんにちはHabr
-誤って入力された言語

私は試してみます-構成をより詳細に除いて:

 try: #sample code except Exception: #       

ウィキペディアAPIの例を示します。

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

ご理解のとおり、いくつかの例外があります。

これで私はあなたに別れを告げます。 最高の

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


All Articles