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