schema

package
v0.5.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 5, 2023 License: MIT Imports: 8 Imported by: 1

Documentation

Index

Constants

View Source
const (
	ApiUrl = "https://api.music.yandex.net"
)

Variables

View Source
var (
	ErrNilTrack    = errors.New(_errPrefix + "nil track")
	ErrNilTracks   = errors.New(_errPrefix + "nil tracks")
	ErrNilPlaylist = errors.New(_errPrefix + "nil playlist")
)

Functions

func ParamsToValues

func ParamsToValues(s any) (url.Values, error)

Types

type Account

type Account struct {
	// Текущая дата и время
	//
	// example: 2021-03-17T18:13:40+00:00.
	Now string `json:"now"`

	// Уникальный идентификатор.
	UID ID `json:"uid"`

	// Виртуальное имя (обычно e-mail).
	Login string `json:"login"`

	// Полное имя (имя и фамилия).
	FullName string `json:"fullName"`

	// Фамилия.
	SecondName string `json:"secondName"`

	// Имя.
	FirstName string `json:"firstName"`

	// Отображаемое имя.
	DisplayName string `json:"displayName"`

	// Доступен ли сервис.
	ServiceAvailable bool `json:"serviceAvailable"`

	// Является ли пользователем чьим-то другим.
	HostedUser bool `json:"hostedUser"`

	// Мобильные номера.
	PassportPhones []struct {
		Phone string `json:"phone"`
	} `json:"passport-phones"`

	Child                bool `json:"child"`
	NonOwnerFamilyMember bool `json:"nonOwnerFamilyMember"`
}

Аккаунт пользователя.

Некоторые поля могут (не) быть доступны. Зависит от запроса.

type AccountPermissions added in v0.2.3

type AccountPermissions struct {
	Until   time.Time `json:"until"`
	Values  []string  `json:"values"`
	Default []any     `json:"default"`
}

type AccountSettings

type AccountSettings struct {
	// ID.
	UID ID `json:"uid" url:"-"`

	// Включен ли скробблинг last.fm?
	LastFmScrobblingEnabled   bool `json:"lastFmScrobblingEnabled" url:"lastFmScrobblingEnabled,omitempty"`
	FacebookScrobblingEnabled bool `json:"facebookScrobblingEnabled" url:"lastFmScrobblingEnabled,omitempty"`

	// (?) Включено ли рандомное воспроизведение треков?
	ShuffleEnabled bool `json:"shuffleEnabled" url:"shuffleEnabled,omitempty"`

	// Добавлять новый трек в начало плейлиста?
	AddNewTrackOnPlaylistTop bool `json:"addNewTrackOnPlaylistTop" url:"addNewTrackOnPlaylistTop,omitempty"`

	// Громкость в процентах (example: 75).
	VolumePercents int `json:"volumePercents" url:"volumePercents,omitempty"`

	// Видимость музыкальной библиотеки.
	UserMusicVisibility Visibility `json:"userMusicVisibility" url:"userMusicVisibility,omitempty"`

	// ???
	UserSocialVisibility Visibility `json:"userSocialVisibility" url:"userSocialVisibility,omitempty"`

	AdsDisabled bool `json:"adsDisabled" url:"adsDisabled,omitempty"`

	// example: 2019-04-14T14:55:50+00:00
	Modified string `json:"modified" url:"-"`

	RbtDisabled bool `json:"rbtDisabled" url:"-"`

	// Тема оформления.
	Theme Theme `json:"theme" url:"theme,omitempty"`

	AutoPlayRadio    bool `json:"autoPlayRadio" url:"autoPlayRadio,omitempty"`
	SyncQueueEnabled bool `json:"syncQueueEnabled" url:"syncQueueEnabled,omitempty"`
}

Настройки пользователя.

type AddPlaylistTracksRequestBody added in v0.4.2

type AddPlaylistTracksRequestBody struct {
	Revision ID     `url:"revision"`
	Diff     string `url:"diff"`
	// contains filtered or unexported fields
}

POST /users/{userId}/playlists/{kind}/change-relative

POST /users/{userId}/playlists/{kind}/change

func NewAddPlaylistTracksRequestBody added in v0.4.2

func NewAddPlaylistTracksRequestBody(pl Playlist) AddPlaylistTracksRequestBody

func (*AddPlaylistTracksRequestBody) AddTracks added in v0.4.2

func (a *AddPlaylistTracksRequestBody) AddTracks(item []Track)

func (*AddPlaylistTracksRequestBody) ParamsToValues added in v0.4.2

func (a *AddPlaylistTracksRequestBody) ParamsToValues() (url.Values, error)

type Album

type Album struct {
	// Идентификатор альбома.
	ID ID `json:"id"`

	// Название альбома.
	Title string `json:"title"`

	// Тип альбома.
	MetaType AlbumMetaType `json:"metaType"`

	// Год релиза.
	Year int `json:"year"`

	// Дата релиза в формате ISO 8601.
	ReleaseDate time.Time `json:"releaseDate"`

	// Ссылка на обложку.
	CoverURI string `json:"coverUri"`

	// Ссылка на превью Open Graph.
	OgImage string `json:"ogImage"`

	// Жанр музыки.
	Genre string `json:"genre"`

	// Количество треков.
	TrackCount int `json:"trackCount"`

	// Количество лайков.
	LikesCount int `json:"likesCount"`

	// Является новинкой.
	Recent bool `json:"recent"`

	// Является важным.
	VeryImportant bool `json:"veryImportant"`

	// Исполнители альбома, в минимальной информации.
	Artists []Artist `json:"artists"`

	// Лейблы.
	//
	// Может быть как слайсом строк с названиями, так и слайсом структур Label.
	//
	// (?) Слайсы строк используются при поиске, а слайсы структур в остальных случаях.
	Labels []any `json:"labels"`

	// Доступен ли альбом.
	Available bool `json:"available"`

	// Доступен ли альбом для пользователей с подпиской.
	AvailableForPremiumUsers bool `json:"availableForPremiumUsers"`

	AvailableForOptions []string `json:"availableForOptions"`

	// Доступен ли альбом из приложения для телефона.
	AvailableForMobile bool `json:"availableForMobile"`

	// Доступен ли альбом частично для пользователей без подписки.
	AvailablePartially bool `json:"availablePartially"`

	// ID лучших треков альбома.
	Bests []ID `json:"bests"`

	// Ремиксы, и прочее. Не пуст, например когда запрашивается альбом с треками.
	Duplicates []Album `json:"duplicates"`

	StorageDir string `json:"storageDir"`

	TrackPosition struct {
		Volume int `json:"volume"`
		Index  int `json:"index"`
	} `json:"trackPosition"`

	Regions          []string      `json:"regions"`
	AvailableRegions []interface{} `json:"availableRegions"`

	// например: "Remix".
	Version string `json:"version"`

	// Треки альбома, разделенные по дискам.
	Volumes [][]Track `json:"volumes"`
}

Альбом.

type AlbumIdRequestBody added in v0.3.4

type AlbumIdRequestBody struct {
	// ID альбома.
	AlbumId ID `url:"album-id"`
}

POST /users/{userId}/likes/albums/add

type AlbumIdsRequestBody added in v0.3.4

type AlbumIdsRequestBody struct {
	// ID альбомов.
	AlbumIds []ID `url:",albumIds"`
}

POST /users/{userId}/likes/albums/add-multiple

POST /users/{userId}/likes/albums/remove

func (*AlbumIdsRequestBody) SetIds added in v0.3.4

func (l *AlbumIdsRequestBody) SetIds(ids ...ID)

type AlbumMetaType added in v0.4.8

type AlbumMetaType string

Тип альбома.

const (
	AlbumMetaTypeSingle  AlbumMetaType = "single"
	AlbumMetaTypePodcast AlbumMetaType = "podcast"
	AlbumMetaTypeMusic   AlbumMetaType = "music"
	AlbumMetaTypeRemix   AlbumMetaType = "remix"
)

type AlbumShort added in v0.2.2

type AlbumShort struct {
	ID        ID        `json:"id"`
	Timestamp time.Time `json:"timestamp"`
}

type Artist

type Artist struct {
	ID ID `json:"id"`

	// Имя.
	Name string `json:"name"`

	// Исполнитель относится к категории сборник.
	Various bool `json:"various"`

	// Исполнитель является композитором.
	Composer bool `json:"composer"`

	// Фото.
	Cover *Cover `json:"cover"`

	// По сути дублирует Cover.URI.
	OgImage *string `json:"ogImage"`

	// Жанры исполнителя.
	Genres []string `json:"genres"`

	// Количество разных вещей.
	Counts *struct {
		// Общее количество треков исполнителя, доступных в каталоге ЯМ.
		Tracks int `json:"tracks"`

		// Количество собственных альбомов.
		DirectAlbums int `json:"directAlbums"`

		// Количество альбомов, где представлен исполнитель.
		AlsoAlbums int `json:"alsoAlbums"`

		// Количество треков, где представлен исполнитель.
		AlsoTracks int `json:"alsoTracks"`
	} `json:"counts"`

	// Треки исполнителя доступны?
	Available bool `json:"available"`

	// Рейтинги исполнителя.
	Ratings *struct {
		// За месяц.
		Month int `json:"month"`

		// За неделю.
		Week *int `json:"week"`

		// За день.
		Day *int `json:"day"`
	} `json:"ratings"`

	// Список ссылок на сайты исполнителя.
	Links []struct {
		// Заголовок ссылки.
		Title string `json:"title"`

		// Сама ссылка. YouTube, Twitter, персональный сайт, etc.
		Href string `json:"href"`

		// social | official
		Type string `json:"type"`

		// twitter | youtube | vk | telegram. Может быть nil, когда Type == official.
		SocialNetwork *string `json:"socialNetwork"`
	} `json:"links"`

	// Доступны билеты на концерт?
	TicketsAvailable *bool `json:"ticketsAvailable"`
}

Артист.

Много полей могут быть nil. Например, когда Artist находится в составе Track.

type ArtistAlbumsPaged added in v0.2.3

type ArtistAlbumsPaged struct {
	Pager  Pager   `json:"pager"`
	Albums []Album `json:"albums"`
}

type ArtistBriefInfo added in v0.2.3

type ArtistBriefInfo struct {
	Artist *struct {
		Artist

		// Количество слушателей, оценивших исполнителя.
		LikesCount int `json:"likesCount"`

		// Описание.
		Description struct {
			// Об артисте.
			Text string `json:"text"`

			// Ссылка на источник. Например, на Википедию.
			URI string `json:"uri"`
		} `json:"description"`

		// Откуда артист? Пример: ["Франция"].
		Countries []string `json:"countries"`

		// Год начала карьеры.
		InitDate string `json:"initDate"`

		// Год конца карьеры.
		EndDate string `json:"endDate"`

		// Ссылка на страницу артиста в английской Википедии.
		EnWikipediaLink string `json:"enWikipediaLink"`

		// Список вариантов ввода имени исполнителя в поисковой строке
		//
		// (для облегчения поиска музыки на смартфоне в режиме офлайн).
		//
		// Пример: ["Daft punk", "Дафт Панк", "duft pank", "ダフトパンク"]
		DbAliases []string `json:"dbAliases"`
	} `json:"artist"`

	// Собственные альбомы исполнителя (где он указан исполнителем), в базовой информации.
	Albums []Album `json:"albums"`

	// Альбомы, где представлен исполнитель (где он указан исполнителем), в базовой информации.
	AlsoAlbums []Album `json:"alsoAlbums"`

	// Популярные треки, в базовой информации.
	PopularTracks []Track `json:"popularTracks"`

	// Похожие (по стилю) исполнители, в базовой информации.
	SimilarArtists []Artist `json:"similarArtists"`

	// Все изображения исполнителя.
	AllCovers []Cover `json:"allCovers"`

	Stats struct {
		LastMonthListeners int `json:"lastMonthListeners"`
	} `json:"stats"`

	CustomWave struct {
		Title        string `json:"title"`
		AnimationURL string `json:"animationUrl"`
	} `json:"customWave"`

	PlaylistIds []struct {
		UID  ID `json:"uid"`
		Kind ID `json:"kind"`
	} `json:"playlistIds"`

	Playlists []Playlist `json:"playlists"`
}

type ArtistIdsRequestBody added in v0.3.4

type ArtistIdsRequestBody struct {
	// ID альбомов.
	ArtistIds []ID `url:",artistIds"`
}

POST /users/{userId}/likes/artists/add-multiple

POST /users/{userId}/likes/artists/remove

func (*ArtistIdsRequestBody) SetIds added in v0.3.4

func (l *ArtistIdsRequestBody) SetIds(ids ...ID)

type ArtistTopTracks added in v0.2.3

type ArtistTopTracks struct {
	Artist *Artist `json:"artist"`
	Tracks []ID    `json:"tracks"`
}

type ArtistTracksPaged added in v0.2.3

type ArtistTracksPaged struct {
	Pager  Pager   `json:"pager"`
	Tracks []Track `json:"tracks"`
}

type Best

type Best struct {
	// Тип лучшего результата
	Type SearchType `json:"type"`

	Text string `json:"text"`

	// Может быть nil.
	//
	// Для удобства используйте поля Track, Artist, и так далее.
	// Это тот же Result.
	Result any `json:"result"`

	// Лучший трек.
	Track *Track `json:"-"`

	// Лучший артист.
	Artist *Artist `json:"-"`

	// Лучший альбом.
	Album *Album `json:"-"`

	// Лучший плейлист.
	Playlist *Playlist `json:"-"`
}

Лучший результат поиска

func (*Best) UnmarshalJSON added in v0.4.0

func (b *Best) UnmarshalJSON(data []byte) error

type Cover

type Cover struct {
	// Если не пуста, значит остальные поля структуры будут пусты.
	//
	// Пример: "cover doesn't exist".
	Error string `json:"error"`

	// (?) Пользовательская обложка?
	Custom bool `json:"custom"`

	// Тип обложки.
	Type CoverType `json:"type"`

	// Пример: "7d7e16a0.p.ЕЩЁ_КАКОЙ_ТО_ID/"
	Prefix string `json:"prefix"`

	// Не пуста когда поле type = "pic".
	Dir string `json:"dir"`

	// Существует когда поле type == mosaic.
	//
	// Видимо здесь находятся ссылки на изображения используемые для создания мозайки. Например ссылки на обложки треков.
	ItemsUri []string `json:"itemsUri"`

	// Существует, когда поле Type не mosaic.
	//
	// пример: "avatars.yandex.net/get-music-content/КАКОЙ_ТО_ID/7d7e16a0.p.ЕЩЁ_КАКОЙ_ТО_ID/%%"
	URI string `json:"uri"`

	// ???.
	Version string `json:"version"`
}

type CoverType added in v0.4.0

type CoverType string
const (
	// Своя картинка. Например вы создали плейлист, и на обложку установили свою картинку.
	CoverTypePic CoverType = "pic"

	// Например когда плейлист без обложки, то в качестве обложки используется коллаж из четырех обложек первых треков.
	CoverTypeMosaic CoverType = "mosaic"

	// Когда у артиста есть официальное фото в профиле ЯМ. Используется на странице профиля артиста.
	CoverTypeFromArtistPhotos CoverType = "from-artist-photos"

	// Когда у артиста нет официального фото в профиле ЯМ, то в качестве фото артиста используется обложка одного из альбомов.
	// Используется на странице профиля артиста.
	CoverTypeFromAlbumCover CoverType = "from-album-cover"
)

type CreatePlaylistRequestBody

type CreatePlaylistRequestBody struct {
	// Название.
	Title string `url:"title"`

	// Видимость.
	Visibility Visibility `url:"visibility"`

	// Описание.
	Description string `url:"description"`
}

POST /users/{userId}/playlists/create

type DeletePlaylistTracksRequestBody added in v0.4.2

type DeletePlaylistTracksRequestBody struct {
	Kind     ID     `url:"kind"`
	Revision ID     `url:"revision"`
	Diff     string `url:"diff"`
	// contains filtered or unexported fields
}

func NewDeletePlaylistTracksRequestBody added in v0.4.2

func NewDeletePlaylistTracksRequestBody(pl Playlist) DeletePlaylistTracksRequestBody

func (*DeletePlaylistTracksRequestBody) AddTrack added in v0.4.2

func (d *DeletePlaylistTracksRequestBody) AddTrack(item TrackItem)

func (*DeletePlaylistTracksRequestBody) ParamsToValues added in v0.4.2

func (d *DeletePlaylistTracksRequestBody) ParamsToValues() (url.Values, error)

type ErrWithStatusCode added in v0.4.8

type ErrWithStatusCode struct {
	StatusCode int
}

func NewErrWithStatusCode added in v0.4.8

func NewErrWithStatusCode(statusCode int) ErrWithStatusCode

func (ErrWithStatusCode) Error added in v0.4.8

func (e ErrWithStatusCode) Error() string

type Error

type Error struct {
	// Например: validate.
	Name string `json:"name"`

	// Например: Parameters requirements are not met.
	Message string `json:"message"`
}

Ошибка. Например ошибка валидации.

func (Error) Error added in v0.4.8

func (e Error) Error() string

func (Error) IsNotFound added in v0.4.9

func (e Error) IsNotFound() bool

Вероятно если ID валидный (см. IsValidate), то в каких-то случаях может быть и ошибка not found.

func (Error) IsSessionExpired added in v0.4.8

func (e Error) IsSessionExpired() bool

Нужно обновить access token.

func (Error) IsValidate added in v0.4.8

func (e Error) IsValidate() bool

Ошибка валидации может быть в этих случаях:

1. Изменилось API.

2. Я допустил ошибку.

3. Неверные данные в теле запроса. Например вы пытаетесь получить артиста с ID "-1", "0" и так далее. Хотя в таких случаях нужно отдавать 404, но имеем что имеем.

type GetTracksByIdsRequestBody

type GetTracksByIdsRequestBody struct {
	// ID треков.
	TrackIds []ID `url:",track-ids"`

	// С позициями?
	WithPositions bool `url:"with-positions"`
}

POST ​/tracks​

type GetUserPlaylistsQueryParams

type GetUserPlaylistsQueryParams struct {
	// like 1000,1003
	Kinds []string `url:",kinds"`

	Mixed bool `url:"mixed"`

	RichTracks bool `url:"rich-tracks"`
}

GET /users/{userId}/playlists

type ID added in v0.3.1

type ID string

func (ID) String added in v0.3.1

func (i ID) String() string

func (*ID) UnmarshalJSON added in v0.4.0

func (i *ID) UnmarshalJSON(data []byte) error

type InvocationInfo

type InvocationInfo struct {
	// Адрес какого-то сервера Яндекс.Музыки.
	Hostname string `json:"hostname"`

	// ID запроса.
	ReqID string `json:"req-id"`

	// (?) Время выполнения запроса в миллисекундах.
	//
	// string | int
	ExecDurationMillis any `json:"exec-duration-millis"`
}

Что-то техническое.

type KindOwnerUidRequestBody added in v0.3.4

type KindOwnerUidRequestBody struct {
	// Kind плейлиста.
	Kind ID `url:"kind"`

	// UID владельца плейлиста.
	OwnerUid ID `url:"owner-uid"`
}

POST /users/{userId}/likes/playlists/add

type Label

type Label struct {
	// ID лейбла.
	ID ID `json:"id"`

	// Имя лейбла.
	Name string `json:"name"`
}

Лейбл.

type Lyrics

type Lyrics struct {
	// Уникальный идентификатор текста трека.
	ID ID `json:"id"`

	// Первые строки текст песни.
	Lyrics string `json:"lyrics"`

	// Есть ли права.
	HasRights bool `json:"hasRights"`

	// Текст песни.
	FullLyrics string `json:"fullLyrics"`

	// Язык текста.
	TextLanguage string `json:"textLanguage"`

	// Доступен ли перевод.
	ShowTranslation bool `json:"showTranslation"`

	// Ссылка на источник перевода.
	Url string `json:"url"`
}

Текст трека.

type Owner

type Owner struct {
	// id.
	UID ID `json:"uid"`

	// Логин.
	Login string `json:"login"`

	// Имя.
	Name string `json:"name"`

	// Пол.
	Sex string `json:"sex"`

	// (?) Плейлист от редакции.
	Verified bool `json:"verified"`
}

Владелец. Владелец плейлиста, например.

type Pager added in v0.2.3

type Pager struct {
	// Текущая страница.
	Page int `json:"page"`

	// Сколько элементов на странице.
	//
	// Обратите внимание:
	//
	// Допустим вы отправили запрос с perPage = 20.
	//
	// Вам пришел ответ с этой структурой (Pager). И вот это поле (PerPage)
	// может не быть равным 20. Такое может быть когда элементов чуть больше чем perPage.
	//
	// Например вы указали perPage = 20, и пришел ответ, где Total равен 22.
	// В таком случае это поле (PerPage) будет равно 22.
	PerPage int `json:"perPage"`

	// Общее кол-во элементов.
	Total int `json:"total"`
}

Информация о страницах.

type Playlist

type Playlist struct {
	// Владелец плейлиста.
	Owner Owner `json:"owner"`

	// UID владельца плейлиста.
	UID ID `json:"uid"`

	// UUID.
	PlaylistUuid string `json:"playlistUuid"`

	// Уникальный идентификатор плейлиста.
	//
	// Обычно используется для операций над плейлистом.
	Kind ID `json:"kind"`

	// Название.
	Title string `json:"title"`

	// Описание.
	Description          string `json:"description"`
	DescriptionFormatted string `json:"descriptionFormatted,omitempty"`

	// Что-то типа версии плейлиста.
	// Если плейлист изменился: добавили/удалили треки,
	// то Revision прибавляется на 1.
	//
	// Может быть пуст, если плейлист не создан вами(?).
	Revision ID `json:"revision"`

	Available bool `json:"available"`

	// Совместный плейлист?
	Collective bool `json:"collective"`

	// Обложка.
	Cover Cover `json:"cover"`

	// Дата создания.
	Created time.Time `json:"created"`

	// Дата изменения.
	Modified time.Time `json:"modified"`

	// Общая длина в миллисекундах.
	DurationMs int `json:"durationMs"`

	OgImage string `json:"ogImage"`

	// Количество треков.
	TrackCount int `json:"trackCount"`

	// Количество лайков.
	LikesCount int `json:"likesCount"`

	// Видимость.
	Visibility Visibility `json:"visibility"`

	// Треки.
	//
	// Может быть пустым. Зависит от метода, который вернул эту структуру.
	Tracks []TrackItem `json:"tracks"`
}

type PlaylistAddTracksOperation added in v0.4.2

type PlaylistAddTracksOperation struct {
	// insert.
	Op     string `json:"op"`
	At     int    `json:"at"`
	Tracks []struct {
		ID      ID `json:"id"`
		AlbumID ID `json:"albumId"`
	} `json:"tracks"`
}

type PlaylistDeleteTracksOperation added in v0.4.2

type PlaylistDeleteTracksOperation struct {
	// delete.
	Op     string `json:"op"`
	From   int    `json:"from"`
	To     int    `json:"to"`
	Tracks []struct {
		ID      ID `json:"id"`
		AlbumID ID `json:"albumId"`
	} `json:"tracks"`
}

type PlaylistId

type PlaylistId struct {
	// Уникальный идентификатор пользователя владеющим плейлистом.
	UID ID `json:"uid"`

	// Уникальный идентификатор плейлиста.
	Kind ID `json:"kind"`
}

type PlaylistRecommendations

type PlaylistRecommendations struct {
	// Уникальный идентификатор партии треков
	BatchId string `json:"batch_id"`

	// Треки.
	Tracks []Track `json:"tracks"`
}

Рекомендации для плейлиста

type PlaylistsIdsRequestBody added in v0.2.2

type PlaylistsIdsRequestBody struct {
	// uid владельца плейлиста и kind плейлиста через двоеточие и запятую.
	//
	// "123:9482", "999:8888".
	PlaylistIds []string `url:",playlistIds"`
}

POST /playlists/list

POST /users/{userId}/likes/playlists/add-multiple

func (*PlaylistsIdsRequestBody) Add added in v0.2.2

func (g *PlaylistsIdsRequestBody) Add(kind ID, uid ID)

Добавить в PlaylistIds.

owner - uid владелеца плейлиста

kind - kind плейлиста

func (*PlaylistsIdsRequestBody) AddMany added in v0.2.2

func (g *PlaylistsIdsRequestBody) AddMany(kindUid map[ID]ID)

Добавить в PlaylistIds.

map[kind плейлиста]uid_владельца

type Plus added in v0.2.3

type Plus struct {
	HasPlus             bool `json:"hasPlus"`
	IsTutorialCompleted bool `json:"isTutorialCompleted"`
	Migrated            bool `json:"migrated"`
}

Информация о подписке Плюс.

type R128

type R128 struct {
	I float32 `json:"i"`

	// True Peak.
	Tp float32 `json:"tp"`
}

Нормализация.

https://en.wikipedia.org/wiki/EBU_R_128

type Response added in v0.2.3

type Response[T any] struct {
	// Информация о запросе.
	InvocationInfo InvocationInfo `json:"invocationInfo"`

	// Если не nil, то поле result будет nil.
	Error *Error `json:"error"`

	// Результат запроса.
	Result T `json:"result"`

	// Может быть при некоторых запросах.
	// Например при получении лайкнутых плейлистов.
	Pager *Pager `json:"pager"`
}

Обычно ответ выглядит так.

type ResponseLikedPlaylist added in v0.3.4

type ResponseLikedPlaylist struct {
	Playlist  Playlist  `json:"playlist"`
	Timestamp time.Time `json:"timestamp"`
}
type Search struct {
	// По какому типу был выполнен поиск.
	//
	// Например: если тип поиска будет "artist", то
	// поля best, playlists, и подобные, будут пусты, кроме поля Artists.
	Type SearchType `json:"type"`

	// Текущая страница. Доступно при использовании параметра type.
	Page int `json:"page"`

	// Результатов на странице. Доступно при использовании параметра type.
	PerPage int `json:"perPage"`

	// Поисковой запрос (оригинальный или исправленный).
	Text string `json:"text"`

	// ID запроса.
	SearchRequestID string `json:"searchRequestId"`

	// Был ли исправлен запрос. Доступен при Type "all".
	MisspellCorrected bool `json:"misspellCorrected"`

	// Исправленный поисковой запрос. Не пуст, если запрос был исправлен.
	MisspellResult string `json:"misspellResult"`

	// Оригинальный поисковой запрос. Не пуст, если запрос был исправлен.
	MisspellOriginal string `json:"misspellOriginal"`

	// ID запроса.
	SearchResultID string `json:"searchResultId"`

	// Лучший результат.
	//
	// Не nil если Type == all.
	Best *Best `json:"best"`

	// Найденные треки.
	Tracks SearchResult[Track] `json:"tracks"`

	// Найденные альбомы.
	Albums SearchResult[Album] `json:"albums"`

	// Найденные артисты.
	Artists SearchResult[Artist] `json:"artists"`

	// Найденные плейлисты.
	Playlists SearchResult[Playlist] `json:"playlists"`
}

Результаты поиска.

type SearchQueryParams

type SearchQueryParams struct {
	// Текст запроса.
	Text string `url:"text"`

	// Номер страницы.
	Page int `url:"page"`

	// Тип поиска (default = all).
	Type SearchType `url:"type"`

	// Исправлять опечатки?
	NoCorrect bool `url:"nocorrect"`
}

GET /search

type SearchResult

type SearchResult[T any] struct {
	// Количество результатов
	Total int `json:"total"`

	// Максимальное количество результатов на странице.
	PerPage int `json:"perPage"`

	// Позиция блока
	Order int `json:"order"`

	Results []T `json:"results"`
}

type SearchSuggestQueryParams

type SearchSuggestQueryParams struct {
	// Часть поискового запроса.
	Part string `url:"part"`
}

GET /search/suggest

type SearchType

type SearchType string

Тип поиска.

const (
	// Поиск артистов.
	SearchTypeArtist SearchType = "artist"

	// Поиск альбомов.
	SearchTypeAlbum SearchType = "album"

	// Поиск треков.
	SearchTypeTrack SearchType = "track"

	// Поиск подкастов.
	SearchTypePodcast SearchType = "podcast"

	// Поиск плейлистов.
	SearchTypePlaylist SearchType = "playlist"

	// Поиск видео.
	SearchTypeVideo SearchType = "video"

	// Поиск всего.
	SearchTypeAll SearchType = "all"
)

type SimilarTracks

type SimilarTracks struct {
	Track Track `json:"track"`

	// Похожие треки.
	//
	// Может быть пуст, если изначальный трек не популярен(?).
	SimilarTracks []Track `json:"similarTracks"`
}

Список похожих треков на другой трек.

type SortBy added in v0.2.3

type SortBy string

Сортировка по...

const (
	// Сортировка по году.
	SortByYear SortBy = "year"

	// Сортировка по рейтингу.
	SortByRating SortBy = "rating"
)

func (SortBy) String added in v0.4.8

func (e SortBy) String() string

type SortOrder added in v0.3.1

type SortOrder string

Сортировка по...

const (
	// Сортировка по убыванию.
	SortOrderDesc SortOrder = "desc"

	// Сортировка по возрастанию.
	SortOrderAsc SortOrder = "asc"
)

func (SortOrder) String added in v0.4.8

func (e SortOrder) String() string

type Status

type Status struct {
	Account      Account      `json:"account"`
	Subscription Subscription `json:"subscription"`
}

type Subscription

type Subscription struct {
	HadAnySubscription bool `json:"hadAnySubscription"`
}

Информация о подписках пользователя

type Suggestions

type Suggestions struct {
	// Лучший результат.
	//
	// Альбом, артист, плейлист, видео, и так далее.
	Best Best `json:"best"`

	// Предложения на основе запроса.
	//
	// Например, запрос: "emine"
	//
	// Suggestions будут примерно такие:
	//
	// ["eminem", "mount eminest", "eminen", "eminem - encore"], и так далее.
	Suggestions []string `json:"suggestions"`
}

Поисковая подсказка.

type Supplement

type Supplement struct {
	// Уникальный идентификатор дополнительной информации.
	ID string `json:"id"`

	// Текст.
	Lyrics Lyrics `json:"lyrics"`

	// Станция по треку доступна?
	RadioIsAvailable bool `json:"radioIsAvailable"`

	// Описание эпизода подкаста.
	Description string `json:"description"`
}

Дополнительная информация о треке.

type Theme added in v0.2.2

type Theme string

Тема.

const (
	// Темная.
	ThemeBlack Theme = "black"

	// Светлая.
	ThemeWhite Theme = "white"

	// По умолчанию.
	ThemeDefault Theme = "default"
)

type Track

type Track struct {
	// Идентификатор трека.
	ID ID `json:"id"`

	// Идентификатор подменного трека.
	//
	// ID и RealID совпадают в случаях:
	//
	// 1. Трек доступен для прослушивания.
	//
	// 2. Трек недоступен и не имеет идентичного трека для автозамены.
	RealID ID `json:"realId"`

	// Название трека.
	Title string `json:"title"`

	// Лейбл.
	Major *Label `json:"major"`

	// Доступен для стриминга?
	Available bool `json:"available"`

	// Доступен только для пользователей с подпиской?
	AvailableForPremiumUsers bool `json:"availableForPremiumUsers"`

	// Трек могут послушать даже те, кто без подписки, или не вошел в аккаунт?
	AvailableFullWithoutPermission bool `json:"availableFullWithoutPermission"`

	// Например: ["bookmate"].
	AvailableForOptions []string `json:"availableForOptions"`

	// Адрес каталога, в котором хранится трек.
	StorageDir string `json:"storageDir"`

	// Продолжительность трека в миллисекундах.
	DurationMs int `json:"durationMs"`

	// Размер трека в байтах.
	FileSize int `json:"fileSize"`

	// Нормализация.
	R128 *R128 `json:"r128"`

	// Длина превью в миллисекундах.
	PreviewDurationMs int `json:"previewDurationMs"`

	// Список исполнителей трека, в минимальной информации.
	Artists []Artist `json:"artists"`

	// Список альбомов, в которые входит трек, в базовой информации.
	Albums []Album `json:"albums"`

	// URI обложки.
	CoverUri string `json:"coverUri"`

	// Ссылка на загруженную обложку трека.
	OgImage string `json:"ogImage"`

	// Доступен ли текст трека.
	LyricsAvailable bool `json:"lyricsAvailable"`

	Type             string `json:"type"`
	RememberPosition bool   `json:"rememberPosition"`
	TrackSharingFlag string `json:"trackSharingFlag"`

	// Информация о тексте.
	LyricsInfo struct {
		// Текст с треком будет синхронизироваться?
		HasAvailableSyncLyrics bool `json:"hasAvailableSyncLyrics"`

		// Текст для трека доступен?
		HasAvailableTextLyrics bool `json:"hasAvailableTextLyrics"`
	} `json:"lyricsInfo"`

	// Источник трека.
	TrackSource TrackSource `json:"trackSource"`

	// Если трек загружен пользователем,
	// то здесь будет имя файла.
	Filename *string `json:"filename"`

	AvailableAsRbt bool `json:"availableAsRbt"`

	// Трек 18+? (E)
	Explicit bool `json:"explicit"`

	// Регионы в которых доступен трек.
	Regions []string `json:"regions"`

	// Версия трека. Remix, deluxe, и так далее.
	Version string `json:"version"`
}

Трек.

type TrackDownloadInfo

type TrackDownloadInfo struct {
	// Кодек аудиофайла (mp3, aac).
	Codec string `json:"codec"`

	// Усиление.
	Gain bool `json:"gain"`

	// Предварительный просмотр.
	Preview bool `json:"preview"`

	// Ссылка на XML документ содержащий данные для загрузки трека.
	DownloadInfoUrl string `json:"downloadInfoUrl"`

	// Прямая ли ссылка.
	Direct bool `json:"direct"`

	// Битрейт аудиофайла в кбит/с.
	BitrateInKbps int `json:"bitrateInKbps"`
}

Информация о вариантах загрузки трека.

type TrackIdRequestBody added in v0.3.4

type TrackIdRequestBody struct {
	// ID трека.
	TrackId ID `url:"track-id"`
}

POST /users/{userId}/likes/tracks/add

type TrackIdsRequestBody added in v0.3.4

type TrackIdsRequestBody struct {
	// ID треков.
	TrackIds []ID `url:",track-ids"`
}

POST /users/{userId}/likes/tracks/add-multiple

POST /users/{userId}/likes/tracks/remove

func (*TrackIdsRequestBody) SetIds added in v0.3.4

func (l *TrackIdsRequestBody) SetIds(ids ...ID)

type TrackItem

type TrackItem struct {
	ID            ID        `json:"id"`
	Track         Track     `json:"track"`
	Timestamp     time.Time `json:"timestamp"`
	OriginalIndex int       `json:"originalIndex"`
	Recent        bool      `json:"recent"`
}

type TrackShort

type TrackShort struct {
	// Уникальный идентификатор трека.
	ID ID `json:"id"`

	// Уникальный идентификатор альбома.
	AlbumId ID `json:"albumId"`

	// Дата.
	Timestamp time.Time `json:"timestamp"`
}

Укороченная версия трека с неполными данными.

type TrackSource added in v0.5.1

type TrackSource string
const (
	// (?) Трек из библиотеки ЯМ.
	TrackSourceOwn TrackSource = "OWN"

	// Трек загружен пользователем.
	TrackSourceUgc TrackSource = "UGC"
)

type TracksLibrary

type TracksLibrary struct {
	Library struct {
		// Уникальный идентификатор пользователя.
		Uid ID `json:"uid"`

		Revision ID `json:"revision"`

		// Список треков в укороченной версии.
		Tracks []TrackShort `json:"tracks"`
	} `json:"library"`
}

Список треков.

type Visibility

type Visibility string

Видимость.

const (
	// Приватная.
	VisibilityPrivate Visibility = "private"

	// Публичная.
	VisibilityPublic Visibility = "public"
)

func (Visibility) String added in v0.4.8

func (e Visibility) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL