为机器人程序创建基础将包括以下步骤:
- 在VK中创建机器人
- API密钥生成
- 通过LongPoolVK创建机器人程序
本文适用于谁?
本文是为初学者设计的。 该程序的工作方法非常简单,任何了解Python语法并懂一点OOP的人都可以根据需要实现它。 但是原则上,即使不了解OOP的任何原理,我认为您也可以学习如何添加简单功能,或者至少在极端情况下使用GitHub上的现成资源。
这篇文章是什么?
创建机器人的基础。 之后,可以根据需要对其进行编程。 使某些例程自动化或用作对话者。
改进(机器人的版本稍微复杂)。 我决定首先介绍该机器人的简单程序代码,然后通过添加可显着改善该机器人的功能来使其稍微复杂化。
增加天气转移功能。 我们将教机器人告诉我们天气。
在VK中创建机器人
我们将从创建一个机器人(即VK中的组)开始。
为此,请转到“组”→“创建社区”。
选择任何类型的社区,然后输入名称,组主题。
在打开的设置页面上,选择“使用API”
接下来,您需要创建一个API密钥。
然后选择需要访问API密钥的参数。
最有可能的是,您将必须使用手机在VK中确认操作。 然后将生成的API密钥复制到文件中。 我们仍然需要它。
然后,您需要允许消息。 为此,请转到“消息”并打开它们。
让我们继续进行bot的程序部分
我们不会通过对VK的请求来实现它,或者更确切地说,我们只是使用VkLongPool库来为我们做。
这需要vk_api库。 通过pip安装:
python -m pip安装vk_api
但是我个人使用Anaconda的虚拟环境。 这通常会在首次工作中引起问题。 通常问题是系统无法识别python命令。 并通过将其添加到PATH来解决此问题。
让我们深入到代码本身:
我们导入必要的模块:
import vk_api from vk_api.longpoll import VkLongPoll, VkEventType
然后是代码:
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
write_msg函数接收VK用户ID <user_id>,它将向其发送消息和消息本身。
def write_msg(user_id, message): vk.method('messages.send', {'user_id': user_id, 'message': message})
以社区身份登录并设置longpool:
在其中,我们将定期检查事件。 我们可以使用event.type获取事件类型。
之后,在收到用户的消息后,我们将能够使用已经创建的函数write_msg向他发送相应的字母。
因此,我们用相同的简单实现在VK中创建了一个非常简单的机器人。 机器人的逻辑可以根据需要进行编程。
GH代码清单现在让我们开始更实际的编程。
在文件vk_bot.py中创建一个类VkBot,它将作为我们的机器人。
class VkBot: def __init__(self, user_id): print(" !") self._USER_ID = user_id self._USERNAME = self._get_user_name_from_vk_id(user_id) self._COMMANDS = ["", "", "", ""]
并在其中添加方法,您可以通过vk id获取用户名。
def _get_user_name_from_vk_id(self, user_id): request = requests.get("https://vk.com/id"+str(user_id)) bs = bs4.BeautifulSoup(request.text, "html.parser") user_name = self._clean_all_tag_from_str(bs.findAll("title")[0]) return user_name.split()[0]
这是使用beatifulsoup4完成的。
如果不是,请安装:
python -m pip install bs4
有足够的文章值得研究。 使用它,我们将创建更多方法:
将_get_weather参数更改为所需的城市,稍后可以用城市调用此方法,默认情况下它将是您指定的值。
使用这些方法,我们可以获得时间和天气。 这些方法均来自我的主要bot项目。 您应该使用继承将它们组织在单独的包和类中。 但是为了举例说明,我决定将所有这些都放入一个机器人类中,这当然是不好的。
我们创建主要方法new_message,它将处理用户的消息并返回响应:
def new_message(self, message):
现在回到可执行文件:
导入我们的机器人的类:
from vk_bot import VkBot
让我们更改主循环:
print("Server started") for event in longpoll.listen(): if event.type == VkEventType.MESSAGE_NEW: if event.to_me: print('New message:') print(f'For me by: {event.user_id}', end='') bot = VkBot(event.user_id) write_msg(event.user_id, bot.new_message(event.text)) print('Text: ', event.text)
也就是说,现在我们将接收到的消息传输到bot对象,该对象将向我们返回所需的答案。
如果您想进一步改善Bot的功能,则仅需要使程序复杂化即可:
为每个_get_time和_get_weather函数创建单独的包和类。 组织来自普通班级的继承。 并在单独的类中定义每个新函数,当然最好也分成包。
添加具有用户ID密钥和机器人对象值的字典。 因此,不必在一个周期中每次都创建一个机器人对象。 此外,这将确保在复杂的设计中一次使用多个用户。
因此,选择一个好的代码架构,您可以创建一个多功能的机器人。
例如,我教我的机器人在计算机上播放音乐,坐在手机上打开网站。 发送早餐,午餐,晚餐食谱。
您可以自己编辑机器人。
文章中的BotGH上的主要bot项目(高级)我会对您的想法感到高兴。 如有任何疑问,请写下。