deezer-public-api
Version:
This is Nodejs wrapper for the Deezer Public API that return promises.
415 lines (342 loc) • 10.9 kB
JavaScript
const fetch = require('node-fetch');
const apiUrl = 'https://api.deezer.com/'
function DeezerPublicApi() {
this.apiUrl = apiUrl;
}
/*
* ALBUM
*/
DeezerPublicApi.prototype.album = function(id, limit, index) {
var url = 'album/' + id;
return rq(url, index, limit);
};
DeezerPublicApi.prototype.album.comments = function(id, limit, index) {
var url = 'album/' + id + '/comments';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.album.fans = function(id, limit, index) {
var url = 'album/' + id + '/fans';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.album.tracks = function(id, limit, index) {
var url = 'album/' + id + '/tracks';
return rq(url, index, limit);
};
/*
* ARTIST
*/
DeezerPublicApi.prototype.artist = function(id, limit, index) {
var url = 'artist/' + id;
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.top = function(id, limit, index) {
var url = 'artist/' + id + '/top';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.albums = function(id, limit, index) {
var url = 'artist/' + id + '/albums';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.comments = function(id, limit, index) {
var url = 'artist/' + id + '/comments';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.fans = function(id, limit, index) {
var url = 'artist/' + id + '/fans';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.related = function(id, limit, index) {
var url = 'artist/' + id + '/related';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.radio = function(id, limit, index) {
var url = 'artist/' + id + '/radio';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.artist.playlists = function(id, limit, index) {
var url = 'artist/' + id + '/playlists';
return rq(url, index, limit);
};
/*
* CHART
*/
DeezerPublicApi.prototype.chart = function(limit, index) {
var url = 'chart/';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.chart.tracks = function(limit, index) {
var url = 'chart/0/tracks';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.chart.albums = function(limit, index) {
var url = 'chart/0/albums';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.chart.artists = function(limit, index) {
var url = 'chart/0/artists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.chart.playlists = function(limit, index) {
var url = 'chart/0/playlists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.chart.podcasts = function(limit, index) {
var url = 'chart/0/podcasts';
return rq(url, index, limit);
};
/*
* COMMENT
*/
DeezerPublicApi.prototype.comment = function(id, limit, index) {
var url = 'comment/' + id;
return rq(url, index, limit);
};
/*
* EDITORIAL
*/
DeezerPublicApi.prototype.editorial = function(id, limit, index) {
var url = 'editorial/' + ((id) ? id : '');
return rq(url, index, limit);
};
DeezerPublicApi.prototype.editorial.selection = function(id, date, limit, index) {
var url = 'editorial/' + id + '/selection';
if (date) url = url + '&date=' + date;
return rq(url, index, limit);
};
DeezerPublicApi.prototype.editorial.charts = function(id, limit, index) {
var url = 'editorial/' + id + '/charts';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.editorial.releases = function(id, limit, index) {
var url = 'editorial/' + id + '/releases';
return rq(url, index, limit);
};
/*
* EPISODE
*/
DeezerPublicApi.prototype.episode = function(id, limit, index) {
var url = 'episode/' + id;
return rq(url, index, limit);
};
/*
* GENRE
*/
DeezerPublicApi.prototype.genre = function(id, limit, index) {
var url = 'genre/' + ((id) ? id : '');
return rq(url, index, limit);
};
DeezerPublicApi.prototype.genre.artists = function(id, limit, index) {
var url = 'genre/' + id + '/artists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.genre.podcasts = function(id, limit, index) {
var url = 'genre/' + id + '/podcasts';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.genre.radios = function(id, limit, index) {
var url = 'genre/' + id + '/radios';
return rq(url, index, limit);
};
/*
* INFOS
*/
DeezerPublicApi.prototype.infos = function() {
var url = 'infos';
return rq(url);
};
/*
* OPTIONS
*/
DeezerPublicApi.prototype.options = function() {
var url = 'options';
return rq(url);
};
/*
* PLAYLIST
*/
DeezerPublicApi.prototype.playlist = function(id, limit, index) {
var url = 'playlist/' + id;
return rq(url, index, limit);
};
DeezerPublicApi.prototype.playlist.comments = function(id, limit, index) {
var url = 'playlist/' + id + '/comments';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.playlist.fans = function(id, limit, index) {
var url = 'playlist/' + id + '/fans';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.playlist.tracks = function(id, limit, index) {
var url = 'playlist/' + id + '/tracks';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.playlist.radio = function(id, limit, index) {
var url = 'playlist/' + id + '/radio';
return rq(url, index, limit);
};
/*
* PODCAST
*/
DeezerPublicApi.prototype.podcast = function(id, limit, index) {
var url = 'podcast/' + ((id) ? id : '');
return rq(url, index, limit);
};
DeezerPublicApi.prototype.podcast.episodes = function(id, limit, index) {
var url = 'podcast/' + id + '/episodes';
return rq(url, index, limit);
};
/*
* RADIO
*/
DeezerPublicApi.prototype.radio = function(id, limit, index) {
var url = 'radio/' + ((id) ? id : '');
return rq(url, index, limit);
};
DeezerPublicApi.prototype.radio.genres = function(limit, index) {
var url = 'radio/genres';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.radio.top = function(limit, index) {
var url = 'radio/top';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.radio.lists = function(limit, index) {
var url = 'radio/lists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.radio.tracks = function(id, limit, index) {
var url = 'radio/' + id + '/tracks';
return rq(url, index, limit);
};
/*
* TRACK
*/
DeezerPublicApi.prototype.track = function(id, limit, index) {
var url = 'track/' + id;
return rq(url, index, limit);
};
/*
* USER
*/
DeezerPublicApi.prototype.user = function(id, limit, index) {
var url = 'user/' + id;
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.albums = function(id, limit, index) {
var url = 'user/' + id + '/albums';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.artists = function(id, limit, index) {
var url = 'user/' + id + '/artists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.charts = function(id, limit, index) {
var url = 'user/' + id + '/charts';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.charts.tracks = function(id, limit, index) {
var url = 'user/' + id + '/charts/tracks';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.charts.albums = function(id, limit, index) {
var url = 'user/' + id + '/charts/albums';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.charts.playlists = function(id, limit, index) {
var url = 'user/' + id + '/charts/playlists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.charts.artists = function(id, limit, index) {
var url = 'user/' + id + '/charts/artists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.flow = function(id, limit, index) {
var url = 'user/' + id + '/flow';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.followings = function(id, limit, index) {
var url = 'user/' + id + '/followings';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.followers = function(id, limit, index) {
var url = 'user/' + id + '/followers';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.playlists = function(id, limit, index) {
var url = 'user/' + id + '/playlists';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.podcasts = function(id, limit, index) {
var url = 'user/' + id + '/podcasts';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.radios = function(id, limit, index) {
var url = 'user/' + id + '/radios';
return rq(url, index, limit);
};
DeezerPublicApi.prototype.user.tracks = function(id, limit, index) {
var url = 'user/' + id + '/tracks';
return rq(url, index, limit);
};
/*
* SEARCH
*/
DeezerPublicApi.prototype.search = function(options, order, limit, index) {
var url = 'search?q=';
var query = '';
if (typeof options === 'object') {
for (var key in options) {
query = query + key + ':"' + options[key] + '" ';
}
} else {
query = options;
}
url = url + query;
return rq(url, index, limit, order);
};
DeezerPublicApi.prototype.search.artist = function(query, order, limit, index, strict) {
var url = 'search/artist?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.playlist = function(query, order, limit, index, strict) {
var url = 'search/playlist?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.podcast = function(query, order, limit, index, strict) {
var url = 'search/podcast?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.radio = function(query, order, limit, index, strict) {
var url = 'search/radio?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.track = function(query, order, limit, index, strict) {
var url = 'search/track?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.user = function(query, order, limit, index, strict) {
var url = 'search/user?q=' + query;
return rq(url, index, limit, order, strict);
};
DeezerPublicApi.prototype.search.album = function (query, order, limit, index, strict) {
var url = 'search/album?q=' + query;
return rq(url, index, limit, order, strict);
};
function rq(url, index, limit, order, strict) {
return new Promise((resolve, reject)=>{
if (!url.includes("?")) url = url + '?';
if (index && index !== 0) url = url + '&index=' + index;
if (limit && limit !== 0) url = url + '&limit=' + limit;
if (order) url = url + '&order=' + order;
if (strict) url = url + '&strict=on';
if (url.endsWith('?')) url = url.slice(0, -1);
fetch(apiUrl + url, {
json: true
}).then(res => res.json())
.then(json => {
resolve(json)
// console.log(json)
}).catch((err) => reject(err));
});
}
module.exports = DeezerPublicApi;