Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Не работают ссылки сезонных плейлистов #31

Closed
BloodyBaRGaIn opened this issue Sep 8, 2023 · 11 comments

Comments

@BloodyBaRGaIn
Copy link
Contributor

При получении плейлиста Api.GetPlaylist("yamusic-summer2023", "7934310") (с другими ID так же, пробовал эти плейлисты с разных аккаунтов) возникает исключение System.Exception с сообщением:
Ошибка десериализации System.InvalidOperationException: Current error context error is different to requested error.
at Newtonsoft.Json.Serialization.JsonSerializerInternalBase.GetErrorContext(Object currentObject, Object member, String path, Exception error)
at Newtonsoft.Json.Serialization.JsonSerializerInternalBase.IsErrorHandled(Object currentObject, JsonContract contract, Object keyValue, IJsonLineInfo lineInfo, String path, Exception ex)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Yandex.Music.Api.Common.Providers.CommonRequestProvider.GetDataFromResponseAsync[T](YandexMus
icApi api, HttpResponseMessage response)

В методе public virtual async Task GetDataFromResponseAsync(YandexMusicApi api, HttpResponseMessage response) получен JSON в текстовом формате, в нем присутствует вся информация о треках (сравнил с результатом по запросу плейлиста другого типа)

@BloodyBaRGaIn
Copy link
Contributor Author

BloodyBaRGaIn commented Sep 8, 2023

Работает в проекте на .NET 5 в решении с тестами
Логи теста
log.txt

@BloodyBaRGaIn
Copy link
Contributor Author

BloodyBaRGaIn commented Sep 8, 2023

Если при инициализации клиента указать DebugSettings, то все работает

IDebugWriter writer = new DefaultDebugWriter("responses", "log.txt");

_client = new(new DebugSettings(writer)
{
    ClearDirectory = true,
    SaveResponse = true
});

@K1llMan
Copy link
Owner

K1llMan commented Sep 9, 2023

Отсутствует в перечислении тип плейлиста "summerrewind2023". Только я не знаю, что с ними такими делать, потому что они выпускают каждый год подобные плейлисты, а потом убирают.

@BloodyBaRGaIn
Copy link
Contributor Author

Может, попробовать отказаться от перечисления и использовать строку?

@K1llMan
Copy link
Owner

K1llMan commented Sep 9, 2023

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

@BloodyBaRGaIn
Copy link
Contributor Author

Я попробовал заменить enum на static class с публичными константными строками, имена которых соответствуют именам перечисления, все прошло без ошибок
Только я не знаю, мне нужно делать форк, если я правильно понимаю механизм?

@BloodyBaRGaIn
Copy link
Contributor Author

BloodyBaRGaIn commented Sep 9, 2023

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

Если так посудить, названия значений перечисления тоже немного магические)
Все равно они по смыслу и строковому значению на все бьются один к одному

@BloodyBaRGaIn
Copy link
Contributor Author

BloodyBaRGaIn commented Sep 9, 2023

Я попробовал выполнить тесты в оригинальном проекте и в "новом", и у меня не все тесты проходят. Норма ли это? Новый тест с сезонным плейлистом проходит

В оригинальном проекте:
image

В "новом":
image

Авторизация через логин и пароль

@K1llMan
Copy link
Owner

K1llMan commented Sep 9, 2023

Авторизацию лучше использовать через токен. Тесты должны в большинстве выполняться. Может не работать получение плейлиста Rewind, иногда добавление/удаление не срабатывает. Я завтра постараюсь глянуть.

@BloodyBaRGaIn
Copy link
Contributor Author

Большое спасибо!!!

@K1llMan
Copy link
Owner

K1llMan commented Sep 10, 2023

Должно быть исправлено в 1.5.0.

@K1llMan K1llMan closed this as completed Sep 10, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants