# YandexMusic.API

Асинхронная библиотека для неофициального API Яндекс Музыки, разработанная на .NET 10.

## Описание

**YandexMusic.API** — это комплексная C# библиотека для взаимодействия с неофициальным API Яндекс Музыки. Библиотека предоставляет полный набор методов для работы с музыкой, альбомами, исполнителями, плейлистами, радио и другими функциями сервиса.

## Основные возможности

- ✅ **Полная поддержка API Яндекс Музыки** - Все основные методы и функции
- ✅ **Асинхронная архитектура** - Основана на async/await для максимальной производительности
- ✅ **Модульная структура** - Отдельные API классы для каждой функциональности
- ✅ **Сериализация JSON** - Использует современный System.Text.Json
- ✅ **Поддержка WebSocket** - Протокол Ynison для real-time функций
- ✅ **Типобезопасность** - Полная поддержка nullable reference types
- ✅ **Документация на русском** - XML документация всех публичных членов

## Поддерживаемые компоненты

### API Методы

- **Album API** - Получение информации об альбомах
- **Artist API** - Работа с данными исполнителей
- **Label API** - Управление лейблами
- **Landing API** - Доступ к рекомендациям главной страницы
- **Library API** - Работа с библиотекой пользователя (лайки, дизлайки)
- **Playlist API** - Управление плейлистами
- **Pins API** - Управление закреплёнными объектами
- **Radio API** - Управление радиостанциями
- **Search API** - Поиск по музыке
- **Track API** - Работа с треками
- **Queue API** - Управление очередью воспроизведения
- **User API** - Управление пользователем и авторизацией
- **UGC API** - Загрузка пользовательского контента
- **Ynison API** - WebSocket протокол для real-time взаимодействия

### Модели данных

- Полные модели для альбомов, треков, исполнителей, плейлистов
- Модели поиска и рекомендаций
- Модели для управления библиотекой
- Модели для радио и станций
- Модели для WebSocket взаимодействия

## Требования

- **.NET 10** или выше
- C# 12 или выше

## Технологический стек

- **Runtime**: .NET 10
- **Язык**: C# 12
- **Сериализация**: System.Text.Json
- **Асинхронность**: async/await
- **WebSocket**: Native .NET WebSocket support

## Архитектура

### Структура проекта

```
YandexMusic.API/
├── API/                    # Основные классы API для каждой функции
├── Models/                 # Модели данных
├── Requests/              # Построители запросов
├── Common/                # Общая функциональность и провайдеры
├── Extensions/            # Расширения для удобства
├── YandexMusicApi.cs      # Главный класс API
└── README.md             # Документация
```

### Основные компоненты

#### YandexMusicApi
Главный класс API, предоставляющий доступ ко всем веткам функциональности через свойства.

```csharp
var api = new YandexMusicApi();
```

#### AuthStorage
Управление учётными данными пользователя, токенами и сессией.

#### RequestProvider
Интерфейс для обработки HTTP запросов и ответов. Имеет несколько реализаций:
- `DefaultRequestProvider` - стандартный провайдер
- `CommonRequestProvider` - расширенный провайдер
- `MockRequestProvider` - для тестирования

#### API Classes
Каждый API класс наследуется от `YCommonAPI` и предоставляет синхронные и асинхронные методы.

## Использование

### Базовый пример

```csharp
using YandexMusic.API;

// Создание экземпляра API
var api = new YandexMusicApi();

// Получение информации о треке
var track = await api.Track.GetTrackAsync(trackId);

// Поиск музыки
var searchResults = await api.Search.SearchAsync("Яндекс");

// Работа с плейлистами
var playlists = await api.Playlist.GetPlaylistAsync(playlistId);
```

### Авторизация

```csharp
var storage = new AuthStorage();

// Авторизация пользователя
// Используйте соответствующие методы AuthStorage
storage.IsAuthorized = true;
storage.Token = "ваш_токен";
```

### Работа с провайдерами

```csharp
var storage = new AuthStorage();

// Использование пользовательского провайдера
var customProvider = new MyCustomRequestProvider();
var storage = new AuthStorage(customProvider);
```

## Особенности .NET 10

Проект полностью использует возможности .NET 10:

- **C# 12 Features** - Last language version
- **Nullable Reference Types** - Полная поддержка nullable context
- **Implicit Usings** - Автоматический импорт стандартных пространств имён
- **Modern async/await** - Асинхронная обработка
- **System.Text.Json** - Встроенная сериализация JSON

## Документация

Все публичные типы и методы имеют XML документацию на русском языке. Документация автоматически обновляется и доступна через IntelliSense в IDE.

### Пример документации

```csharp
/// <summary>Получает информацию о треке по идентификатору.</summary>
/// <param name="trackId">Идентификатор трека</param>
/// <returns>Модель трека</returns>
public async Task<YTrack?> GetTrackAsync(string trackId)
{
    // ...
}
```

## Миграция с предыдущих версий

Если вы переходите с более старой версии:

1. **Обновите .NET версию** до 10.0
2. **System.Text.Json** уже используется везде вместо Newtonsoft.Json
3. **API сигнатуры** остаются совместимы
4. **Regions удалены** - код лучше организован

## Провайдеры и расширяемость

Архитектура позволяет легко расширять функциональность:

```csharp
public interface IRequestProvider
{
    Task<HttpResponseMessage> GetWebResponseAsync(HttpRequestMessage message);
    Task<T?> GetDataFromResponseAsync<T>(YandexMusicApi api, HttpResponseMessage response);
}

// Реализуйте ваш провайдер
public class MyProvider : IRequestProvider
{
    // Ваша реализация
}
```

## Отладка

Проект поддерживает встроенную отладку через `DebugSettings`:

```csharp
var debug = new DebugSettings 
{ 
    ClearDirectory = true 
};

var storage = new AuthStorage(settings: debug);
```

## Производительность

- **Асинхронные операции** - Не блокируют потоки
- **Кэширование** - Встроенная поддержка кэширования ответов
- **Оптимизированная сериализация** - System.Text.Json быстрее Newtonsoft
- **Минимальные зависимости** - Только необходимые пакеты

## Лицензия

Это неофициальная библиотека для API Яндекс Музыки. Используйте на свой риск.

## Автор

**FrigaT** - Разработчик библиотеки

## Поддержка

Для вопросов и предложений свяжитесь с разработчиком или создайте issue в репозитории.

## Благодарности

Спасибо сообществу .NET разработчиков и всем участникам проекта.

---

**Версия**: 0.0.1  
**Платформа**: .NET 10  
**Язык**: C# 12  
**Обновлено**: 2024
