О том, как мы допилили оставшиеся функции

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

За те несколько дней, которые мы определяли границы проекта и собирали недостающие ресурсы, половина функций, а именно ответ на сообщение в ЛС и отправка случайного арта из паблика были уже реализованы. Дело осталось за малым: реализация репостов из заданного сообщества и добавление лайкнувшего определённый пост пользователя в друзья.

Для реализации последней функции на стене бота был закреплён специальный пост. С помощью метода из VK API likes.getList() мы получаем список лайкнувших его людей. Как и в случае с ответом на сообщения пользователя, здесь мы использовали бесконечный цикл. Сначала при выполнении цикла бот получает список лайков, представляющий из себя массив из id оставивших лайки пользователей. Далее он проходит по массиву и поочерёдно добавляет всех лайкнувших запись пользователей в друзья с помощью метода friends.add(). Ну и дабы бота не забанили, после отправки запроса на добавление кого-либо в друзья он ждёт 30 секунд, прежде чем отправить следующий запрос (в случае же, если человек, поставивший лайк, уже находится в друзьях бота, тот его пропускает).

В случае репостов, опять же, чтобы бота не забанили, происходит лишь репост последнего поста сообщества. Раз в 3600 секунд (ну или раз в час) бот проверяет последний пост в паблике и в том случае, если на нём не стоит лайк (а если нет лайка, то нет и репоста, для проверки используется тот же метод, что и в случае с добавлением в друзья), репостит его себе на стену.

Ну и как итог все функциональные требования заказчика выполнены:

  • Бот отвечает на сообщение пользователя в ЛС предложением подписаться на паблик и вывести список доступных команд
  • Бот умеет отправлять случайный арт из паблика

  • Бот умеет добавлять лайкнувшего пост на его стене пользователя в друзья

  • Бот умеет делать последний репост из паблика

Для того, чтобы бот мог работать в режиме 24/7, необходимо найти какой-нибудь дешёвый хостинг с поддержкой Python. Скорее всего, с данной задачей заказчик сможет справиться сам.

Ну а мы продолжим тестировать бота на выходных и уже в понедельник постараемся попытаться передать проект заказчику, и, может быть, сразу получить полную сумму за заказ.

О том, как мы искали недостающие ресурсы

Сегодняшний день был посвящён поиску недостающих ресурсов. Вчера выяснилось, что для реализации поставленной цели нам не хватает более глубоких знаний как VK API, так и Python. Точнее не то, чтобы их не хватало, просто попытка в них осваиваться непосредственно во время выполнения какой-нибудь задачи существенно замедляет процесс. И по этой причине мы решили посвятить этот день по большей части чтению существующих гайдов по Python и VK API в частности.

К каким выводам мы пришли?

  • Во-первых, как нам кажется, код следует оформить, используя принципы объектно-ориентированного программирования. В Python это сделать довольно просто, а расширяемость кода по итогу должна увеличиться (не то, чтобы это было необходимо конкретно для этого бота, но мало ли).
  • Во-вторых, методы VK API, оказывается, в случае авторизации на сайте vk.com, можно выполнять непосредственно на странице с описанием данного метода, соответственно можно наглядно посмотреть, как он работает. Это было неожиданно, внезапно. Видимо, нужно выработать привычку всегда скроллить текст до самого конца страницы, а не вслепую использовать понравившийся метод ¯\_(ツ)_/¯

  • В третьих… Стоп, уже четверг? О нет, уже завтра нам нужно сделать действующий прототип! Ну, хорошо, значит мы не зря посвятили сегодняшний день подгонке существующего кода под принципы ООП. Теперь команды, общение с пользователем и взаимодействие с VK API происходит в отдельных классах со своими методами и атрибутами. Удобно, однако. Мы не протестировали, работает ли всё, что нам нужно, так что в крайнем случае откатимся к версии без ООП и вернёмся к этой идее несколько позже

Ну а на сегодня отчёт заканчивается. Уже завтра мы займёмся функциями репостов из заданного паблика и добавлением лайкнувшего пост пользователя в друзья, и, собственно, реализация данных задач позволит получить нам готовый прототип, который останется лишь протестировать и избавить от каких-нибудь багов. Вот так.

Ах да, функцию работы с аудио пришлось из бота выпилить (по этой причине мы выпилили и её описание из предыдущего поста). Для её реализации использовался не VK API и соответственно количество бесплатных запросов было весьма ограниченным, то есть в один момент она бы все равно перестала работать, увы. Ну, это неважно, заказчик все равно о ней не просил.

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

Итак, сегодня мы попытались реализовать остальные функции нашего бота. Начать решили с команды по отправке пользователю случайного арта из паблика. В первую очередь была написана функция, получающая все необходимые атрибуты для метода из VK API photos.get() по id сообщества и возвращающая необходимые уже непосредственно для отправки в сообщении атрибуты фотографии.

Основываясь на том, насколько долго пришлось реализовывать эту функцию (а реализовывать её действительно пришлось долго), мы пришли к выводу, что нам не хватает некоторых ресурсов, а именно знания как Python, так и VK API. Об этом мы, собственно, уже было написано в отчёте за предыдущий день. Ну а в целом, хоть и со скрипом, но мы-таки реализовали данную функцию и бот теперь умеет отправлять случайный арт из паблика, а ещё случайную фотографию с корги (которая берётся так же из посвящённого этой породе собак паблика)/ Несмотря на то, что заказчик о последней функции не просил, почему бы её не добавить? Как-то так. ¯\_(ツ)_/¯

В общем, для реализации оставшихся двух пунктов функциональных требований необходимо опять же подробнее изучить VK API и Python. Отсутствия опыта с ними и является недостающим ресурсом, тормозящим процесс реализации бота.

Как мы определяли конкретные требования заказчика

Сегодняшний день был посвящён по большей части не попытке реализации проекта за этот самый день (хотя в реализации поставленной задачи тоже были проделаны некоторые шаги), а как раз таки определению его границ.

Поскольку вчера мы не получили от заказчика конкретных требований, мы решили провести с ним интервью для того, чтобы узнать функциональные требования к проекту. Итак, что должен уметь делать наш бот, чтобы удовлетворить все основные потребности заказчика:

  • Репосты из заданного паблика
  • Отправлять написавшему ему пользователю по команде случайного арта из заданного паблика
  • Автоматически отвечать на сообщение пользователя в ЛС предложением подписаться на паблик и предложением вывести список доступных команд
  • Добавлять лайкнувшего пост на стене пользователя в друзья и (необязательно) здороваться с ним

Нефункциональных требований у заказчика не имелось.

Для реализации поставленной цели было решено использовать язык программирования Python версии 3.6.1 и VK API. После установки всех необходимых модулей и регистрации аккаунта для бота, была предпринята попытка реализовать хотя бы одну из поставленных целей, дабы хоть как-то освоиться с VK API (ранее опыта работы с этим интерфейсом у нас не было).

Итак, после продолжительного чтения документации и доступных в API методов был написан тестовый скрипт, которой, помимо прочего, непосредственно связан с требованием заказчика автоматически отвечать на сообщение пользователя. По сути всё просто: у нас имеется бесконечный цикл, запущенный на компьютере-сервере, проверяющий раз в секунду не поступили ли на аккаунт бота-сообщения (используется метод messages.get). В том случае, если сообщение поступило, бот отвечает заранее подготовленной фразой, мол, «Привет и бла-бла-бла».

На данный момент мы столкнулись с проблемой парсинга сообщения пользователя, поэтому вывести ему список команд пока затруднительно, но, скорее всего, эта проблема будет решена в самое ближайшее время, так же как и взаимодействие непосредственно с пабликом. Нужно всего лишь подробнее ознакомиться с доступными методами VK API.

Ну а на этом пока мы останавливаемся, задачи второго дня были выполнены: интервью с заказчиком помогло выявить функциональные требования проекта и определить его границы, а попытка сделать проект за один день помогла нам поближе ознакомиться с новым для нас языком программирования и VK API.

О том, как мы нашли заказчика

Найти заказчика в столь короткие сроки весьма непросто, однако для решения данной задачи была использована социальная сеть ВКонтакте. Как минимум, думали мы, найти кого-нибудь, кому пригодится, например, бот для паблика, будет не такой уж и сложно.

Увы, опрос администраторов более-менее крупных сообществ ничего не дал: никто не собирался платить аванс, да и боты оказались особо никому не нужны (а может, мы просто искали не там или неправильно вели диалог, переходя непосредственно к цели и слишком рано требуя аванс, кто знает).

Несмотря на это, заказчик таки был найден: один человек был не прочь вложиться в нечто подобное для арт-паблика его девушки, и даже согласился передать некоторый аванс в размере аж целых 500 рублей. Суть должна быть крайне проста: заказчику нужен рекламный бот.

На данный момент конкретных требований выдвинуто не было, так что, как минимум, в первые дни мы можем позволить себе некоторые вольности в реализации этого небольшого проекта. На выходе должен получиться бот, способный делать репосты из паблика, приглашать туда людей из своего списка друзей, и, может быть, вести какой-нибудь простой диалог с пользователем на различные темы. В результате дальнейшего диалога с заказчиком мы надеемся разузнать о функциональных требованиях подробнее.

Ну а пока первое задание выполнено: заказчик найден, тема выбрана, аванс получен.

Объявления
Начинается проектный практикум для студентов УрФУ

проектный практикум 2 курса

проектный практикум 3 курса

проектный практикум 4 курса

Партнеры:

ИнФО УрФУ - Генеральный партнер в проведении проектной практики в июне-июле 2017 года

Роботология - Российское оборудование для программирования и конструирования роботов

Уральский клуб нового образования - общественная организация, которая разрабатывает и реализует социально-образовательные проекты

Архив событий:

Проектная практика для студентов Института фундаментального образования УрФУСобытие

Молодежный космический форум - 2017 (Четвертые Семихатовские чтения)Конкурс

Выбор темы работы для участия в IV Семихатовских чтенияхО Форуме-2017

Подписка на новости
Контакты

Адрес: г. Екатеринбург, ул. Мамина-Сибиряка 145, к. 1119 (на карте)

Тел.: +7 (343) 355-93-88

info@cosmoport.club