youtube-moosick
Version:
Unofficial Youtube music API, fully written in TypeScript
53 lines • 2.42 kB
JavaScript
import { $, $$ } from '../resources/utilities/objectScan.utility.js';
import { AlbumURL, AlbumURLHeader, Track } from '../resources/resultTypes/albumURL.js';
import { ConstantURLs, FlexColumnOffset } from '../enums.js';
import { ParsersExtended } from './parsersExtended.js';
import { utils } from '../utils.js';
/**
* Parser to deal with the output generated by the Moosick#getAlbum
*
* @remarks
* Do not use this class directly, unless for tests purposes
* @internal
*/
export class GetAlbumParser {
/**
* Parses the object provided by Moosick#getAlbum
* @param context - The return results from axios
*/
static parseAlbumURLPage(context) {
// Unprocessed Header
const unprocessedHeader = $$('.musicDetailHeaderRenderer')(context);
// Gets the tracks
const shelfContent = $$('.musicResponsiveListItemRenderer')(context);
const tracks = [];
for (const trackUnprocessed of shelfContent) {
const flexColumn = $('.flexColumns')(trackUnprocessed);
const fixedColumn = $('.fixedColumns')(trackUnprocessed);
tracks.push(Track.from({
lengthMs: utils.hms2ms($('.text')(fixedColumn)),
title: $('.text')(flexColumn),
videoId: $('.videoId')(flexColumn),
playlistId: $('.playlistId')(flexColumn),
url: `${ConstantURLs.VIDEOLINK}${$('.videoId')(flexColumn)}`,
}));
}
return AlbumURL.from({
AlbumURLHeader: this.playlistURLHeaderParser(unprocessedHeader),
tracks,
});
}
static playlistURLHeaderParser(header) {
const artist = ParsersExtended.artistParser(header[0].subtitle.runs);
return AlbumURLHeader.from({
title: header[0].title.runs[FlexColumnOffset.ONLYRUN].text,
description: header[0].description?.runs[FlexColumnOffset.ONLYRUN].text ?? '',
date: header[0].subtitle.runs[header[0].subtitle.runs.length - 1].text,
thumbnails: header[0].thumbnail.croppedSquareThumbnailRenderer.thumbnail.thumbnails,
trackCount: parseInt(header[0].secondSubtitle.runs[FlexColumnOffset.ONLYRUN].text, 10),
totalRuntime: header[0].secondSubtitle.runs[2].text,
artist,
});
}
}
//# sourceMappingURL=getAlbumParser.js.map