Написал небольшой скрипт-качалку для сервиса Яндекс.Музыка.
Скрипт позволяет скачивать как отдельные композиции, так и альбомы или плейлисты целиком. Интерфейс консольный и выглядит следующим образом:
В процессе работы:
Скрипт использует сторонние модули (умеет определять их отсутствие и сообщать об этом) и портированный с JavaScript на Perl алгоритм хэширования Яндекса (находится в отдельном файле YaHash.pm), он необходим для скачивания трека.
В общем пользуйтесь.
Скачать: ya-music
GitHub: yandex-music-download
Update (23.01.15): Вышло обновление. Версия на GitHub тоже была обновлена.
Update (27.01.15): Добавлен прогресс бар, исправлена ошибка скачивания, если трек был удален с Яндекса: скачать.
Update (30.01.15): Что-то часто мелочи меняться стали. На данный момент актуальная версия на GitHub.
Update (21.04.20): Обновил README: добавил информацию по использованию для типичных систем и прочую атрибутику приличного оформления. Все как обычно на GitHub.
А какой у яндекс-музыки битрейт?
192
Спасибо
Установил АктивПерл 5.18.1. При запуске скрипта пишет "Please, install this modules: Getopt::Long::Descriptive". Mенеджер пакетов по ключ. слову getopt показывает Getopt-Long 2.41 и он установлен.
Возможен ли запуск под АктивПерл?
Попробуй поставить этот модуль через cpan.
Та же проблема. ActivePerl 5.16.3, Getopt::long 2.42, устанавливал через cnap. В чём проблема?
Заработало после ppm upgrade Getopt::Long::Desciptive
скрипт еще работает?
Запусти, да проверь...
классный скрипт tnx
все кул все айс автору респект
только скрипт иногда трек не до конца скачивает...
надо сделать докачку на горячую тоесть после того как якобы трек скачался
смотреть его размер и сравнивать в Content-Length в ответе сервера для этого файла
и если не совпадают то выдавать повторный запрос с полем Range: 123- для скачивания
хвоста файла и делать это в цикле мало ли сколько разрывов будет пока размер
файла не совпадет с Content-Length первого запроса ибо он будет уменьшаться с
кваждым запросом Range: 123-
автор сделай это и будет вообще кул
thanks
чтобы проверить правильность докачки возьми Tcpview руссиновича и в нем для perl.exe во время скачивания трека поделай Close Connection скрипт должен после этого докачивать хвост файла тут же... так делают например Internet Download Manager
и еще сделал бы проект на github там есть удобный issue tracking чтоб не писать тут про всякие баги связанные со скриптом
Проект ради одного скрипта, который не планирую развивать? Мне это не нужно. Отсутствие докачки являлось бы багом, если такой функционал был бы заявлен.
А ещё целевой хост может не поддерживать докачку, хотя в контексте Яндекса я не смотрел.
В общем, если надо, то берите исходный код и ваяйте что угодно.
>>>Отсутствие докачки являлось бы багом, если такой функционал был бы заявлен.
это самый что ни на есть баг... я ставлю скачку а он мне скачивает иногда по пол файла и переходит к следующему... этот функционал не должен быть заявлен он должен быть по умолчанию
У меня таких проблем на 100+ файлах не наблюдалось. Хочется функционал, вперед, исходный код доступен.
Тебе дают просто так, а ты еще и не доволен. Тебе ведь ничего не обещали
Скрипт работает на данный момент. Через activeperl. Спасибо вам Kaimi.
Странно, пробовал и эктивперл и вишенку. как не вертел не запускается (с перлом, прямо говорю знаком плохо, это не мое направление, но вот стащить музыку надо :) ). что не так?! есть ли возможность установить не через спан эту либу, если да, то как?! спасибо.
Проблема не раскрыта. В чем затык?
Огромное спасибо все работает
Ругается на Use of uninitialized value $_ in substitution (s///) at C:\ya\ya.pl line 58.
С какими аргументами скрипт был запущен, ошибка стабильно повторяется?
Без аргументов и с аргументами аналогично скрину выше. Повторяется регулряно
О каком скрине идет речь?
http://kaimi.io/wp-content/uploads/2013/11/ya-downloader-ui.png
Есть два варианта:
1. Опции неправильные указываешь
2. Криво Perl поставлен
подскажите пожалуйста как установить качалку на мак????
чего то не работает.. как узнать id плейлиста?
формат такой: http://music.yandex.ru/#!/users/dfatakov/playlists/2
ya.pl -p 2 -k dfatakov
Вау вау. Спасибо, работает!
вы тут все такие программисты, Как этим пользоваться? Или кто скачал все файлы, поделитесь... ссылку там какую нить... Заранее спасибо
Все файлы? Но их же там over 9000...
Как пользоваться: написано здесь
выполняю
ya.pl -p 1034 -k ya-playlist
Почему у меня выдает ошибку ?
[INFO] Fetching playlist info: 1034 [ya-playlist]
[ERROR]Can't get track list info
Потому что вас в Яндексе забанили видимо
на сайте яндекса музыка играет! За что забанили? я ниразу не скачивал этим скриптом, ни одного трека.
Да понятия не имею, у меня нормально отрабатывает. Может у вас интернет через прокси, не знаю.
Видимо из-за прокси или других заморочек. Дома все отлично скачалось. Спасибо!
спасибо огромное! искал что-то подобное. на 29.03.14 работает.
пока проверял только под windows.
upd:
отлично работает и под mac os x 10.7
у меня установлены инструменты xcode command line tools. не знаю, есть ли в них необходимость, и с помощью какого именно из perl – встроенного от apple или «active perl» в итоге запускается скрипт, но всё работает.
для работы под mac os x требуется добавить через terminal два модуля:
sudo perl -MCPAN -e 'install JSON::PP'
и
sudo perl -MCPAN -e 'install Getopt::Long::Descriptive'
мало ли кому-то пригодится..
А можно попросить автора допилить сграбливание номера трека и альбома? было бы вообще идеально.
В смысле?
и еще хотел докинуть инструкцию, по тому что мне приходилось разобраться самому:
1. Качаем и ставим ActivePerl
2. Открываем cmd и пишем:
cpan Modern::Perl
3. После установки опять в cmd:
cpan Modern::Perl Getopt::Long::Descriptive
4. Готово! теперь вызов команды perl ya.pl не будет вызывать ошибок
Кстати, а как все таки определить точный ip плейлиста? пытаюсь скачать плейлист олдскульных сборников http://music.yandex.ru/#!/users/muz-winamp/playlists/. Но когда указываю, например id плейлиста Метал - 1051, скрипт почему то видит плейлист "Народные песни".
Видимо скрипт умеет скачивать только из общей базы. А как сделать так, чтобы он качал плейлист, составленный пользователем, в данном случае, winamp?
http://music.yandex.ru/#!/users/muz-winamp/playlists/1051
ya.pl -p 1051 -k muz-winamp
Объясните лоху, как пользоваться.
По-подробнее, пожалуйста.
Что я делаю не так?
1) скачал и установил http://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.16.3.1604/ActivePerl-5.16.3.1604-MSWin32-x64-298023.msi
2. Открыл cmd и написал:
cpan Modern::Perl (пбежал текст в конце так написал:
CHROMATIC/Modern-Perl-1.20140107.tar.gz
D:\PROGRA~2\ACTIVE~1\site\bin\dmake.exe -- NOT OK
CPAN: YAML::XS loaded ok (v0.41)
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible)
3. После установки опять в cmd:
cpan Modern::Perl Getopt::Long::Descriptive (в этот раз очень много текста было)
4) ввожу в cmd:
C:\Users\GA Z77-D3H>perl ya.pl
Can't open perl script "ya.pl": No such file or directory
C:\Users\GA Z77-D3H>
Все не так. Предлагаю учить английский или хотя бы почитать http://kaimi.io/?p=976
Автор, низкий тебе поклон. У тех у кого консольные команды выше выдают ошибки, попробуйте запускать командную строку от имени администратора
Кто подскажет, программа сейчас работает?
Просто сервис яндекс музыки сменил интерфейс, а скрипт у меня выдает ошибку
[ERROR] Can't get track list info. И я не пойму, то ли причина ошибки у меня, то ли из-за обновленного интерфейса Yandex-Music.
Если причина из за обновления сервиса - то стоит ли ожидать обновления скрипта?
Не работает. Пока что таких планов нет.
Эх, жаль. На Яндекс-Музыке странный репертуар, то довольно известных вещей нету, а порой весьма редкие альбомы встречаются, которых не то, что на торрентах, но даже на Soulseek не найти.
Плагин для Хрома для потрековой скачки с ЯМ тоже после обновления сервиса перестал работать.
В общем, если вдруг - было бы здорово.
Недавно сайт Яндекс музыки обновился - я написал расширение для Google Chrome, которое поддерживает новую версию сайта и позволяет качать альбомы и плейлисты в один клик: https://github.com/egoroof/yandex-music-fisher
А как скачать потреково ?
При нажатии на СИНИЙ значок скачки нет !
Спасибо, главное никаких танцев с бубном вокруг перла. Пол дня потратил на воспоминания работы с консолью
kuku :
Спасибище огромное!!!
автор помоги плиз, почему останавливается на удаленной как я понял песне в плейлисте? как быть? так хотелось скачать отсюда http://music.yandex.ru/oldschool/ =\\\
D:\ya-music1>ya.pl -p 1046 -k muz-winamp
[INFO] Fetching playlist info: 1046 [muz-winamp]
[INFO] Playlist title: Музыка 90-х
[INFO] Tracks total: 316
[INFO] Trying to fetch track: Scorpions - Send Me An Angel
[OK] Saved track at ./Scorpions - Send Me An Angel.mp3
[INFO] Trying to fetch track: Haddaway - What Is Love
[OK] Saved track at ./Haddaway - What Is Love.mp3
[INFO] Trying to fetch track: Иванушки International - Тополиный пух
[OK] Saved track at ./Иванушки International - Тополиный пух.mp3
[INFO] Trying to fetch track: Los Del Mar - Macarena
[OK] Saved track at ./Los Del Mar - Macarena.mp3
[INFO] Trying to fetch track: Cocteau Twins - Seekers Who Are Lovers
[OK] Saved track at ./Cocteau Twins - Seekers Who Are Lovers.mp3
[INFO] Trying to fetch track: Гарик Сукачёв - Напои меня водой
Use of uninitialized value $storage_dir in sprintf at D:\ya-music1\ya.pl line 21
0.
Not an ARRAY reference at D:\ya-music1\ya.pl line 231.
D:\ya-music1>
Исправил и обновил тут и на гитхабе.
Помогите, добрый человек!
Пробую запустить, и:
d:\music>perl ya.pl -a 1077
[INFO] Fetching album info: 1077
[INFO] Album title: Populations
[INFO] Tracks total: 12
[INFO] Trying to fetch track: Novo Navis - Liber Song
[ERROR] Can't get track url
[INFO] Trying to fetch track: Novo Navis - Mahiru No Yume
[ERROR] Can't get track url
[INFO] Trying to fetch track: Novo Navis - Ukulele Oh Le Le
[ERROR] Can't get track url
[INFO] Trying to fetch track: Novo Navis - No More Champagne With You
[ERROR] Can't get track url
[INFO] Trying to fetch track: Novo Navis - Tenshi Ni Narenai
ЧЯДНТ
Яндекс кое-что поменял. Я поправил, перекачай с GitHub.
не работает. не могу даже установить расширение в хром
Какое еще расширение в хром?
я так понимаю то что я скачал нужно разархивировать и перетащить в chrome://extensions/
Это консольный скрипт на Perl. Причем тут расширения Chrome, я вообще понятия не имею.
как этим скриптом пользоваться?
Поставить ActivePerl, потом http://kaimi.io/?p=976
я думал что Ваш скрипт похожий на этот https://github.com/egoroof/yandex-music-fisher
это приложение устанавливается в хром но музыку не качает(((
@Zil130, обновил инструкцию, попробуйте ещё раз
Ваш скрипт имеет ограничение на количество песен в плейлисте? При загрузке песен загружает 147 трека и останавливается при том, что в плейлисте песен больше.
Возможно, не проверял.
Пофиксил на GitHub. Вроде...
Проверил, скрипт загрузил весь плейлист (700+ треков). Спасибо за исправление.
Добрый день.
Программа при выполнении выдала следующее:
[INFO] Fetching playlist info: 3 [otselnik]
[INFO] Playlist title: Мне нравится
[INFO] Tracks total: 1043
[DEBUG] main::get_playlist_tracks_info(386): Request failed
[ERROR] Can't get track list info
Я так понимаю или яндекс опять поменял апи, или что-то еще.
Альбомы, тем не менее качает без проблем.
Яндекс не хочет отдавать информацию по http и требует https теперь. Я поправил, можно самому сменить в YANDEX_BASE http на https.
@Kaimi, Спасибо, помогло.
В многодисковых альбомах утилитка качает только треки первого диска, можно починить?
Например: album/1719032 - выкачивает только первые 50 треков.
Вроде поправил.
Ага, починилось, спасибо.
Снимаю пред вами шляпу!!! все четко и работает!!!Большое человеческое спасибо!!!!
Теги не прописывает?
Нет
Здравствй, Kaimi, спасибо за скрипт, экономит кучу времени. Было бы хорошо если б нумеровал трэки ("01. Имя файла", "02. Имя файла"). Так приходится в Total Commander'е multirename'ом нумеровать (отсортировав по дате в обратном порядке получается исходный порядок файлов в альбоме).
Т.е. чисто нумерацию в соответствии с номером трека в альбоме? Попозже сделаю опцию.
А есть у кого-нибудь проблема с кодировкой русскоязычных названий? Слетают в "абракадабру". А в общем, спасибо за дельный скрипт.
На Windows? На Linux вроде нормально
пытаюсь запустить под Ubuntu - вылетает с кучей ошибок
use: команда не найдена
$'\r' команда не найдена.
У вас linux отдельный скрипт?
Скрипт надо с помощью Perl запускать
Что-то исправил, наверное будет работать
Спасибо за опубликованные труды, но хотелось видеть примеры запросов на практике ))
Скачал архив, поставил PERL (Active), поставил по просьбе модуль дополнительно.
Запустил CMD от администратора (Windows 8.1 x64)
Запускаю, команду ya.pl -a 21940
- Выдает ошибку Can't get track list info
Запускаю команду ya.pl -a 21940 -t 178529
- Выдает ошибку Can't get track list info
Почитал коменты и заменил YANDEX_BASE http - на https
- Не помогло, та же ошибка
Заменил также DOWNLOAD_PATH_MASK http - на https
- Не помогло, та же ошибка
Очень хочется качать песенки )) Есть идеи почему такое происходит?
Разул глаза, скачал с GitHub последнею версию и все работает! Ура! Огромное спасибо за прекрасный инструмент ))
Привет
Взял последнюю версию гитхаба. Все качает нормально, но вот некоторые треки переименовать после скачивания не может и зависает если название трека содержит символы не из cp1251, например "&".
Линк для примера "https://music.yandex.ru/album/1440327/track/13245163"
& не является каким-то особенным символом.
ya.pl -a 1440327 -t 13245163 на windows нормально скачал и переименовал. Может какой-то еще пример?
Может варнинги писать в консоль на некоторых треках, но именно зависания я не наблюдаю.
Может я чего напутал или затык какой был. Сегодня скрипт отработал и без затыков. Вот только странность какая то. foobar2000 - обложки альбомов отображает нормально. А вот стандартный проигрыватель Win10 Goove и музыкальный плеер на WP8 все обложки отображает так буд-то все они не догрузились (рассыпаная мозайка). Хотя файлы в которые обложки закидывал через Mp3tag или tag&rename отображаются во всех плеерах без ошибок.
Может быть есть какие-то особенные требования к формату файлов обложек. Надо эксперименты ставить.
Сама Windows как обложки отображает? Если выставить крупные значки или что-то такое.
Всегда mp3 файлы показывает иконку ассоциированной программы. Изображение из тега эксплорер не отображает.
Разобрался, о причине можно почитать тут
http://search.cpan.org/~ilyaz/MP3-Tag-1.13/lib/MP3/Tag.pm - ctrl+f id3v23_unsync
Обновил на гитхабе.
Теперь вроде нормально) спс
Здравствуйте,
А к какому файлу идет обращение при запуске ya.pl? У меня видимо нет ассоциации на связь с перлом в виндоус.
У меня на 10ке выдает ошибку:
Expression form of "eval" at line 60, column 2. See page 161 of PBP. (Severity: 5)
perl.exe
Значит запускать как: perl ya.pl
Вообще, судя по логу, перл как раз подхватывает скрипт, но ему не нравится код. Какая версия Perl стоит?
Спасибо, помогло perl ya.pl
Версия ActivePerl-5.20.2.2002-MSWin32-x64-299195.msi
Видимо автоматически не ассоциируются файлы на Win10. До этого на 8.1 такой проблемы не возникало.
Супер! Все работает. Никогда не имел дело с Perl. Установил под Вин7, запустил, скачал!