Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
65сборник_ред.Ковалев.doc
Скачиваний:
10
Добавлен:
28.09.2019
Размер:
13.06 Mб
Скачать

Создание абстракции базы данных фильмов к сайту kinopoisk.Ru с использованием языка программирования python

А.В. Копаева, К.А. Воронин (прикладной бакалавриат, 1 курс, группа сектора НИТ МГДД(Ю)Т)

Проект выполнен в рамках участия в комплексной НИОКР ЦНИТ МИРЭА-МГДД(Ю)Т, посвящённой созданию макромедиа информационного консорциума, отражающего мировое детское музыкально-певческое творчество «Дети. Музыка. Кино. Интернет». Конкретная цель проделанной работы заключается в создании класса на языке программирования Python, версии интерпретатора не ниже 2.x с использованием данных с сервиса Kinopoisk, а также для демонстрации работоспособности созданного программного обеспечения (ПО) в составе каркаса ПО информационного макромедиа консорциума. Для реализации программы востребовано наличие библиотеки BeautifulSoup в корневой директории работающего приложения.

Определения проекта

Класс в объектно-ориентированном программировании - это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления.

В задачи настоящей работы входил анализ выбранного ресурса, прежде всего с позиций упорядочения написания соответствующего приложения.

После выполнения этих работ было создано представление класса, в итоге состоящее из конструктора класса, устанавливающего некоторые необходимые для работы переменные (свойства класса), а также трех функций для произведения выборок данных:

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

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

  • get_list – для выборки списка фильмов по указанному уникальному идентификатору пользователя (владельца списка) и идентификатору самого списка.

Выборка фильма по ID

При обращении к серверу по адресу http://www.kinopoisk.ru/level/1/film/<ID>/, где <ID> - уникальный идентификатор фильма, сервер отдает HTML код страницы, в котором содержится вся необходимая информация. Таким образом, определяя элемент каждого свойства, попадающего в выборку, существует возможность составить т.н. словарь (массив, именованный список) значений для данного объекта. Так как необходимая информация содержится внутри таблицы, разделенной строками из пустых колонок, каждый второй элемент данной таблицы является определенным значением. Все представленные свойства объекта, кроме: “Год”, “Слоган”, “Бюджет”, рассматривались в качестве списка из нескольких значений, причиной для этого является формат составленный сервисом Kinopoisk, при котором данные свойства имеют несколько значений, разделенных запятыми.

В итоге, данный метод возвращает словарь из следующих значений: “Название”, “Оригинально название”, “Изображение”, “Год”, “Страна”, “Слоган ”, “Время”, “Режиссёр”, “Сценарист”, “Продюсер”, “Оператор”, “Композитор”, “Художник”, “Жанры”.

Выборка фильмов по ключевым словам

Для реализации поиска была использована страница расширенного поиска с предустановленным значением фильмов на страницу по адресу: http://s.kinopoisk.ru/level/7/type/<TYPE>/list/1/find/<KWD>/perpage/200/, где <TYPE> - тип искомой информации (режиссер, актер, фильм), а <KWD> - ключевое слово (строка), по которому производится поиск контента. В поисковой выдаче каждый объект находится в элементе div с классом: element, element width_2, element width_3. Объединением всех элементов в один список и его перебором достигается извлечение отдельных значений каждого элемента и создание списка словарей с краткими данными о каждом фильме с сортировкой по алфавиту.

Выборка фильмов из списка по его ID

С помощью сервиса Kinopoisk пользователь может создавать свои списки фильмов, имея уникальный идентификатор пользователя, а также уникальный (в рамках пользователя) идентификатор списка созданного им. Возможно получить данные о фильмах находящихся в нем, по адресу: http://www.kinopoisk.ru/level/79/user/<UID>/movies/list/type/<LID>/, где <UID> - уникальный идентификатор пользователя, а <LID> - идентификатор списка созданного пользователем, изначально имеющийся список с именем «Избранное» всегда имеет значение LID, равное 1. Также как и в предыдущем случае с созданием выборки со страница поиска необходимо выделить и объединить в список все элементы с объектами и с помощью процедуры перебора составить список, состоящий из словарей данных о каждом фильме. Единственным отклонением от предыдущего случая является другая адресация значений объектов. Возвращаемым значением также является список словарей с данными об объектах, попавших в выборку.

Практическое применение, реализация открытого API

Класс может быть использован для получения данных о конкретном фильме или его поиске. Поскольку все возвращаемые значения кодируются в формате Unicode, удаётся использовать класс в любых проектах, поддерживающих любую Unicode кодировку. Примером использования этой разработки может служить открытый сервис доступа к базе данных (API), для поиска и получения определенных значений.

Для реализаций API был использован CGI интерфейс языка Python. В качестве рабочих методов из созданного класса были реализованы get и search, которые возвращают всю найденную информацию в формате JSON, в кодировке Unicode используя callback для кросдоменной передачи данных. Поэтому в качестве заголовка установлен: ‘application/json’.

При обращении к серверу, запущенному по адресу: 127.0.0.1, на порту: 1234 необходимо учитывать следующие введенные авторами требования:

  • Обязательный аргумент action для передачи действия (get или search).

  • Дополняющий аргумент, указывающий на значение передаваемое функции, вызываемой в зависимости от аргумента action:

    • id – для функции get целочисленное значение, указывающее на идентификатор фильма;

    • keywords – для функции search ключевое слово для поиска макромедиа контента.

В любом случае при обращении к серверу он возвращает JSON объект, который в случае неудачи содержит информацию об ошибке, иначе результат вычислений переданной функции.

Заключение

В итоге проделанной работы удалось составить класс для абстракции базы данных сервиса Kinopoisk, используя возможности языка Python. Решение пригодно для последующего использования в других проектах. В качестве примера был создан открытый API к данным обслуживаемого сервиса, предоставляющий методы get и search. Этот API может быть использован в любом проекте, поддерживающем форматы JSON и Unicode, с помощью получения JSON объекта с определенного URL, на котором запущен сервер API. В качестве примера такого сервиса может служить скрипт на сервисе JsFiddle, который использует для получения данных и их обработки метод getJson библиотеки Jquery.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]