llistochek / yandex-music-downloader

Загрузчик музыки с сервиса Яндекс.Музыка
MIT License
163 stars 20 forks source link

Проблема с записью тэгов #15

Closed GRbit closed 1 year ago

GRbit commented 1 year ago

Пробовал на двух альбомах

сначала на этом: https://music.yandex.com/album/7489514 . думал что проблема с кавычкой в названии артиста, но потом попробовал на этом: https://music.yandex.com/album/13072859 проблема всё такая же.

python3 main.py --add-lyrics --embed-cover --session-id '...' --url "https://music.yandex.com/album/7489514" --log-level DEBUG

22:29:21 |DEBUG| https://storage.mds.yandex.net:443 "GET /file-download-info/1543886_1ba59cd2.78433757.5.52888864/preview?sign=5a50b66658a6870cc4e09e4db2ac845501882800d863d6e59b92993b9cee1140&ts=647f96da HTTP/1.1" 401 574
Traceback (most recent call last):
  File "/home/grbit/ssd/git/yandex-music-downloader/main.py", line 465, in <module>
    url = get_track_download_url(session, track, args.hq)
  File "/home/grbit/ssd/git/yandex-music-downloader/main.py", line 201, in get_track_download_url
    url_info = ET.fromstring(resp.text)
  File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1347, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: mismatched tag: line 6, column 2

Есть идеи в чём может быть проблема?

llistochek commented 1 year ago

У меня не получилось воспроизвести проблему. Залил новую версию на гитхаб, в ней улучшен вывод отладочной информации. Обновите ее через git pull и попробуйте еще раз. Прямо перед ошибкой будет выведен XML, пришлите мне его.

GRbit commented 1 year ago

@llistochek

Тогда наверное стоит отметить что python3.9, Linux на основе Debian (MX 21.3 Wildflower)

Никакого дополнительного выхлопа не наблюдается

08:04:45 |DEBUG| https://music.yandex.ru:443 "GET /api/v2.1/handlers/track/74681567:13072859/web-album_track-track-track-main/download/m?hq=0 HTTP/1.1" 200 None
08:04:45 |DEBUG| {"codec":"mp3","bitrate":128,"src":"//storage.mds.yandex.net/file-download-info/14665_2aed5343.113178619.5.74681567/preview?sign=4dfb0fc4c2926ad75f4844ef3a1585dd93dafeee0c531ddfd55f422b7ad83f12&ts=64801e3a&offset=5335","gain":false,"preview":true}
08:04:48 |DEBUG| Starting new HTTPS connection (1): storage.mds.yandex.net:443
08:06:57 |DEBUG| https://storage.mds.yandex.net:443 "GET /file-download-info/14665_2aed5343.113178619.5.74681567/preview?sign=4dfb0fc4c2926ad75f4844ef3a1585dd93dafeee0c531ddfd55f422b7ad83f12&ts=64801e3a&offset=5335 HTTP/1.1" 401 574
Traceback (most recent call last):
  File "/home/grbit/ssd/git/yandex-music-downloader/main.py", line 466, in <module>
    url = get_track_download_url(session, track, args.hq)
  File "/home/grbit/ssd/git/yandex-music-downloader/main.py", line 201, in get_track_download_url
    url_info = ET.fromstring(resp.text)
  File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1347, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: mismatched tag: line 6, column 2

Я добавил вот это

--- a/main.py
+++ b/main.py
@@ -198,6 +198,7 @@ def get_track_download_url(session: Session, track: BasicTrackInfo,
     url_info_src = resp.json()['src']

     resp = session.get('https:' + url_info_src)
+    logging.debug(resp.text)
     url_info = ET.fromstring(resp.text)
     path = url_info.find('path').text[1:]
     s = url_info.find('s').text

И уже после... Оно просто заработало.

У меня такое ощущение что это связано с соединением. Возможно где-то вместо реального ответа получается что-то типа 503 Service Timeout или там сам клиент что-то пишет про то невозможность дождаться ответа. В итоге этот момент не проверяется, а при попытке его распарсить всё падает.

Я попробую ещё потестить в разных условиях, но похоже конкретно с кавычками или подобным никаких багов нет.

llistochek commented 1 year ago

Действительно, в последней строчке перед ошибкой можно заметить, что яндекс возвращает код 401 (Unauthorized). Это очень странно, с учетом того что все предыдущие запросы отрабатывают нормально. Но, в любом случае, круто что у вас все заработало, спасибо за issue. Если ошибка повторится, переоткрывайте эту issue. Если будут еще какие нибудь ошибки/предложения - открывайте новую