Необходимо продемонстрировать умение не только решать поставленную задачу, но и качественно оформлять код:
-
выбирать содержательные названия для классов, методов и переменных;
-
писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;
-
создавать методы и классы разумного размера (по количеству строк);
-
использовать константы с понятными названиями вместо «магических чисел».
Необходимо обдумать не только «позитивный» случай, но и возможные ошибки в процессе обработки (на практике они более чем возможны). В том числе случай, когда меняется структура страниц и алгоритм перестаёт функционировать корректно. Все такие ошибки должны правильно и, по возможности, унифицированно обрабатываться.
Задание
Реализуйте автоматизированный сбор списка самых активных участников вашего любимого форума (или любого форума, где есть список пользователей, отсортированный по числу сообщений).
Предполагаемый алгоритм решения задачи
-
залогиниться на форуме, используя предоставленные логин и пароль аккаунта, если это требуется для получения списка пользователей;
-
получить список пользователей, отсортированный по числу сообщений;
-
собрать все
username
аккаунтов (и число их сообщений), у которых больше N сообщений, пролистывая страницы списка; -
занести информацию в таблицу
forum_users
базы данных с полями{ VARCHAR username, INT messages_count, DATE scraped_date }
, гдеusername
+scraped_date
(дата сбора данных) имеют ограничение на уникальность (unique constraint). В случае наличия записи — не обновлять данные.
Технологии
Задание нужно реализовать на Ruby On Rails в виде периодической задачи Resque + Resque Scheduler, где логин и пароль аккаунта, а также расписание выполнения хранятся в конфигурационном файле.
Рекомендуем продумать архитектуру решения: желательно выделить «низкий уровень» элементарных запросов и «высокий уровень» управления навигацией и обработки ошибок навигации. Обязательно использовать принцип «тонких контроллеров» для resque jobs.