С помощью Spotify API можно за пару минут узнать свою ключевую музыкальную статистику в стиле Spotify Wrapped и сделать с ней всё, что захочется. Библиотека Spotipy максимально облегчает работу, а компактный HTML-отчёт в духе Wrapped получится буквально за сотню строк кода!
Что такое Spotify Wrapped и зачем нужен этот проект?
Каждый год Spotify радует пользователей яркими инфографиками Wrapped — там показывают ваши любимые треки и артистов, которых вы слушали чаще всего. Но такие данные доступны не только в конце года: часть статистики можно получить в любой момент через открытый API Spotify.
Я решил "вытащить" музыкальные итоги года через API и показать их максимально просто и удобно. Конечно, это не настолько эффектно, как оригинальный Wrapped, но теперь вы сможете получить и обработать эти данные сами — без лишних ожиданий и ограничений.
С библиотекой Spotipy вся логика сводится к простым, гибко настраиваемым командам.
Весь исходный код я выложил на GitHub — скачивайте, пробуйте и подстраивайте под себя.
Что такое Spotipy и как с ней начать?
Spotipy — удобная Python-библиотека для работы с Spotify API. Она избавляет от рутины с низкоуровневыми запросами и берет на себя все сложности, включая авторизацию по OAuth.
Рекомендую создать отдельное виртуальное окружение и установить spotipy туда. После установки просто выполните команду:
Как получить доступ к API Spotify?
Если у вас есть аккаунт Spotify, заходите на панель разработчика Spotify for Developers и создайте новое приложение.
Укажите способ доступа "Web API" и добавьте redirect URI. Для запуска на локальном компьютере советую указывать IP-адрес (например, 127.0.0.1), а не localhost — так точно не возникнет ошибок.
В этом примере для демо не имеет значения, какой redirect URI вы укажете — даже если появится ошибка, консольный скрипт все равно сработает как надо.
Когда приложение создано, скопируйте Client ID и Client Secret — они нужны для авторизации и их можно найти в разделе информации о приложении.
Теперь можно спокойно подключаться через Spotipy. Лучше всего прописать нужные переменные среды вот так:
Где хранить переменные — решайте сами: в .bashrc, отдельном скрипте или прямо в терминале. В моём репозитории есть шаблон envvars.sh — просто заполните его и активируйте через команду . envvars.sh.
Самый простой "Spotify Wrapped" на Python
Когда всё подготовлено, самое время разобраться, как устроен основной код и как он работает с вашими данными из Spotify.
Для начала я написал функцию init — она возвращает объект Spotify, сразу настроенный через переменные среды для авторизации пользователя. При первом запуске потребуется подтвердить доступ к своему аккаунту Spotify.
Далее идёт print_preamble — эта функция просто печатает заголовок и оглавление в формате Markdown. Так удобнее, чем сразу в HTML: Markdown можно читать прямо в редакторе, смотреть в терминале через glow или быстро преобразовать в HTML.
Две следующие функции напрямую запрашивают данные через API — и на этом, по сути, всё!
В каждой используется нужный метод объекта Spotify: мы задаём максимальный limit и нужный временной диапазон. Хотите посмотреть другие тенденции — просто меняйте time range.
Следом идут функции для красивого вывода информации по исполнителям и трекам. Они получают массив объектов, берут для каждого ссылку на Spotify и картинку (обычно возвращается три варианта размеров).
Для каждого элемента добавляется ссылка item["external_urls"]["spotify"]. Кликните на неё — сразу попадёте на страницу исполнителя или трека в Spotify. Если хочется больше интерактива — подключайте Spotify Web Playback SDK и делайте полноценный web-плеер.
Дальше всё просто: вызываем эти функции по очереди и собираем нужные данные. Я решил для полноты сделать 6 запросов к API: три по топ-артистам (короткий, средний и длинный период) и три по трекам. Вы легко можете подстроить это под себя.
А чтобы добавить немного аналитики — я встроил подсчёт жанров. В функции print_genre_stats анализируются жанры у 50 самых популярных исполнителей за прошлый год, считается количество и выводится топ-10 жанров.
Программа запускается одной командой — всё предельно просто:
А если хотите результат в виде markdown-файла — просто перенаправьте вывод скрипта в файл:
Затем рекомендую перегнать Markdown в HTML через pandoc — так отчёт получится максимально похожим на настоящий Spotify Wrapped:
Эта команда применит готовый CSS-стиль из репозитория, чтобы страница выглядела "по-спотифаевски".
А дальше — простор для творчества: добавляйте графики, улучшайте оформление, подключайте web-плеер или расширяйте аналитику. Хотя API ограничивает некоторые топы, вполне можно вытянуть и дополнительную инфу о сохранённых альбомах и подписках на артистов.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru