CoderCastrov logo
CoderCastrov
Руби

­Отражение проекта: Создание CLI-приложения с использованием Ruby и парсера веб-страниц

­Отражение проекта: Создание CLI-приложения с использованием Ruby и парсера веб-страниц
просмотров
2 мин чтение
#Руби
My CLI app Movie Recommender

Это мой третий проект в курсе обучения 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-фреймворком.