vk.comのチャットボットを3分で書く方法

残念ながら、現時点では、チャットボットをすばやく作成するための優れたPython2ライブラリはありません。 以下に、VK APIを使用してVKのプリミティブチャットボットを作成するのがいかに簡単かを示します。







この記事は、初心者がPythonでボットを書くのに複雑なことはないことを示すために書かれています。







ログイン



vk_apiライブラリが必要になります。 次の2つの方法でVKにログインできます。

-ユーザーとして

-コミュニティとして







最初のケースでは、ユーザー名とパスワードを入力する必要があります。 2番目のケースでは、グループで「コミュニティメッセージ」を有効にし、APIアクセスキーを作成する必要があります。







画像







画像







2行認証:







import time import vk_api vk = vk_api.VkApi(login = 'login', password = 'password') #vk_api.VkApi(token = 'a02d...e83fd') #   vk.auth()
      
      





メッセージを送信する



次に、選択した人にメッセージを送信する短い関数を作成します。







PSコミュニティは、以前に書かれたユーザーにのみメッセージを送信できます。







 def write_msg(user_id, s): vk.method('messages.send', {'user_id':user_id,'message':s})
      
      





vk.methodでは、 VK APIから任意のメソッドを呼び出して、パラメーターを辞書の形式で渡すことができます。







この場合、 messages.sendメソッドを呼び出し、ユーザーIDとメッセージテキストをパラメーターとして渡します。







メッセージを受信する



いいね! メッセージを送信する方法を学びましたが、メッセージを受信する方法を学習する必要があります。 これを行うには、 messages.getメソッドが必要です。







注意すべきいくつかのパラメーター:







1)out-このパラメーターが1の場合、サーバーは送信メッセージを返します。

2)count-受信するメッセージの数。

3)time_offset-メッセージが送信された瞬間から現在の瞬間までの最大経過時間(秒)。

4)last_message_id-最後に返されるメッセージの前に受信されたメッセージの識別子(受信された後にcountメッセージ以下であることが条件)







 values = {'out': 0,'count': 100,'time_offset': 60} vk.method('messages.get', values)
      
      





私たちの場合、このメソッドは、確実に100未満であった場合、最後の60秒間に受信したすべてのメッセージを返し、それ以上であれば、最後の100を返します







その結果、アイテムのリストを取得します。







 {u'count': 3441, u'items': [{u'body': u'\u041f\u0438\u0448\u0435\u043c \u0431\u043e\u0442\u0430 \u0434\u043b\u044f \u0432\u043a!', u'date': 1491934484, u'id': 7387, u'out': 0, u'read_state': 0, u'title': u' ... ', u'user_id': 23107592}, {u'body': u'\u041f\u0440\u0438\u0432\u0435\u0442 \u0425\u0430\u0431\u0440!', u'date': 1491934479, u'id': 7386, u'out': 0, u'read_state': 0, u'title': u' ... ', u'user_id': 23107592}]}
      
      





簡単な言葉で説明すると、ダイアログで強調表示できるのはアイテムです。







画像







最後のコードは、各メッセージに「Hello、Habr!」と答える永遠のサイクルです。







 while True: response = vk.method('messages.get', values) if response['items']: values['last_message_id'] = response['items'][0]['id'] for item in response['items']: write_msg(item[u'user_id'],u', !') time.sleep(1)
      
      





Chatbotの準備ができました。







PSパラメータlast_message_idを覚えているので、次回は新しいメッセージのみが処理されます。







完全なコード
 # -*- coding: utf-8 -*- import time import vk_api vk = vk_api.VkApi(login = 'login', password = 'password') #vk_api.VkApi(token = 'a02d...e83fd') #   vk.auth() values = {'out': 0,'count': 100,'time_offset': 60} def write_msg(user_id, s): vk.method('messages.send', {'user_id':user_id,'message':s}) while True: response = vk.method('messages.get', values) if response['items']: values['last_message_id'] = response['items'][0]['id'] for item in response['items']: write_msg(item[u'user_id'],u', !') time.sleep(1)
      
      





17行のコードが判明しました。 頑張って!







UPD 09/17/18:

残念ながら、VK APIの新しいバージョン(5.80)では、「messages.get」メソッドが削除され、この記事の関連性が失われました。 ここで、ボットを作成するにはlongpollシステムを使用します。 Pythonのvk_apiモジュールの例をこちらで見つけることができます。








All Articles