Skip to content

Latest commit

 

History

History
35 lines (18 loc) · 3.4 KB

automated_user_data_collection.md

File metadata and controls

35 lines (18 loc) · 3.4 KB

RoR + Selenium: автоматизированный сбор данных юзеров

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

  • выбирать содержательные названия для классов, методов и переменных;

  • писать разумные комментарии к каждому классу и методу, указывать тип и описание для каждого параметра;

  • создавать методы и классы разумного размера (по количеству строк);

  • использовать константы с понятными названиями вместо «магических чисел».

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

Задание

Реализуйте автоматизированный сбор данных о пользователях вашего любимого форума.

Предполагаемый алгоритм решения задачи

  • залогиниться на форуме, используя предоставленные логин и пароль аккаунта, если это требуется для получения списка пользователей;

  • получить список пользователей, отсортированный по алфавиту;

  • Собрать все 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.