Skip to content

Instantly share code, notes, and snippets.

@Melevir 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
You can’t perform that action at this time.