# 🎵 Music Loader Загрузчик музыки из онлайн-источников с поддержкой интерактивного поиска, пакетной загрузки и импорта плейлистов. ## 📋 Возможности - 🔍 **Интерактивный поиск** — выбор трека из списка найденных результатов - 📜 **Пакетная загрузка** — скачивание треков из плейлиста (файл `.txt`) - 🌐 **Несколько источников** — поддержка hitmo и youtube - 🎨 **Обложки треков** — автоматическое добавление обложек из Яндекс Музыки и iTunes - 📥 **Импорт плейлистов** — загрузка списков треков из плейлистов Яндекс Музыки и Spotify - 📀 **Поиск альбомов** — поиск и экспорт альбомов в плейлист из iTunes и Яндекс Музыки - ⏱️ **Автоматическая задержка** — пауза между загрузками для избежания блокировок - 📁 **Гибкое хранение** — настройка папки для сохранения файлов ## 🚀 Требования - Python 3.13+ - Библиотеки: ```bash pip install requests beautifulsoup4 tqdm mutagen pillow yandex_music yt_dlp ``` ## 📖 Использование ### Базовый синтаксис ```bash python main.py [опции] ``` ### Опции | Опция | Описание | |-------|----------| | `-h`, `--help` | Показать справку | | `-a`, `--album` | Импортировать альбом (itunes, yandex) | | `-i`, `--import_playlist` | Импортировать плейлист (yandex, spotify) | | `-p`, `--playlist` | Путь к файлу плейлиста (`.txt`) | | `-s`, `--source` | Источник: `hitmo`, `youtube` (по умолчанию: `hitmo`) | ### Примеры **Интерактивный режим** (поиск и выбор трека): ```bash python main.py python main.py -s youtube ``` **Пакетная загрузка** (из плейлиста): ```bash python main.py -p playlist.txt python main.py -s youtube -p playlist.txt ``` **Импорт плейлиста**: ```bash python main.py -i yandex python main.py -i spotify ``` **Поиск альбома**: ```bash python main.py -a ``` ## 🎵 Импорт плейлиста из Яндекс Музыки Для импорта плейлиста из Яндекс Музыки: 1. Откройте нужный плейлист на [music.yandex.ru](https://music.yandex.ru) 2. Нажмите на **три точки** (⋮) в верхней части плейлиста 3. Выберите **«Поделиться»** → **«HTML-код»** 4. Скопируйте ссылку из открывшегося окна 5. Запустите: ```bash python main.py -i yandex ``` 6. Вставьте скопированный HTML-код После этого в текущей папке появится файл `<название_плейлиста>.txt` с треками. ## 🎵 Импорт плейлиста из Spotify Для импорта плейлиста из Spotify: 1. Открой https://open.spotify.com/ в браузере 2. Нажми **F12** (откроются DevTools) 3. Перейди во вкладку **Network** 4. Останови запись (кнопка ⏹️) и очисти историю (кнопка 🚫) 5. **Перед открытием плейлиста** нажми запись (кнопка ⏺️) 6. Перейди на интересующий плейлист 7. Дождись полной загрузки и отключи запись 8. Найди элементы с названием **query** в начале списка (или прокликай первые 10–15 запросов) 9. Нажми на один из элементов **query** 10. Перейди во вкладку **Response** — если видишь длинный JSON, это нужный запрос 11. ПКМ по элементу → **Copy** → **Copy response** 12. Создай файл с расширением `.json` и сохрани в него скопированный ответ 13. Запусти: ```bash python main.py -i spotify ``` 14. Укажи путь к созданному JSON-файлу После этого в текущей папке появится файл `<случайное_имя>.txt` с треками. ## 📀 Поиск и импорт альбома Для поиска и импорта альбома: 1. Запустите: ```bash python main.py -a ``` 2. Введите артиста и название альбома в формате: `артист название` 3. Альбом будет найден в iTunes или Яндекс Музыке 4. В текущей папке появится файл `<название_альбома>.txt` с треками ## 📝 Формат плейлиста Создайте текстовый файл (например, `playlist.txt`) в формате: ``` артист название_трека еще артист еще трек booker джанк ``` Каждая строка — отдельный запрос на поиск и загрузку. ## ⏱️ Задержка между загрузками При использовании плейлиста между скачиваниями треков автоматически добавляется задержка, указанная в `settings.json` (по умолчанию: **1 секунда**) для предотвращения временной блокировки со стороны сайта. ## ⚙️ Настройки Создайте файл `settings.json` в корне проекта: ```json { "delay": 1, "save to": "downloads/", "cover": true, "source": "hitmo", "proxy": "http://ip:port" } ``` | Параметр | Описание | |----------|----------| | `delay` | Задержка между запросами (сек) | | `save to` | Папка для сохранения треков | | `cover` | Автоматическая установка обложек | | `source` | Источник по умолчанию (`hitmo` или `youtube`) | | `proxy` | Прокси для YouTube (требуется для работы в РФ) | ## 🌐 Источники | Источник | Описание | |----------|----------| | **hitmo** (ru, eu) | Основной источник | | **youtube** | Вспомогательный источник (требуется прокси для работы в РФ) | ## 🎨 Обложки и метаданные | Сервис | Обложки | Альбомы | Плейлисты | |--------|---------|---------|-----------| | Яндекс Музыка | ✅ | ✅ | ✅ | | iTunes | ✅ | ✅ | ❌ | | Spotify | ❌ | ❌ | ✅ | ## 📂 Структура проекта ``` music_loader/ ├── main.py ├── core/ │ ├── album.py # Поиск альбома, экспортирование в плейлист │ ├── cover.py # Поиск, скачивание и установка обложек │ ├── hitmo.py # Парсинг сайта, поиск и скачивание треков │ ├── import_playlist.py # Импорт плейлистов из Яндекс и Spotify │ └── youtube.py # Поиск и скачивание треков с YouTube ├── settings.json ├── LICENSE ├── README.md └── .gitignore ``` --- > ## Дисклеймер | Disclaimer > Данный проект предназначен исключительно для личного и образовательного использования. > > Программа использует сторонние источники данных для поиска треков, обложек и метаданных. В отдельных случаях возможны неточности в результатах поиска, особенно при работе с плейлистами. > > Пользователь несет полную ответственность за соблюдение авторских прав и условий использования контента при загрузке или использовании материалов, полученных с помощью данного проекта. > > Автор проекта не связан с сервисами, используемыми программой, и не несет ответственности за возможные ограничения, блокировки или иные действия со стороны сторонних сервисов. > > This project is intended for personal and educational use only. > > The software uses third-party sources to search for tracks, artwork, and metadata. In some cases, inaccuracies may occur in search results, especially when processing playlists. > > Users are solely responsible for complying with copyright laws and the terms of service of the platforms when downloading or using content obtained through this project. > > The project author is not affiliated with the services used by the software and is not responsible for any restrictions, bans, or other actions imposed by third-party platforms. > > **сделано:** s13bby