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('')
      
      





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



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



All Articles