deezer converter

This commit is contained in:
Sayem Chowdhury 2021-03-23 20:18:38 +06:00
parent 65b4b33677
commit 3f0d47e9e4
3 changed files with 50 additions and 0 deletions

48
src/converter/deezer.ts Normal file
View File

@ -0,0 +1,48 @@
import axios from 'axios';
import delay from 'delay';
import {getAlbumInfo, getAlbumTracks, getTrackInfo} from '../api';
import type {albumType, trackType} from '../types';
const instance = axios.create({baseURL: 'https://api.deezer.com/', timeout: 15000});
export const isrc2deezer = async (name: string, isrc?: string) => {
if (!isrc) {
throw new Error('ISRC code not found for ' + name);
}
const {data} = await instance('track/isrc:' + isrc);
if (data.error) {
throw new Error(`No match on deezer for ${name} (ISRC: ${isrc})`);
}
return await getTrackInfo(data.id);
};
export const upc2deezer = async (name: string, upc?: string): Promise<[albumType, trackType[]]> => {
if (!upc) {
throw new Error('UPC code not found for ' + name);
} else if (upc.length > 12) {
upc = upc.slice(-12);
}
const {data} = await instance('album/upc:' + upc);
if (data.error) {
throw new Error(`No match on deezer for ${name} (UPC: ${upc})`);
}
const albumInfo = await getAlbumInfo(data.id);
const albumTracks = await getAlbumTracks(data.id);
return [albumInfo, albumTracks.data];
};
// Retry on rate limit error
instance.interceptors.response.use(async (response) => {
if (response.data.error && Object.keys(response.data.error).length > 0) {
if (response.data.error.code === 4) {
await delay.range(1000, 1500);
return await instance(response.config);
}
}
return response;
});

1
src/converter/index.ts Normal file
View File

@ -0,0 +1 @@
export * as deezerConverter from './deezer';

View File

@ -1,5 +1,6 @@
export {initDeezerApi} from './lib/request';
export * from './api';
export * from './converter';
export * from './lib/decrypt';
export * from './lib/get-url';
export * from './metadata-writer';