Перейти к содержанию

Как работают боты?

Эта секция в легкой степени затрагивает работу API и LongPoll. Если Вам эти термины знакомы, можете переходить на следующую страницу


API

Многие популярные сервисы предоставляют REST API — схему взаимодейтсвия со своими ресурсами путем отправки HTTP запросов. Это значит, что если правильно сформировать HTTP запрос, передав необходимые параметры, то в ответ от сервиса, куда был отправлен запрос, можно получить необходимые данные, или же наоборот — какие-либо данные отправить. Например, отправка сообщений, получение ленты новостей из приложения являются API запросами.

Любой API запрос у ВК строится следующим образом:

https://api.vk.com/method/{method_name}?{params}&access_token={token}&v={version}
  • {method_name}: Имя специального метода (то, что мы хотим сделать: отправить сообщение, получить информацию о пользователе...). Все методы описаны здесь
  • {params}: Передаваемые параметры в метод (описаны в каждом методе ссылкой выше)
  • {token}: Специальный ключ доступа к аккаунту/сообществу. Гид по получению токена появится позже
  • {version}: Версия API

Представим, что мы хотим получить информацию о странице Павла Дурова — для этого нам нужен метод users.get. Этот метод принимает параметер user_ids — ID пользователей, о которых мы хотим получить информацию. В нашем случае у нас единственный ID, который равен единице. Поэтому составляем запрос следующего вида. Версию будем использовать 5.133. В итоге получается:

https://api.vk.com/method/users.get?user_ids=1&v=5.133&access_token={access_token}

Если подставить свой токен в ссылку и выполнить запрос в браузере, ВК пришлет ответ в формате JSON:

{
    "response": [
        {
            "first_name": "Павел",
            "id": 1,
            "last_name": "Дуров",
            "can_access_closed": true,
            "is_closed": false,
            "can_invite_to_chats": false
        }
    ]
}

Tip

Токен нужно получить тут https://vkhost.github.io (выберите VK Me, согласитесь со всем и скопируйте часть адресной строки от access_token= до &expires_in)

Отсюда можно узнать имя, фамилию и другие значения

Мои поздравления 🎉! Мы только что узнали то, как получать информацию от ВК, используя его API


Попробуем сделать этот же самый запрос через Python и популярную библиотеку requests. VK Quick имеет эту библиотеку в своих зависимостях, поэтому если вы выполнили предыдущий этап установки, requests уже имеется в установленных пакетах. Если же requests не установлен:

$ python -m pip install requests
---> 100%

Наша новая задача — выполнить тот же самый API запрос, используя Python и библиотеку requests, которая этот запрос поможет выполнить

import requests


token = ""  # Сюда необходимо вставить свой токен
response = requests.get(
    "https://api.vk.com/method/users.get",
    params={
        "user_ids": 1,
        "access_token": token,
        "v": "5.133"
    }
)
response = response.json()
print(response)

Не так много кода, и запрос готов. Мы передали нужные параметры, а затем с помощью метода .json() из JSON-схемы получили словарь. Чтобы использовать имя пользовтаеля в коде, достаточно написать response["response"][0]["first_name"]

В разделе Документация вы узнаете, как отправлять API запросы с помощью VK Quick.

LongPoll

Если с запросами всё понятно, то каким образом ВК уведомляет бота о новом сообщении? Для этого существует специальная технология LongPoll. Мы посылаем запрос к ВК, но ВК отвечает не сразу, а только тогда, когда случилось событие (пришло новое сообщение, например), присылая в ответе все необходимые данные (текст сообщения, ID его отправителя...). После ответа можно снова отправлять запрос, и таким образом циклично получать все происходящие события и обрабатывать их в режиме реального времени.

Для пользователей и сообществ структура событий отличается, но вся она описана в документации у ВК

Мы не будем разбирать пример взаимодейтсвия с LongPoll, потому что он будет очень большим и плохо понятным. Для использования LongPoll в VK Quick нам достаточно понимать концепцию работы в целом.

Note

Существует еще одна технология получения событий — Callback. В этом случае вы выступаете в роли сервера, и после того, как проиходит новое событие, именно вк отправляет запрос первым