Качалка для сервиса Яндекс.Музыка

Написал небольшой скрипт-качалку для сервиса Яндекс.Музыка.
Скрипт позволяет скачивать как отдельные композиции, так и альбомы или плейлисты целиком. Интерфейс консольный и выглядит следующим образом:
ya-downloader-ui
В процессе работы:
ya-downloader-work

Скрипт использует сторонние модули (умеет определять их отсутствие и сообщать об этом) и портированный с 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.

Качалка для сервиса Яндекс.Музыка: 276 комментариев

  1. Установил АктивПерл 5.18.1. При запуске скрипта пишет "Please, install this modules: Getopt::Long::Descriptive". Mенеджер пакетов по ключ. слову getopt показывает Getopt-Long 2.41 и он установлен.
    Возможен ли запуск под АктивПерл?

  2. все кул все айс автору респект

    только скрипт иногда трек не до конца скачивает...
    надо сделать докачку на горячую тоесть после того как якобы трек скачался
    смотреть его размер и сравнивать в Content-Length в ответе сервера для этого файла
    и если не совпадают то выдавать повторный запрос с полем Range: 123- для скачивания
    хвоста файла и делать это в цикле мало ли сколько разрывов будет пока размер
    файла не совпадет с Content-Length первого запроса ибо он будет уменьшаться с
    кваждым запросом Range: 123-

    автор сделай это и будет вообще кул

    thanks

  3. чтобы проверить правильность докачки возьми Tcpview руссиновича и в нем для perl.exe во время скачивания трека поделай Close Connection скрипт должен после этого докачивать хвост файла тут же... так делают например Internet Download Manager

  4. и еще сделал бы проект на github там есть удобный issue tracking чтоб не писать тут про всякие баги связанные со скриптом

    1. Проект ради одного скрипта, который не планирую развивать? Мне это не нужно. Отсутствие докачки являлось бы багом, если такой функционал был бы заявлен.
      А ещё целевой хост может не поддерживать докачку, хотя в контексте Яндекса я не смотрел.
      В общем, если надо, то берите исходный код и ваяйте что угодно.

      1. >>>Отсутствие докачки являлось бы багом, если такой функционал был бы заявлен.

        это самый что ни на есть баг... я ставлю скачку а он мне скачивает иногда по пол файла и переходит к следующему... этот функционал не должен быть заявлен он должен быть по умолчанию

    1. Странно, пробовал и эктивперл и вишенку. как не вертел не запускается (с перлом, прямо говорю знаком плохо, это не мое направление, но вот стащить музыку надо :) ). что не так?! есть ли возможность установить не через спан эту либу, если да, то как?! спасибо.

  5. вы тут все такие программисты, Как этим пользоваться? Или кто скачал все файлы, поделитесь... ссылку там какую нить... Заранее спасибо

  6. выполняю
    ya.pl -p 1034 -k ya-playlist
    Почему у меня выдает ошибку ?
    [INFO] Fetching playlist info: 1034 [ya-playlist]
    [ERROR]Can't get track list info

      1. на сайте яндекса музыка играет! За что забанили? я ниразу не скачивал этим скриптом, ни одного трека.

  7. спасибо огромное! искал что-то подобное. на 29.03.14 работает.
    пока проверял только под windows.

  8. 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'

    мало ли кому-то пригодится..

  9. А можно попросить автора допилить сграбливание номера трека и альбома? было бы вообще идеально.

  10. и еще хотел докинуть инструкцию, по тому что мне приходилось разобраться самому:
    1. Качаем и ставим ActivePerl
    2. Открываем cmd и пишем:
    cpan Modern::Perl
    3. После установки опять в cmd:
    cpan Modern::Perl Getopt::Long::Descriptive
    4. Готово! теперь вызов команды perl ya.pl не будет вызывать ошибок

  11. Кстати, а как все таки определить точный ip плейлиста? пытаюсь скачать плейлист олдскульных сборников http://music.yandex.ru/#!/users/muz-winamp/playlists/. Но когда указываю, например id плейлиста Метал - 1051, скрипт почему то видит плейлист "Народные песни".
    Видимо скрипт умеет скачивать только из общей базы. А как сделать так, чтобы он качал плейлист, составленный пользователем, в данном случае, winamp?

  12. Что я делаю не так?

    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>

  13. Автор, низкий тебе поклон. У тех у кого консольные команды выше выдают ошибки, попробуйте запускать командную строку от имени администратора

  14. Кто подскажет, программа сейчас работает?
    Просто сервис яндекс музыки сменил интерфейс, а скрипт у меня выдает ошибку
    [ERROR] Can't get track list info. И я не пойму, то ли причина ошибки у меня, то ли из-за обновленного интерфейса Yandex-Music.
    Если причина из за обновления сервиса - то стоит ли ожидать обновления скрипта?

  15. Эх, жаль. На Яндекс-Музыке странный репертуар, то довольно известных вещей нету, а порой весьма редкие альбомы встречаются, которых не то, что на торрентах, но даже на Soulseek не найти.
    Плагин для Хрома для потрековой скачки с ЯМ тоже после обновления сервиса перестал работать.
    В общем, если вдруг - было бы здорово.

    1. Спасибо, главное никаких танцев с бубном вокруг перла. Пол дня потратил на воспоминания работы с консолью

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

  17. Помогите, добрый человек!

    Пробую запустить, и:
    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

    ЧЯДНТ

  18. Ваш скрипт имеет ограничение на количество песен в плейлисте? При загрузке песен загружает 147 трека и останавливается при том, что в плейлисте песен больше.

  19. Добрый день.
    Программа при выполнении выдала следующее:

    [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

    Я так понимаю или яндекс опять поменял апи, или что-то еще.

    1. Яндекс не хочет отдавать информацию по http и требует https теперь. Я поправил, можно самому сменить в YANDEX_BASE http на https.

  20. В многодисковых альбомах утилитка качает только треки первого диска, можно починить?
    Например: album/1719032 - выкачивает только первые 50 треков.

  21. Здравствй, Kaimi, спасибо за скрипт, экономит кучу времени. Было бы хорошо если б нумеровал трэки ("01. Имя файла", "02. Имя файла"). Так приходится в Total Commander'е multirename'ом нумеровать (отсортировав по дате в обратном порядке получается исходный порядок файлов в альбоме).

  22. А есть у кого-нибудь проблема с кодировкой русскоязычных названий? Слетают в "абракадабру". А в общем, спасибо за дельный скрипт.

      1. пытаюсь запустить под Ubuntu - вылетает с кучей ошибок
        use: команда не найдена
        $'\r' команда не найдена.

        У вас linux отдельный скрипт?

    1. Скачал архив, поставил 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
      - Не помогло, та же ошибка

      Очень хочется качать песенки )) Есть идеи почему такое происходит?

  23. Разул глаза, скачал с GitHub последнею версию и все работает! Ура! Огромное спасибо за прекрасный инструмент ))

  24. Привет

    Взял последнюю версию гитхаба. Все качает нормально, но вот некоторые треки переименовать после скачивания не может и зависает если название трека содержит символы не из cp1251, например "&".
    Линк для примера "https://music.yandex.ru/album/1440327/track/13245163"

    1. & не является каким-то особенным символом.
      ya.pl -a 1440327 -t 13245163 на windows нормально скачал и переименовал. Может какой-то еще пример?
      Может варнинги писать в консоль на некоторых треках, но именно зависания я не наблюдаю.

      1. Может я чего напутал или затык какой был. Сегодня скрипт отработал и без затыков. Вот только странность какая то. foobar2000 - обложки альбомов отображает нормально. А вот стандартный проигрыватель Win10 Goove и музыкальный плеер на WP8 все обложки отображает так буд-то все они не догрузились (рассыпаная мозайка). Хотя файлы в которые обложки закидывал через Mp3tag или tag&rename отображаются во всех плеерах без ошибок.

        1. Может быть есть какие-то особенные требования к формату файлов обложек. Надо эксперименты ставить.
          Сама Windows как обложки отображает? Если выставить крупные значки или что-то такое.

        2. Всегда mp3 файлы показывает иконку ассоциированной программы. Изображение из тега эксплорер не отображает.

  25. Здравствуйте,

    А к какому файлу идет обращение при запуске ya.pl? У меня видимо нет ассоциации на связь с перлом в виндоус.

    У меня на 10ке выдает ошибку:
    Expression form of "eval" at line 60, column 2. See page 161 of PBP. (Severity: 5)

    1. perl.exe
      Значит запускать как: perl ya.pl

      Вообще, судя по логу, перл как раз подхватывает скрипт, но ему не нравится код. Какая версия Perl стоит?

  26. Спасибо, помогло perl ya.pl

    Версия ActivePerl-5.20.2.2002-MSWin32-x64-299195.msi

    Видимо автоматически не ассоциируются файлы на Win10. До этого на 8.1 такой проблемы не возникало.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *