Данный проект представляет собой веб-сервис, предназначенный для анализа и сравнения музыкальных плейлистов из двух популярных стриминговых платформ: Spotify и Яндекс.Музыка.
Основная функция сервиса – вычисление коэффициента совместимости двух плейлистов на основе пересечения их трек-листов. Пользователям предоставляется детализированный отчет, включающий процентное выражение совместимости, списки общих музыкальных композиций и исполнителей.
Дополнительно, сервис позволяет генерировать персонализированное графическое изображение с ключевыми результатами анализа для удобного распространения в социальных сетях или личных сообщениях.
Проект нацелен на предоставление пользователям инструмента для исследования музыкальных предпочтений и поиска общих интересов с другими слушателями.
Пример отображения результатов (или сгенерированного изображения):

- Сравнение плейлистов: Поддержка плейлистов из Spotify и Яндекс.Музыки.
- Анализ совместимости: Расчет процента совпадения на основе общих треков.
- Детализированные результаты: Отображение списка общих треков (с указанием исполнителей) и списка общих исполнителей.
- Генерация изображения для шаринга:
- Указание имен двух пользователей.
- Отображение процента совместимости.
- Включение топ-3 общих треков и топ-3 общих исполнителей.
- Стилизация изображения в соответствии с общей темой сайта.
- Пользовательский интерфейс:
- Адаптивный дизайн для корректного отображения на различных устройствах.
- Переключатель тем оформления (светлая/темная).
- Производительность: Асинхронная загрузка данных плейлистов для ускорения обработки.
- Кэширование: Внутрисессионное кэширование результатов сравнения для идентичных пар плейлистов.
- Бэкенд:
- Python 3.9+
- Flask (с поддержкой асинхронности)
- Spotipy (для Spotify API)
- yandex-music (для API Яндекс.Музыки)
- Pillow (PIL) (для генерации изображений)
- python-dotenv (для управления переменными окружения)
- Фронтенд:
- HTML5
- Tailwind CSS
- Vanilla JavaScript
- Шрифты для генерируемого изображения: Inter (или другие, указанные в
image_generator.py)
- Python 3.9 или выше.
pip(менеджер пакетов Python).git(для клонирования репозитория).
-
Клонируйте репозиторий:
git clone <URL_вашего_репозитория_на_GitHub> cd <название_папки_проекта>
-
Создайте и активируйте виртуальное окружение:
python3 -m venv venv source venv/bin/activate # для macOS/Linux # venv\Scripts\activate # для Windows
-
Установите зависимости: Создайте файл
requirements.txtв корне проекта (если его еще нет):Flask[async]>=2.0 spotipy yandex-music Pillow python-dotenv # gunicorn или uvicorn (опционально, для продакшена)Установите зависимости:
pip install -r requirements.txt
-
Настройте переменные окружения: Создайте файл
.envв корневой директории проекта и добавьте ваши API-ключи и токены:SPOTIPY_CLIENT_ID="ВАШ_SPOTIFY_CLIENT_ID" SPOTIPY_CLIENT_SECRET="ВАШ_SPOTIFY_CLIENT_SECRET" YANDEX_MUSIC_TOKEN="ВАШ_YANDEX_MUSIC_TOKEN"
SPOTIPY_CLIENT_IDиSPOTIPY_CLIENT_SECRETможно получить на Spotify Developer Dashboard.YANDEX_MUSIC_TOKEN- OAuth токен для Яндекс.Музыки. Способы его получения могут меняться; часто это делается через инструменты разработчика в браузере при авторизации в Яндекс.Музыке.
-
Шрифты для генерации изображений: Убедитесь, что файлы шрифтов (например,
Inter-Bold.ttf,Inter-Regular.ttf) находятся в папкеstatic/fonts/вашего проекта, как указано вimage_generator.py.
-
Для разработки: Находясь в активированном виртуальном окружении и в корневой папке проекта:
flask run
Или, если в
app.pyиспользуетсяapp.run():python app.py
Приложение обычно доступно по адресу
http://127.0.0.1:5000/. -
Для продакшена (рекомендуется из-за асинхронности): Используйте ASGI-сервер, например, Uvicorn:
# pip install uvicorn # если еще не установлен uvicorn app:app --host 0.0.0.0 --port 8000 --reload
