Files
YandexMusic/YandexMusic
FrigaT 6dcf39de56
All checks were successful
Release / pack-and-publish (release) Successful in 30s
Добавлен readme
2026-04-14 02:54:03 +03:00
..
2026-04-14 02:54:03 +03:00
2026-04-14 02:54:03 +03:00
fix
2026-04-13 02:30:14 +03:00

YandexMusicClient

Асинхронный клиент для работы с API Яндекс.Музыки на C#.
Предоставляет удобные методы для авторизации, получения треков, альбомов, плейлистов, управления библиотекой, радио, очередями, а также поддержку WebSocketплеера Ynison.


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

  • Полная поддержка API Яндекс.Музыки (треки, альбомы, исполнители, плейлисты, радио, очереди)
  • Авторизация по токену, QRкоду, email, паролю приложения, капче
  • Управление библиотекой (лайки/дизлайки треков, альбомов, исполнителей, плейлистов)
  • Поиск по всем типам контента
  • Создание и редактирование плейлистов
  • Загрузка пользовательских треков (UGC)
  • Работа с радиостанциями
  • Управление очередями воспроизведения
  • WebSocketплеер Ynison для синхронизации состояния между устройствами

🚀 Установка

NuGet (если библиотека опубликована)

dotnet add package YandexMusic

Или добавьте проект вручную

Склонируйте репозиторий и добавьте ссылку на проект YandexMusic в ваше решение.


🏁 Быстрый старт

1. Инициализация клиента и авторизация по токену

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

var track = await client.GetTrackAsync("12345678");
if (track != null)
{
    Console.WriteLine($"{track.Artists[0].Name} - {track.Title}");
}

3. Получение плейлиста

// плейлист пользователя с uid = 1234567890 и kind = 5
var playlist = await client.GetPlaylistAsync("1234567890", "5");
Console.WriteLine($"Плейлист: {playlist.Title}, треков: {playlist.TrackCount}");

4. Поиск треков

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}");
}

📚 Примеры использования

🔹 Работа с библиотекой (лайки)

// Получить лайкнутые треки
var likedTracks = await client.GetLikedTracksAsync();

// Получить дизлайкнутых исполнителей
var dislikedArtists = await client.GetDislikedArtistsAsync();

🔹 Создание плейлиста

var newPlaylist = await client.CreatePlaylistAsync("Мой новый плейлист");
Console.WriteLine($"Создан плейлист {newPlaylist.Title} (kind={newPlaylist.Kind})");

🔹 Загрузка собственного трека (UGC)

// Сначала создайте или получите плейлист, куда загружать
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);

🔹 Радио

// Получить список рекомендованных станций
var stations = await client.GetRadioDashboardAsync();
var firstStation = stations.First();

// Получить треки станции
var stationTracks = await firstStation.GetTracksAsync();
foreach (var seqItem in stationTracks)
{
    Console.WriteLine(seqItem.Track.Title);
}

🔹 Очереди воспроизведения

// Получить все очереди
var queues = await client.GetQueuesAsync();

// Создать новую очередь
var newQueue = await client.CreateQueueAsync(new YQueue { ... });

🔹 Ynison WebSocket плеер (синхронизация между устройствами)

// Подключиться к 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:

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.


Приятного использования! 🎵