From c1a4d1d30782950f342f167e29b4e28bf8029761 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sun, 10 May 2026 00:38:13 +0600 Subject: [PATCH] =?UTF-8?q?[2026-05-09]=20music=20download=20practices=20?= =?UTF-8?q?=E2=80=94=20hitmotop,=20mp3party,=20musify=20trap?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- personal/music-download-practices.md | 189 +++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 personal/music-download-practices.md diff --git a/personal/music-download-practices.md b/personal/music-download-practices.md new file mode 100644 index 00000000..d836f8c4 --- /dev/null +++ b/personal/music-download-practices.md @@ -0,0 +1,189 @@ +# Скачивание музыки — практики и инструменты + +Документ составлен по итогам сессии загрузки ~165 треков на SD-карту (май 2026). + +## Источники — рейтинг эффективности + +### ⭐⭐⭐ hitmotop.com — основной рабочий инструмент + +**Сайт:** https://rus.hitmotop.com (Россия), https://eu.hitmotop.com (Европа) + +Прямые ссылки на mp3 без логина, без JS. Работает через curl напрямую. + +**Как найти ID трека:** +- Страница артиста: `https://rus.hitmotop.com/artist/{id}` — пагинация `/start/48`, `/start/96` и т.д. +- Прямая страница трека: `https://rus.hitmotop.com/song/{id}` +- Поиск: `https://rus.hitmotop.com/search?q={query}` — **внимание**: без JS возвращает пустую страницу. Для поиска song ID используй web_search (`site:rus.hitmotop.com "Артист Трек"`). + +**Структура download-ссылки:** +``` +https://rus.hitmotop.com/get/music/{YYYYMMDD}/{Artist}_-_{Track}_{id}.mp3 +``` + +**Bash — скачать по song ID:** +```bash +UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" +curl -sL "https://rus.hitmotop.com/song/48847061" -H "User-Agent: $UA" -o /tmp/t.html +url=$(grep -o "get/music/[^\"']*mp3" /tmp/t.html | head -1) +curl -sL "https://rus.hitmotop.com/$url" -H "User-Agent: $UA" -o "track.mp3" +``` + +--- + +### ⭐⭐ mp3party.net — хорош для русскоязычного + +**Сайт:** https://mp3party.net + +Поиск работает через curl, возвращает прямые CDN-ссылки в HTML. + +```bash +UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" +url=$(curl -sL "https://mp3party.net/search?q=КняZz+Байкеры" \ + -H "User-Agent: $UA" \ + | grep -o '"https://dl[^"]*\.mp3"' | head -1 | tr -d '"') +curl -sL "$url" -H "User-Agent: $UA" -o "track.mp3" +``` + +**Ограничение:** Rate limit при 10+ запросах/мин. Часть треков отсутствует. + +--- + +### ⭐⭐ classicalmusicarchive.org (через classicals.de) — классика + +**Сайт:** https://www.classicals.de + +Роялти-фри записи. Прямые ссылки на CDN. + +```bash +curl -sL "https://www.classicals.de/saint-saens-danse-macabre" \ + | grep -o "https://library[^\"']*mp3" | head -1 +``` + +--- + +### ⭐⭐ chosic.com — классика CC-лицензия + +**Сайт:** https://www.chosic.com + +Прямые ссылки в `/wp-content/uploads/`. Работает без JS. + +--- + +### ⚠️ musify.club — СЛОМАН (требует логин, май 2026) + +**Статус:** `/track/dl/` редиректит на `/login`. + +**Ловушка:** `curl -L` молча сохраняет HTML-страницу логина (~130-140KB). Файл проходит проверку по размеру, но внутри HTML. В сессии мая 2026 это привело к тому, что **125 из 165 файлов оказались мусором** — обнаружено только после переноса на локальную машину. + +**Детекция:** +```bash +file track.mp3 | grep -q "HTML" && echo "МУСОР — удалить и перекачать" +``` + +--- + +### ℹ️ Другие сайты + +| Сайт | curl-совместим | Примечание | +|------|---------------|------------| +| sefon.pro | Частично | Хорошая база, русский рок | +| melody.az | Частично | Небольшая база, транслит URL | +| drivemusic.club | Нет (JS) | CDN требует JS | +| spaces.im | Нет | Только стриминг | +| zaycev.net | Нет | Требует JS | + +--- + +## Батч-скачивание — рабочий паттерн + +### Bash-шаблон с проверкой HTML + +```bash +#!/bin/bash +BASE="$HOME/Downloads/music" +UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15" +LOG="$HOME/dl.log" + +urlencode() { printf '%s' "$1" | jq -rR @uri; } + +dl() { + local dir="$BASE/$1" query="$2" fname="$3" + mkdir -p "$dir" + local out="$dir/$fname.mp3" + + # Пропустить если уже скачан и не мусор + if [ -f "$out" ]; then + file "$out" | grep -qv "HTML" && echo "skip: $fname" && return + rm "$out" # удалить HTML-заглушку + fi + + local url + url=$(curl -sL "https://mp3party.net/search?q=$(urlencode "$query")" \ + -H "User-Agent: $UA" \ + | grep -o '"https://dl[^"]*\.mp3"' | head -1 | tr -d '"') + + [ -z "$url" ] && echo "✗ not found: $fname" | tee -a "$LOG" && return + + curl -sL "$url" -H "User-Agent: $UA" -o "$out" + + # Обязательная проверка на HTML-мусор + if file "$out" | grep -q "HTML"; then + rm "$out" + echo "✗ got HTML: $fname" | tee -a "$LOG" + return + fi + echo "✓ $fname" | tee -a "$LOG" +} +``` + +### Проверка после скачивания (обязательно перед переносом) + +```bash +# Найти все HTML-заглушки +find ~/Downloads/music -name "*.mp3" -exec sh -c \ + 'file "$1" | grep -q "HTML" && echo "$1"' _ {} \; + +# Найти слишком маленькие (<100KB) +find ~/Downloads/music -name "*.mp3" -size -100k -ls + +# Счёт хороших/плохих +find ~/Downloads/music -name "*.mp3" | while read f; do + file "$f" | grep -q "HTML" && echo "BAD: $f" || echo "OK" +done | sort | uniq -c +``` + +--- + +## TrueNAS — структура Music + +**Путь:** `/mnt/RED_2TB/storage/Music/` +**Доступ:** `ssh truenas_admin@mallexxx.duckdns.org` + +``` +Music/ +├── !A Not sorted/ +├── !Pop, Club, Любэ/ +├── !Retro/ +├── !Rock&Folk/ ← основная рок-коллекция +├── !Детские/ +├── !Рэп, Шансон/ +└── z Другое, Enigma, Ленинград/ +``` + +**WMA на NAS:** 565 файлов (в основном The Prodigy, Дискотека Авария, старые радиозаписи). Конвертация не делалась — отдельная задача при необходимости. + +### HTML-ссылки на треки + +TrueNAS без дополнительных сервисов HTTP не отдаёт. Варианты: +- **Navidrome** (docker) — DLNA + веб-плеер + REST API, ссылки вида `http://nas:4533/rest/stream?id=...` +- **Nginx file server** — простой листинг, ссылки `http://nas/music/Артист/Трек.mp3` +- **Samba** → монтировать локально → `file://` ссылки + +--- + +## Связанные документы + +- [[personal-os-architecture]] + +--- +*Создано: 2026-05-09 | Сессия: загрузка ~165 треков на SD-карту*