Skip to content

slon-hk/playlist_comparator

Repository files navigation

Анализатор Совместимости Плейлистов

Данный проект представляет собой веб-сервис, предназначенный для анализа и сравнения музыкальных плейлистов из двух популярных стриминговых платформ: 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 (для клонирования репозитория).

Шаги установки

  1. Клонируйте репозиторий:

    git clone <URL_вашего_репозитория_на_GitHub>
    cd <название_папки_проекта>
  2. Создайте и активируйте виртуальное окружение:

    python3 -m venv venv
    source venv/bin/activate  # для macOS/Linux
    # venv\Scripts\activate    # для Windows
  3. Установите зависимости: Создайте файл requirements.txt в корне проекта (если его еще нет):

    Flask[async]>=2.0
    spotipy
    yandex-music
    Pillow
    python-dotenv
    # gunicorn или uvicorn (опционально, для продакшена)

    Установите зависимости:

    pip install -r requirements.txt
  4. Настройте переменные окружения: Создайте файл .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 токен для Яндекс.Музыки. Способы его получения могут меняться; часто это делается через инструменты разработчика в браузере при авторизации в Яндекс.Музыке.
  5. Шрифты для генерации изображений: Убедитесь, что файлы шрифтов (например, Inter-Bold.ttf, Inter-Regular.ttf) находятся в папке static/fonts/ вашего проекта, как указано в image_generator.py.

Запуск приложения

  1. Для разработки: Находясь в активированном виртуальном окружении и в корневой папке проекта:

    flask run

    Или, если в app.py используется app.run():

    python app.py

    Приложение обычно доступно по адресу http://127.0.0.1:5000/.

  2. Для продакшена (рекомендуется из-за асинхронности): Используйте ASGI-сервер, например, Uvicorn:

    # pip install uvicorn # если еще не установлен
    uvicorn app:app --host 0.0.0.0 --port 8000 --reload

📂 Структура проекта

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors