d-fi-core
d-fi is a streaming music downloader. This core module is designed to be used on future version of d-fi.
Installation
$ yarn add d-fi-core
Usage
Here's a simple example to download tracks.
import axios from 'axios';
import fs from 'fs';
import * as api from 'd-fi-core';
// Init api with arl from cookie
await api.initDeezerApi(arl_cookie);
// Verify user
try {
const user = await api.getUser();
// Successfully logged in
console.log('Logged in as ' + user.BLOG_NAME);
} catch (err) {
// Invalid arl cookie set
console.error(err.message);
}
// GET Track Object
const track = await api.getTrackInfo(song_id);
// Parse download URL for 128kbps
const trackData = await api.getTrackDownloadUrl(track, 1);
// Download track
const {data} = await axios.get(trackdata.trackUrl, {responseType: 'arraybuffer'});
// Decrypt track if needed
const outFile = trackData.isEncrypted ? api.decryptDownload(data, track.SNG_ID) : data;
// Add id3 metadata
const trackWithMetadata = await api.addTrackTags(outFile, track, 500);
// Save file to disk
fs.writeFileSync(track.SNG_TITLE + '.mp3', trackWithMetadata);
Methods
All method returns Object
or throws Error
. Make sure to catch error on your side.
.initDeezerApi(arl_cookie);
It is recommended that you first init the app with this method using your arl cookie.
Parameters |
Required |
Type |
arl_cookie |
Yes |
string |
.getTrackInfo(track_id);
Parameters |
Required |
Type |
track_id |
Yes |
string |
.getLyrics(track_id);
Parameters |
Required |
Type |
track_id |
Yes |
string |
.getAlbumInfo(album_id);
Parameters |
Required |
Type |
album_id |
Yes |
string |
.getAlbumTracks(album_id);
Parameters |
Required |
Type |
album_id |
Yes |
string |
.getPlaylistInfo(playlist_id);
Parameters |
Required |
Type |
playlist_id |
Yes |
string |
.getPlaylistTracks(playlist_id);
Parameters |
Required |
Type |
playlist_id |
Yes |
string |
.getArtistInfo(artist_id);
Parameters |
Required |
Type |
artist_id |
Yes |
string |
.getDiscography(artist_id, limit);
Parameters |
Required |
Type |
Default |
Description |
artist_id |
Yes |
string |
- |
artist id |
limit |
No |
number |
500 |
maximum tracks to fetch |
.getProfile(user_id);
Parameters |
Required |
Type |
user_id |
Yes |
string |
.searchAlternative(artist_name, song_name);
Parameters |
Required |
Type |
artist_name |
Yes |
string |
song_name |
Yes |
string |
.searchMusic(query, types, limit);
Parameters |
Required |
Type |
Default |
Description |
query |
Yes |
string |
- |
search query |
types |
No |
array |
['TRACK'] |
array of search types |
limit |
No |
number |
15 |
maximum item to fetch per types |
.getTrackDownloadUrl(track, quality);
Parameters |
Required |
Type |
Description |
track |
Yes |
string |
track object |
quality |
Yes |
1, 3 or 9 |
1 = 128kbps, 3 = 320kbps, 9 = flac |
.decryptDownload(data, song_id);
Parameters |
Required |
Type |
Description |
data |
Yes |
buffer |
downloaded song buffer |
song_id |
Yes |
string |
track id |
.addTrackTags(data, track,coverSize)
Parameters |
Required |
Type |
Description |
data |
Yes |
buffer |
downloaded song buffer |
track |
Yes |
string |
track object |
coverSize |
No |
56-1800 |
cover art size |
Donations
If you want to show your appreciation, you can donate me on ko-fi or buy me a coffee. Thanks!
Made with ❤️ & ☕ by Sayem