Git Product home page Git Product logo

yandex.music.api's People

Contributors

k1llman avatar lauriero avatar martin211 avatar prepconcedeitis avatar shuryak avatar winster332 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

yandex.music.api's Issues

Ошибка десериализации при вызове метода Landing.GetFeedAsync

Как я вызывал: var feed = await _yandexApi.Landing.GetFeedAsync(_storage);
Где, _yandexApi экземпляр класса YandexMusicApi

Стек трейс:

Ошибка десериализации System.Exception: Ошибка десериализации типа "last-week-personal-popular-tracks".
 ---> System.ArgumentException: Could not convert 'last-week-personal-popular-tracks' to YFeedEventType.
 ---> Newtonsoft.Json.JsonSerializationException: Error converting value "last-week-personal-popular-tracks" to type 'Yandex.Music.Api.Models.Feed.Event.YFeedEventType'. Path '[1].typeForFrom', line 1, position 30827.
 ---> System.ArgumentException: Requested value 'last-week-personal-popular-tracks' was not found.
   at Newtonsoft.Json.Utilities.EnumUtils.ParseEnum(Type enumType, NamingStrategy namingStrategy, String value, Boolean disallowNumber)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   --- End of inner exception stack trace ---
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType)
   at Newtonsoft.Json.Linq.JToken.ToObject(Type objectType, JsonSerializer jsonSerializer)
   at Newtonsoft.Json.Linq.JToken.ToObject(Type objectType)
   --- End of inner exception stack trace ---
   at Newtonsoft.Json.Linq.JToken.ToObject(Type objectType)
   at Newtonsoft.Json.Linq.JToken.ToObject[T]()
   at Yandex.Music.Api.Models.Feed.Event.YFeedEventConverter.GetEvent(JToken jObject)
   --- End of inner exception stack trace ---
   at Yandex.Music.Api.Models.Feed.Event.YFeedEventConverter.GetEvent(JToken jObject)
   at System.Linq.Enumerable.SelectIListIterator`2.ToList()
   at Yandex.Music.Api.Models.Feed.Event.YFeedEventConverter.ReadJson(JsonReader reader, Type objectType, Object existingValue, JsonSerializer serializer)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.DeserializeConvertable(JsonConverter converter, JsonReader reader, Type objectType, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Deserialize(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](YandexMusicApi api, HttpResponseMessage response)

Возможности API

Здравствуйте, подскажите пожалуйста, может ли данный API получать данные о текущем проигрываемом треке?

"Вы недавно слушали" и раздел "детям"

Привет, в апи сейчас не реализованы следующие эндпоинты:

  1. "Вы недавно слушали"
    GET /users/{uid}/contexts?trackCount={trackCount}&types={contexTypeArray}&contextCount={contextsCount}
  2. Детские раздел на лендинге (доступен без авторизации)
    GET /children-landing/catalogue

Хочу законтрибьютить этот функционал. @K1llMan нет возражений?

Авторизация через U/P не работает для YandexMusicClient

В чем проблема:
При попытке авторизоваться через метод public bool Authorize(string login, string password) класса Yandex.Music.Client.YandexMusicClient возвращается ошибка:

System.Net.WebException: The remote server returned an error: (400) Bad Request.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Net.WebRequest.<>c.<GetResponseAsync>b__68_2(IAsyncResult iar)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location ---
   at Yandex.Music.Api.Requests.YRequest`1.GetWebResponseAsync()
   at Yandex.Music.Api.Requests.YRequest`1.GetWebResponseAsync()
   at Yandex.Music.Api.Requests.YRequest`1.GetResponseAsync()
   at Yandex.Music.Api.API.YUserAPI.AuthPassport(AuthStorage storage, String login, String password)
   at Yandex.Music.Api.API.YUserAPI.AuthorizeAsync(AuthStorage storage, String login, String password)
   at Yandex.Music.Api.API.YUserAPI.Authorize(AuthStorage storage, String login, String password)
   at Yandex.Music.Client.YandexMusicClient.Authorize(String login, String password)

В чем причина:
Как я понимаю начиная с некоторого момента осталась возможность авторизоваться только по токену.
Метод авторизации по токену отрабатывает как нужно.
Для получения токена по U/P нашел такую информацию из телеграмм группы (использовал 1 метод из списка):

Своё OAuth приложение создать нельзя. Единственный вариант это использовать приложения официальных клиентов Яндекс.Музыка. 

- Самый простой способ получения токена: https://github.com/MarshalX/yandex-music-api/discussions/513#discussioncomment-2729781
- Сайт для получения токена который работает не со всеми аккаунтами: https://music-yandex-bot.ru/
- Скрипт получения токена для изучения. В этом чате с ним не помогают: https://github.com/AlexxIT/YandexStation/blob/master/custom_components/yandex_station/core/yandex_session.py

Что предлагается
Может кто-то проверить, действительно ли перестала работать авторизация по U/P ?
Если так, то предлагаю либо удалить метод из класса, либо пометить его как устаревший.

System.Exception: 'Ошибка десериализации типа "YSearchAlbumModel".'

Проблема
Во время выполнения поиска трека по исполнителю и названию наткнулся на следующую ошибку:
image

Текст ошибки:
System.Exception: 'Ошибка десериализации типа "YSearchAlbumModel".'
JsonReaderException: Unexpected character encountered while parsing value: {. Path 'result.tracks.results[0].albums[0].labels', line 1, position 1570.

Как воспроизвести
Сделать вызов метода
public YSearch Search(string searchText, YSearchType searchType, int page = 0)
из класса Yandex.Music.Client.YandexMusicClient
С передачей аргументов:

searchText="Parkway Drive - Carrion"
searchType = YSearchType.Track

В чем проблема
При десериализации результата запроса json в модель YSearchAlbumModel поле public new List<string> Labels { get; set; } может иметь разные типы внутри.
Например в одном месте:

"labels": [
	{
		"id": 445547,
		"name": "Epitaph"
	}
],

В другом:

"labels": [
	"Epitaph"
],

Методы для получения данных о музыкальный лейблах

Привет, увидел что в апи не реализован функционал работы с лейблами. В апи есть два эндпоинта:

  1. GET /labels/{id}/artists?page={page}
  2. GET /labels/{id}/albums?page={page}

Каждый из них в ответе возвращает массив артистов/альбомов и объект YPager. Хочу законтрибьютить этот функционал.
@K1llMan нет возражений?

Ошибка при авторизации

Здравствуйте, перестала работать авторизация через client.Authorize(), после обновления методов авторизации способ авторизации поменялся? Выдает исключение с пустым токеном

Реализация состояния через веб-сокеты

Необходимо реализовать получение состояния плеера через подключение по веб-сокетам:

  1. Авторизация и подключение к сокетам.
  2. Получение полного состояния при подключении.
  3. Получение сообщений об изменении состояния.
  4. Отправка сообщений об изменении состояния.

Изменение получения блоков лэндинга

          Привет. Я не против. По лендингу, правда, надо бы капитально переделать (https://github.com/K1llMan/Yandex.Music.Api/issues/44#issuecomment-2057637913)

Не знаю, все ли есть эндпоинты, но можно дополнить ещё из https://github.com/acherkashin/yandex-music-open-api/blob/main/src/yandex-music.yaml из landing3, а также по genres тоже ничего нет.

Originally posted by @K1llMan in #45 (comment)

Null reference exception при попытке получить треки персональных плейлистов из лендинга

YLanding landing = await MainWindow.Client.GetLanding(YLandingBlockType.PersonalPlaylists); //всё окей

YPlaylist playlist = (landing.Blocks[0].Entities[0] as YLandingEntityPersonalPlaylist).Data.Data; //на этом этапе корректно получается плейлист дежавю

//так как плейлист пустой (playlist.Tracks == null), получаю треки
YPlaylist playlistWithTracks = await playlist.WithTracksAsync(); //тут падает с исключением

Метод Client.GetPersonalPlaylists() работает исправно

Немногочисленные результаты дебагера прикрепляю
log.txt

Добавление своей музыки в коллекцию

Привет! Сейчас не реализован данный функционал, скорее всего по причине того, что используется API от мобильных приложений я.музыки. У меня возникла необходимость использовать этот функционал, поэтому предлагаю со своей стороны реализовать это, но с использованием API с веб версии.
Однако возник вопрос, насколько это будет релевантно в данной библиотеке?

Про обновление документации и контрибьютинг

Всем привет!
Прежде всего спасибо @K1llMan за обратную связь по проблемам и проделанную работу!

Есть некоторые предложения:

  1. Если есть какие-то планы по доработке API и приветствуется контрибьютинг со стороны, то можно где-то их увидеть?
    Готов со своей стороны помочь с некоторыми проблемами, написанием тестов и т.п.
    Сам использую либу в своем пет-проектке ;)

  2. В readme не было бы лишним добавить ссылки на nuget пакеты и короткое их описание.

Зависают приложения Windows Forms

Использование библиотеки в приложениях Windows Forms (не важно, какой версии .NET Framework или даже .NET / .NET Core) ведёт к их вечному зависанию при вызове любого метода, обращающегося к API Яндекс Музыки в любом месте приложения (в консольных программах библиотека работает нормально).

Например, следующий код, помещённый в конструктор формы вообще не даст отобразить форму, и приложение намертво зависнет:

YandexMusicClient api = new();
MessageBox.Show(api.GetAuthQRLink());

Загрузка файлов из своей колекцции

Здравствуйте.
Спасибо за интересный проект.
Не планируете ли сделать функционал по загрузке треков из своей коллекции или по id ??
Есть расширение для браузера по загрузке. Может как основу для идеи взять.
Скачать музыку 2.0.6

Получение "популярности" трека

Есть ли способ получения популярности всех треков исполнителя, чтобы была такая же последовательность, как при их просмотре (artist/***/tracks)?
Нашел YTrack.Chart.Position, но для тех треков, которых нет в чарте, Chart == null
Есть еще YArtistBriefInfo.PopularTracks, но в этой коллекции меньше треков, чем их всего
Заранее спасибо!

10 треков из чарта

При получении треков из чарта возвращается только 10 объектов.
Использую следующую конструкцию:

List<YLandingEntity> list = Client.GetLanding(YLandingBlockType.Chart).Blocks[0].Entities;

Здесь список имеет значение свойства Count, равное 10, а не 100, как ожидалось.
Каждый из этих объектов преобразуется в YLandingEntityChart, у которого, в свою очередь, есть свойство Track, которое далее используется.
Возможно, требуются какие-то дополнительные инструкции?
Заранее спасибо огромное!!!

Автоматическая выгрузка релиза в nuget

Привет! Можно при помощи github actions проверять билд на наличие ошибок, выгружать в nuget/docker и т.д.
Советую использовать в проекте. Для этого тебе надо взять API ключ у nuget и сохранить его в Environment репозитория, а в папке .gtihub/workflows создать файл примерно с таким содержанием:

name: NuGet - Release

on:
 release:
    types: [published]

jobs:
  publish-nuget:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET Core
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: !!DOTNET_VERSION!!
    - name: Set output
      id: vars
      run: echo "tag=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
    - name: Publish to NuGet
      uses: kelson-dev/[email protected]
      with:
        PROJECT_FILE_PATH: !!PATH_TO_sln_FILE!!
        VERSION_STATIC: ${{ steps.vars.outputs.tags }}
        TAG_COMMIT: true
        TAG_FORMAT: "*"
        NUGET_KEY: ${{secrets.NUGET_API_KEY}}
        NUGET_SOURCE: https://api.nuget.org
        INCLUDE_SYMBOLS: false

где DOTNET_VERSION - версия .net, например, '7.x.x' или '6.x.x', а PATH_TO_sln_FILE - путь до файла с расширением .sln, у тебя это
src/Yandex.Music.Api.sln

p.s. в .csproj надо добавить

<Version>!!VERSION!!</Version>

где VERSION - версия проекта для выгрузки в nuget, надо изменять перед каждым release

Зависает при вызове GetFileLink

День добрый пишу свой аналог ЯМузыки,пытаюсь получать ссылку на трек,чтобы передать в воспроизведение

        YandexMusicApi _client;
        AuthStorage _storage;
        public DashboardPage(ViewModels.DashboardViewModel viewModel)
        {
            ViewModel = viewModel;
            InitializeComponent();
            _client = new YandexMusicApi();
            _storage = new AuthStorage();
            YandexAsync();
        }

        private async Task YandexAsync()
        {

            await _client.User.AuthorizeAsync(_storage, "Токен");
            var play = await _client.Playlist.OfTheDayAsync(_storage);
            foreach (var item in play.Result.Tracks)
            {
                tracks.Items.Add(item.Track.Artists[0].Name + " - " + item.Track.Title);
                Debug.WriteLine(_client.Track.GetFileLink(_storage, item.Track));
            }
        }

Но код зависает наглухо без ошибок.
Без Debug.WriteLine(_client.Track.GetFileLink(_storage, item.Track)); все работает

Ошибка десериализации при создании сессии

Описание ошибки:

При вызове метода CreateAuthSession(AuthStorage storage, string userName) возникает исключение внутри CommonRequestProvider в методе GetDataFromResponseAsync<T>. Массив методов авторизации в ответе на запрос содержит в себе элемент "social_gg" десериализация которого текущей версией API не предусмотренна. Ошибка предположительно возникает только при выполнении запросов с IP аддресов находящихся не на территории РФ.

Часть ответа на запрос создания сессии:
image

StackTrace:

System.Exception: Ошибка десериализации Newtonsoft.Json.JsonSerializationException: Error converting value "social_gg" to type 'Yandex.Music.Api.Models.Account.YAuthMethod'. Path 'auth_methods[3]', line 1, position 298.
 ---> System.ArgumentException: Requested value 'social_gg' was not found.
   at Newtonsoft.Json.Utilities.EnumUtils.ParseEnum(Type enumType, NamingStrategy namingStrategy, String value, Boolean disallowNumber)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   --- End of inner exception stack trace ---
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureType(JsonReader reader, Object value, CultureInfo culture, JsonContract contract, Type targetType)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonSerializer.Deserialize(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](YandexMusicApi api, HttpResponseMessage response)
   at Yandex.Music.Api.Common.Providers.CommonRequestProvider.GetDataFromResponseAsync[T](YandexMusicApi api, HttpResponseMessage response) in C:\Users\Wayne Harsman\Documents\Programming\Projects\KA.YandexMusicApi\src\Yandex.Music.Api\Common\Providers\CommonRequestProvider.cs:line 61
   at Yandex.Music.Api.Requests.Common.YRequest`1.GetResponseAsync() in C:\Users\Wayne Harsman\Documents\Programming\Projects\KA.YandexMusicApi\src\Yandex.Music.Api\Requests\Common\YRequest.cs:line 41
   at Yandex.Music.Api.API.YUserAPI.CreateAuthSessionAsync(AuthStorage storage, String userName) in C:\Users\Wayne Harsman\Documents\Programming\Projects\KA.YandexMusicApi\src\Yandex.Music.Api\API\YUserAPIAsync.cs:line 126
   at Yandex.Music.Api.API.YUserAPI.CreateAuthSession(AuthStorage storage, String userName) in C:\Users\Wayne Harsman\Documents\Programming\Projects\KA.YandexMusicApi\src\Yandex.Music.Api\API\YUserAPI.cs:line 43
   at Program.<Main>$(String[] args) in C:\Users\Wayne Harsman\Documents\Programming\Projects\YaMAPIQuickTest\Playground\YaMuApiPlayground\YaMuApiPlayground\Program.cs:line 9

Шаги к воссозданию ошибки

var api = new YandexMusicApi();
var storage = new AuthStorage();

api.User.CreateAuthSession(storage, "...actualLogin...");

Как указано выше, наличие елемента social_gg вероятнее всего связано с региональными ограничениями самого Яндекса

Возможное решение

Простейшим решением может быть модификация перечисления YAuthMethod следующим способом:

public enum YAuthMethod
    {
        Password,
        [EnumMember(Value = "magic_x_token")]
        MagicToken,
        [EnumMember(Value = "magic_link")]
        MagicLink,
        Magic,
        Otp,
        [EnumMember(Value = "social_gg")]
        Social
    }

Вариант рабочий

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

Remove redundant async/await statements for API methods

At \src\Yandex.Music.Api\API\Y*API.cs classes has wrong definition for async methotds.

public async Task<YResponse<YLibraryTracks>> GetLikedTracksAsync(AuthStorage storage) { return await ...; }
No need async/await here. You method already returns a task, async/await must be in the calling code.

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

При получении плейлиста 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 в текстовом формате, в нем присутствует вся информация о треках (сравнил с результатом по запросу плейлиста другого типа)

Возможности API

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.