UNPKG

youtube-moosick

Version:

Unofficial Youtube music API, fully written in TypeScript

53 lines 2.42 kB
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