Отражение проекта: Создание CLI-приложения с использованием Ruby и парсера веб-страниц
Table Of Content
Это мой третий проект в курсе обучения full stack. В этом проекте мне нужно использовать Ruby для создания CLI-приложения и парсить публичный веб-сайт, чтобы получить данные, необходимые для приложения.
Цели этого проекта:
- Предоставить интерфейс CLI
- Предоставить доступ к данным с веб-страницы
- Приложение должно иметь как минимум два уровня, где пользователь выбирает получить дополнительную информацию
- Использовать ОО (объектно-ориентированные) шаблоны проектирования для создания коллекции объектов для хранения данных
- Использовать гем Nokogiri и Open-uri
- Приложение должно быть DRY (не повторяйся)
Резюме
Поскольку я любитель кино, я решил создать приложение для просмотра фильмов рядом с местоположением пользователя. Я выбрал парсинг данных с веб-сайта IMDB, чтобы получить название, рейтинг и подробное описание фильма. Я создал 3 класса, отвечающих за фильмы, интерфейс командной строки и парсинг, чтобы следовать принципу объектно-ориентированного программирования.
Обзор процесса программирования моего проекта
Учитывая, что парсинг списка фильмов рядом с пользователем должен быть основан на местоположении пользователя, я сохраняю почтовый индекс и сокращение названия страны, введенные пользователем, в переменную класса интерфейса командной строки.
Для парсинга веб-сайта IMDB я создал класс парсера, ответственный за парсинг. Прежде всего, я использую www.imdb.com в качестве базового URL, объединяя его с информацией о местоположении, введенной пользователем, чтобы найти веб-сайт со списком фильмов. Затем я использую гем Open-URI для преобразования целевой страницы в строку HTML и гем Nokogiri для парсинга HTML. Наконец, я нахожу название фильма и код названия фильма с помощью CSS-селектора, которые будут сохранены как атрибуты в созданном мной классе фильма.
Получив список фильмов, я сохраняю их в массив и перечисляю названия фильмов в массиве с префиксом индекса с помощью #each_index(). Чтобы предотвратить слишком длинный список фильмов, я отображаю фильмы по страницам, каждая страница содержит десять фильмов.
Наконец, пользователь вводит префиксный номер фильма, который он хочет проверить. На этом этапе я объединяю код названия фильма и базовый URL, чтобы получить доступ к соответствующей веб-странице с подробностями о фильме и парсю описание фильма и рейтинг IMDB. Каждый раз, когда пользователь выбирает фильм, происходит парсинг соответствующей веб-страницы, что позволяет избежать длительного времени загрузки приложения.
Проблемы
- Понять, как разрабатывать RubyGem с помощью Bundler
- Понять, как отлаживать с помощью Pry
- Ознакомиться с использованием циклов и условных операторов
- Использовать Gem Nokogiri для парсинга HTML
- Различие между атрибутами reader, writer и accessor в классах объектов
- Определить разницу между булевыми значениями в JavaScript и Ruby
После этого проекта я с нетерпением жду создания своего следующего проекта на основе Rails, который является Ruby-фреймворком.