Discovery
Recommend tracks based on the user's listening context
Discovery providers
Implementing a provider
Minimal example
import type { DiscoveryProvider, NuclearPlugin, NuclearPluginAPI, Track } from '@nuclearplayer/plugin-sdk';
const provider: DiscoveryProvider = {
id: 'acme-discovery',
kind: 'discovery',
name: 'Acme Recommendations',
async getRecommendations(context: Track[], options) {
const { variety, limit = 5 } = options;
// Use the context tracks to find recommendations.
// `variety` controls how far to deviate from the listening context.
const artistNames = context.map((track) => track.artists[0]?.name).filter(Boolean);
const response = await fetch(
`https://api.acme.example/recommend?artists=${artistNames.join(',')}&variety=${variety}&limit=${limit}`,
);
const data = await response.json();
return data.tracks.map((track) => ({
title: track.name,
artists: [{ name: track.artist, roles: ['main'] }],
}));
},
};
const plugin: NuclearPlugin = {
onEnable(api: NuclearPluginAPI) {
api.Providers.register(provider);
},
onDisable(api: NuclearPluginAPI) {
api.Providers.unregister('acme-discovery');
},
};
export default plugin;The getRecommendations method
getRecommendations methodParameter
Type
Description
DiscoveryOptions
DiscoveryOptionsField
Type
Description
The variety parameter
The limit parameter
Type reference
DiscoveryProvider
DiscoveryProviderField
Type
Description
DiscoveryOptions
DiscoveryOptionsUsing discovery data
Consumer reference
Related settings
Setting
Type
Description
Last updated