Ruby: 2.3.1
Gem Mechanize: 2.7.5
Это консольный вариант.
Данное приложение парсит фильмы по новому интерфейсу "КиноПоиск +" (https://plus.kinopoisk.ru/) и выводит один фильм в качестве рекомендации.
Адреса страниц (алгоритмы) для парсера находятся в файле algorithm.json
- в данном случае, там находятся адреса с определенными фильтрами, которые можно подобрать под свой вкус.
Далее приложение выбирает случайным образом один из алгоритмов и проходится по всем страницам сайта (но не более 50), складируя все доступные данные о фильмах.
Так как КиноПоиск, наблюдая высокую активность парсера, может его заблокировать, то, для недопущения поломки приложения приняты следующие меры:
- Если блокировка была осуществлена во время парсинга любой из страниц, кроме первой, то приложение прекратит сканирование страниц и продолжит дальнейшую работу.
- Если блокировка была осуществлена во время парсинга первой страницы, то, заместо данных, будет записана строка с ошибкой
ERROR: EMPTY PARAMS FOR GENERATE ARRAY
и приложение продолжит свою работу.
Далее по спарсенному материалу производится поиск по следующим параметрам:
- Название
- Страна и дата создания
- Ссылка на фильм
- Ссылка на изображение (280x178 px)
После поиска материалов, генерируется хэш следующего вида:
{
date: '2017-10-03',
data: [
{
param1: "Унесённые призраками",
param2: "Япония, 2001",
param3: "https://plus.kinopoisk.ru/film/370/",
param4: "//avatars.mds.yandex.net/get-kino-vod-films-gallery/33804/2a00000151734e3f7412fd167b563973c1c2/280x178"
},
{
param1: "Умница Уилл Хантинг",
param2: "США, 1997",
param3: "https://plus.kinopoisk.ru/film/539/",
param4: "//avatars.mds.yandex.net/get-kino-vod-films-gallery/28788/2a0000015184de4cc54088d640d3d592e845/280x178"
}
]
}
И записывается в файл <порядковый_номер_алгоритма.json>
.
Например: 4.json
Таким образом, все фильмы по случайно выбранному алгоритму будут лежать в файле с порядковым номером этого алгоритма.
Список фильмов в json файле крайне необходимая вещь - так как парсить каждый раз огромное количество страниц ради одного фильма не очень-то благоразумно.
Поэтому, после того, как приложение выбрало случайный алгоритм - оно проверяет, нет ли уже спарсенных фильмов.
Если есть - вызывается метод random_film
, он генерирует случайный фильм и возвращает строку.
Строка будет выглядеть следующим образом:
Фильм: В диких условиях, США, 2007
Чтобы вывести остальные данные, необходимо в методе random_film
добавить соответствующие параметры.
Таблица параметров:
Название | Вызов |
---|---|
Название фильма | film['param1'] |
Страна и год | film['param2'] |
Ссылка на фильм | film['param3'] |
Изображение | film['param4'] |
Если JSON файла с уже отпарсенными по выбранному алгоритму фильмов нет, то приложение перейдет к пункту 1. Парсинг
Также важно, чтобы JSON файл периодически обновлялся. Поэтому, перед выводом фильма, приложение проверяет дату в JSON файле. Если дата больше 7 + порядковый_номер_алгоритма
дней, то приложение спарсит новые данные и перепишит файл.
Так как при парсинге могла возникнуть ошибка, которую мы обозначили строкой в пункте 1.2. Возможные ошибки
, то перед выводом, осуществляется проверка на строку. Если спарсенные данные - это строка - то просто выводим ее.
После скачивания, можно пользоваться сразу же. Для настройки алгоритмов, нужно:
- Очистить папку
films
от всех файлов - В файле
algorithm.json
записать свои алгоритмы
И готово.