diff --git a/YandexMusic.API/README.md b/YandexMusic.API/README.md index 5f168a1..173eae4 100644 --- a/YandexMusic.API/README.md +++ b/YandexMusic.API/README.md @@ -227,4 +227,4 @@ var storage = new AuthStorage(settings: debug); **Версия**: 0.0.1 **Платформа**: .NET 10 **Язык**: C# 12 -**Обновлено**: 2024 +**Обновлено**: 2026 diff --git a/YandexMusic/README.md b/YandexMusic/README.md new file mode 100644 index 0000000..b36a4bc --- /dev/null +++ b/YandexMusic/README.md @@ -0,0 +1,201 @@ +# YandexMusicClient + +Асинхронный клиент для работы с API Яндекс.Музыки на C#. +Предоставляет удобные методы для авторизации, получения треков, альбомов, плейлистов, управления библиотекой, радио, очередями, а также поддержку WebSocket‑плеера Ynison. + +--- + +## 📦 Возможности + +- ✅ Полная поддержка API Яндекс.Музыки (треки, альбомы, исполнители, плейлисты, радио, очереди) +- ✅ Авторизация по токену, QR‑коду, e‑mail, паролю приложения, капче +- ✅ Управление библиотекой (лайки/дизлайки треков, альбомов, исполнителей, плейлистов) +- ✅ Поиск по всем типам контента +- ✅ Создание и редактирование плейлистов +- ✅ Загрузка пользовательских треков (UGC) +- ✅ Работа с радиостанциями +- ✅ Управление очередями воспроизведения +- ✅ WebSocket‑плеер Ynison для синхронизации состояния между устройствами + +--- + +## 🚀 Установка + +### NuGet (если библиотека опубликована) +```bash +dotnet add package YandexMusic +``` + +### Или добавьте проект вручную +Склонируйте репозиторий и добавьте ссылку на проект `YandexMusic` в ваше решение. + +--- + +## 🏁 Быстрый старт + +### 1. Инициализация клиента и авторизация по токену + +```csharp +using YandexMusic; + +var client = new YandexMusicClient(); +string token = "ваш_токен_доступа"; + +bool success = await client.Authorize(token); +if (success) +{ + Console.WriteLine($"Авторизован как {client.Account.DisplayName}"); +} +else +{ + Console.WriteLine("Ошибка авторизации"); +} +``` + +### 2. Получение трека по ID + +```csharp +var track = await client.GetTrackAsync("12345678"); +if (track != null) +{ + Console.WriteLine($"{track.Artists[0].Name} - {track.Title}"); +} +``` + +### 3. Получение плейлиста + +```csharp +// плейлист пользователя с uid = 1234567890 и kind = 5 +var playlist = await client.GetPlaylistAsync("1234567890", "5"); +Console.WriteLine($"Плейлист: {playlist.Title}, треков: {playlist.TrackCount}"); +``` + +### 4. Поиск треков + +```csharp +var searchResult = await client.SearchAsync("Imagine Dragons", YSearchType.Track); +if (searchResult?.Tracks?.Results != null) +{ + foreach (var track in searchResult.Tracks.Results) + Console.WriteLine($"{track.Artists[0].Name} - {track.Title}"); +} +``` + +--- + +## 📚 Примеры использования + +### 🔹 Работа с библиотекой (лайки) + +```csharp +// Получить лайкнутые треки +var likedTracks = await client.GetLikedTracksAsync(); + +// Получить дизлайкнутых исполнителей +var dislikedArtists = await client.GetDislikedArtistsAsync(); +``` + +### 🔹 Создание плейлиста + +```csharp +var newPlaylist = await client.CreatePlaylistAsync("Мой новый плейлист"); +Console.WriteLine($"Создан плейлист {newPlaylist.Title} (kind={newPlaylist.Kind})"); +``` + +### 🔹 Загрузка собственного трека (UGC) + +```csharp +// Сначала создайте или получите плейлист, куда загружать +var playlist = await client.GetPlaylistAsync("uid", "kind"); + +// Загрузка из файла +string uploadResult = await client.UploadTrackToPlaylistAsync(playlist, "my_song.mp3", @"C:\music\my_song.mp3"); + +// Загрузка из массива байтов +byte[] audioData = File.ReadAllBytes(@"C:\music\my_song.mp3"); +string result = await client.UploadTrackToPlaylistAsync(playlist, "my_song.mp3", audioData); +``` + +### 🔹 Радио + +```csharp +// Получить список рекомендованных станций +var stations = await client.GetRadioDashboardAsync(); +var firstStation = stations.First(); + +// Получить треки станции +var stationTracks = await firstStation.GetTracksAsync(); +foreach (var seqItem in stationTracks) +{ + Console.WriteLine(seqItem.Track.Title); +} +``` + +### 🔹 Очереди воспроизведения + +```csharp +// Получить все очереди +var queues = await client.GetQueuesAsync(); + +// Создать новую очередь +var newQueue = await client.CreateQueueAsync(new YQueue { ... }); +``` + +### 🔹 Ynison – WebSocket плеер (синхронизация между устройствами) + +```csharp +// Подключиться к Ynison +await client.ConnectYnisonAsync(); + +// Подписаться на события +if (client.Ynison != null) +{ + client.Ynison.OnReceive += (sender, args) => + { + Console.WriteLine($"Новое состояние: {args.State.PlayerState.Status.Paused}"); + }; +} + +// ... работа + +// Отключиться +await client.DisconnectYnisonAsync(); +``` + +--- + +## ⚠️ Обработка ошибок + +Методы клиента выбрасывают исключения в случае ошибок API или сети. Рекомендуется оборачивать вызовы в try-catch: + +```csharp +try +{ + var track = await client.GetTrackAsync("невалидный_id"); +} +catch (HttpRequestException ex) +{ + Console.WriteLine($"Ошибка сети: {ex.Message}"); +} +catch (YErrorResponse ex) +{ + Console.WriteLine($"Ошибка API: {ex.Error.Message}"); +} +``` + +--- + +## 📄 Лицензия + +Данная библиотека распространяется под лицензией MIT. +Неофициальный клиент, не связан с компанией Яндекс. + +--- + +## 🤝 Вклад + +Pull Request'ы приветствуются. Сообщения об ошибках и предложения по улучшению оформляйте через Issues. + +--- + +**Приятного использования!** 🎵 \ No newline at end of file diff --git a/YandexMusic/YandexMusic.csproj b/YandexMusic/YandexMusic.csproj index e7df657..f461a64 100644 --- a/YandexMusic/YandexMusic.csproj +++ b/YandexMusic/YandexMusic.csproj @@ -1,13 +1,16 @@  - - net10.0 - enable - enable - + + net10.0 + enable + enable + FrigaT + Асинхронная библиотека для неофициального API Яндекс Музыки. + yandex;music;api;async + - - - + + +