diff --git a/package-lock.json b/package-lock.json index 38a4d38..9b04145 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "play-dl", - "version": "0.6.3", + "version": "0.6.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "play-dl", - "version": "0.6.2", + "version": "0.6.4", "license": "MIT", "dependencies": { "got": "^11.8.2" diff --git a/package.json b/package.json index ee97eb1..dfbb75e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "play-dl", - "version": "0.6.3", + "version": "0.6.4", "description": "YouTube, SoundCloud, Spotify streaming for discord.js bots", "main": "dist/index.js", "typings": "dist/index.d.ts", diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 26cc000..16efac6 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -2,6 +2,7 @@ import { url_get } from './request' import { format_decipher, js_tokens } from './cipher' import { Video } from '../classes/Video' import { PlayList } from '../classes/Playlist' +import { parseThumbnail } from './parser'; const DEFAULT_API_KEY = "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"; const video_pattern = /^((?:https?:)?\/\/)?(?:(?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$/; @@ -29,11 +30,7 @@ export async function video_basic_info(url : string){ durationInSec : vid.lengthSeconds, durationRaw : parseSeconds(vid.lengthSeconds), uploadedDate : microformat.publishDate, - thumbnail : { - width : vid.thumbnail.thumbnails[vid.thumbnail.thumbnails.length - 1].width, - height : vid.thumbnail.thumbnails[vid.thumbnail.thumbnails.length - 1].height, - url : vid.thumbnail.thumbnails[vid.thumbnail.thumbnails.length - 1].url, - }, + thumbnail : parseThumbnail(vid.thumbnail.thumbnails), channel : { name : vid.author, id : vid.channelId, diff --git a/play-dl/YouTube/utils/parser.ts b/play-dl/YouTube/utils/parser.ts index b0bdfc1..8082f3f 100644 --- a/play-dl/YouTube/utils/parser.ts +++ b/play-dl/YouTube/utils/parser.ts @@ -7,6 +7,12 @@ export interface ParseSearchInterface { limit?: number; } +export interface thumbnail{ + width: string; + height : string; + url : string +} + export function ParseSearchResult(html :string, options? : ParseSearchInterface): (Video | PlayList | Channel)[] { if(!html) throw new Error('Can\'t parse Search result without data') if (!options) options = { type: "video", limit: 0 }; @@ -124,12 +130,7 @@ export function parseVideo(data?: any): Video | void { description: data.videoRenderer.descriptionSnippet && data.videoRenderer.descriptionSnippet.runs[0] ? data.videoRenderer.descriptionSnippet.runs[0].text : "", duration: data.videoRenderer.lengthText ? parseDuration(data.videoRenderer.lengthText.simpleText) : 0, duration_raw: data.videoRenderer.lengthText ? data.videoRenderer.lengthText.simpleText : null, - thumbnail: { - id: data.videoRenderer.videoId, - url: data.videoRenderer.thumbnail.thumbnails[data.videoRenderer.thumbnail.thumbnails.length - 1].url, - height: data.videoRenderer.thumbnail.thumbnails[data.videoRenderer.thumbnail.thumbnails.length - 1].height, - width: data.videoRenderer.thumbnail.thumbnails[data.videoRenderer.thumbnail.thumbnails.length - 1].width - }, + thumbnail: parseThumbnail(data.videoRenderer.thumbnail.thumbnails), channel: { id: data.videoRenderer.ownerText.runs[0].navigationEndpoint.browseEndpoint.browseId || null, name: data.videoRenderer.ownerText.runs[0].text || null, @@ -148,6 +149,29 @@ export function parseVideo(data?: any): Video | void { return res; } +export function parseThumbnail(thumbnails :thumbnail[]) : thumbnail{ + let parsed : thumbnail = { + width : '', + height : '', + url : '' + } + thumbnails.forEach((thumb) => { + if(thumb.url.indexOf('maxresdefault') !== -1){ + parsed = { + width : thumb.width, + height : thumb.height, + url : thumb.url + } + } + }) + if(parsed.url.length !== 0){ + return parsed + } + else { + return thumbnails[thumbnails.length - 1] + } +} + export function parsePlaylist(data?: any): PlayList | void { if (!data.playlistRenderer) return;