Create a gist now

Instantly share code, notes, and snippets.

@Melevir /styleru_py_hw_1.md Secret
Last active Feb 27, 2018

Embed
What would you like to do?

В этом задании мы сделаем рекомендательную систему для фильмов. Кривую и косую, но свою.

Задания стоит выполнять строго по очереди, иначе легко запутаться.

Ну, поехали.

  1. Зарегистрироваться на TMDB =============================

Для получения информации о фильмах мы будем пользоваться themoviedb.org – это такой IMDB (или Кинопоиск), но с удобным интерфейсом для разработчиков.

Порядок действий такой: сначала надо зарегистрироваться и подтвердить почту, потом войти в профиль найти пункт API, а оттуда – в большую форму для получения доступа к АПИ.

В форме нужно заполнить все поля, но телефон не обязательно указывать свой. Адрес должен быть реальным и совпадать с индексом. Советую проверить по Гугл-карте.

После удачного заполнения формы, сервис покажет страницу с несколькими персональными ключами доступа, в том числе "Ключ API (v3 auth)". Он выглядит примерно так: 1fb571fefa5d202b84789e021a70fc52. Это – твой логин и пароль для доступа к базе фильмов в одном флаконе. Скопируй его, он пригодится позже.

Теоретическая справка: статья про АПИ на Википедии,

  1. Знакомство с АПИ ТМДБ ========================

Теперь надо воспользоваться полученным доступом.

В базе ТМДБ все фильмы хранятся пронумерованными. Получить информацию о фильме, зная его номер, просто.

Чтобы получить информацию о фильме по его номеру, понадобится метод get-movie-details. Прочитай документацию по ссылке, оцени количество параметров фильма.

Чтобы тебе было легче, вот несколько вспомогательных функций, которые умеют вытягивать данные из ТМДБ:

import urllib.request
import urllib.parse
import json


def load_json_data_from_url(base_url, url_params):
    url = '%s?%s' % (base_url, urllib.parse.urlencode(url_params))
    response = urllib.request.urlopen(url).read().decode('utf-8')
    return json.loads(response)


def make_tmdb_api_request(method, api_key, extra_params=None):
    extra_params = extra_params or {}
    url = 'https://api.themoviedb.org/3%s' % method
    params = {
        'api_key': api_key,
        'language': 'ru',
    }
    params.update(extra_params)
    return load_json_data_from_url(url, params)

Этот код стоит вставить в файл .py, а свой, пользовательский код писать после него.

Вот так, например, можно узнать дату выхода фильма "300 спартанцев": make_tmdb_api_request(method='/movie/1271', api_key='<ключ апи>')['release_date'].

В этом задании нужно написать скрипт, который узнает бюджет фильма "Пила 2" и выведет его в консоль. Номер фильма – 215.

Теоретическая справка: документация модулей urllib.request, urllib.parse, json, статья про json на Википедии.

  1. Создать свою базу фильмов ============================

Теперь скачаем информацию о одной тысяче фильмов с ТМДБ себе на компьютер.

Всю скачанную информацию надо скачать и запихать в огромный список словарей (один фильм – один словарь). Весь огромный список сохранить в файл в формате json.

Сохранять можно не только информацию, которую выдаёт get-movie-details, есть много других интересных ручек АПИ. Например, get-movie-keywords, который возвращает ключевые слова сюжета или get-movie-lists, который возвращает пользовательские плейлисты, которым принадлежит этот фильм.

Теоретическая справка: ручка АПИ (она же эндпоинт, хэндл или метод АПИ) – кусок АПИ, с которым можно взаимодействовать. get-movie-details, get-movie-keywords, get-movie-lists – примеры ручек АПИ. Все ручки описаны в документации АПИ (в нашем случае это документация ТМДБ).

Юридическое замечание: вообще говоря, правила использования запрещают скачивать и хранить информацию с ТМДБ. В учебных целях с условием того, что через пару дней ты этот файл удалишь – можно.

  1. Поиск по своей базе фильмов ==============================

У нас есть своя база фильмов, но мы не умеем ей пользоваться. Исправим это.

В этом задании требуется написать скрипт, который будет спрашивать у пользователя слово и выводить названия всех фильмо из базы, в названии которых есть это слово (или это слово является подстрокой слова в названии).

Например, для ввода "пила", я рассчитываю увидеть все части пилы и, например, "Счастья нет, но есть пила". Если эти фильмы были скачаны с ТМДБ.

  1. Рекомендатор фильмов =======================

Теперь нужен скрипт, который подскажет мне, какие фильмы мне стоит посмотреть.

Работает так: я запускаю скрипт, ввожу точное название фильма, который мне нравится и вижу список рекомендованных мне фильмов.

В отборе учавствуют только фильмы из скачанного файла, сам скрипт на ТМДБ не ходит.

Алгоритм поиска похожих фильмов придумай свой: по похожему бюджету, рейтингу, совпадающих словах в сюжете, вхождению в одинаковые плейлисты... что угодно, дай волю изобретательности.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment