LINUX.ORG.RU

Подскажите по web серверу.

 , ,


0

1

Есть учебная задача. Бот в вконтатктике на Python.

У меня есть VPS на Ubuntu. Там бот и будет крутится. Плюс ВК будет туда стучаться для oauth авторизации…

Подскажите, какой-нибудь простенький, но «нормальный» web сервер, что бы все это заработало без сложных настроек).

Ответ на: комментарий от vbr

Я, короче, застрял. Т. к. нет опыта в web, не знаю даже, как правильно задать вопрос).

Суть в чем. Есть бот использующий технологию longpoll.

Запускается оно так:

for event in longpoll_bot.listen():
    if event.type == VkBotEventType.MESSAGE_NEW:

VK сервер по мере возникновения события отдает их скрипту, который, затем, их обрабатывает. С самим ботом - проблем нет. Работает. Но, есть, как говориться нюанс). Для некоторых действий необходимо получить токен пользователя.

VK предлагает авторизацию на сервере с помощью «Authorization Code Flow»

Т. е. пользователь нажимает на специальную ссылку, авторизуется в VK, затем автоматом идет редирект на указанный сайт. Редирект, это GET запрос в параметре которого указан код. Затем приложение, используюя этот код получает уже токен пользователя.

Т. е. мне надо, вытащить этот код из GET запроса. И вот тут, тупик.

Посмотрел FastAPI. Запускаю, GET запрос обрабатывается, код вытаскиваю. Но, как все это связать с уже написанным приложением, не знаю. Если только переписать все под FastAPI.

Вторая идея. Запустить web сервер отдельно и, как-то передать результат обработки GET запроса в бот. Тут проблема на пункте «как-то».

Ну и третий вариант, мимикрировать под web сервер и обрабатывать запрос, непосредственно в скрипте…

Короче, у меня проблемы с теорией)))

AndrK189100
() автор топика
Последнее исправление: AndrK189100 (всего исправлений: 1)
Ответ на: комментарий от AndrK189100

Посмотрел FastAPI. Запускаю, GET запрос обрабатывается, код вытаскиваю. Но, как все это связать с уже написанным приложением, не знаю

Варианты:

  • твой скрипто-бот и явлется веб-сервером, нужную функциональность получаешь интеграцией кода бота в сервер (aiohttp или FastAPI) в виде «background-tasks»
  • запускаешь бота отдельно, веб-сервер отдельно, и делаешь IPC. Самое простое для понимания - это «межкомпьютерное» (пусть даже всё и в рамках одной виртуалки крутится) взаимодействие, например БД или брокер сообщений. Т.е. для твой задачки хватит простого pub/sub на основе редиса.

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

vvn_black ★★★★★
()
Последнее исправление: vvn_black (всего исправлений: 2)
Ответ на: комментарий от vvn_black

Я смотрю на FastAPI. Если делать обычный web сайт, все понятно.

Запускается web сервер и ему передается приложение FastAPI.
Затем, при получении запросов от клиентов сервер дергает функции приложения и возвращает результат…

У меня ситуация другая.
Запускается listener и слушает сервер VK.
Пришло событие от пользователя.
Если пользователь новый, создается пара id_user: dialog(объект в котором обрабатываются сообщения этого пользователя.)
Если не новый, по id_user определяется его dialog и события тупо отправляются ему…
сам dialog - простой «конечный автомат». Который в зависимости от состояния делает то или иное действие и переключается в новое состояние.

Сам listener возбуждается, только когда ему приходит событие.

Как сюда прикрутить web сервер, я не понимаю.

Тут еще момент многопользовательности, т. к. в запросе нет информации о пользователе вконтаке, который пытается авторизоваться. Только код.
Понятно,что на основе кода генерируется уникальный токен. Но, как его потом прикрутить к конкретному пользователю, большой вопрос….

Короче, сильна я подозреваю, что изначально пошел не тем путем. Надо на callback все переделывать(

AndrK189100
() автор топика