208 lines
9.6 KiB
Markdown
208 lines
9.6 KiB
Markdown
# 🎵 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
|