From dd1f01779c8cb239f1c547232d1ce46e80c1157c Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Tue, 26 Oct 2021 13:22:12 +0530 Subject: [PATCH 1/5] Fixed JSON parse issues --- play-dl/YouTube/utils/extractor.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 5ed2a3f..0d64e91 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -83,8 +83,8 @@ export async function video_basic_info(url: string, options: InfoOptions = {}) { headers: { 'accept-language': 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7' }, cookies: true }); - const player_response = JSON.parse(body.split('var ytInitialPlayerResponse = ')[1].split('}};')[0] + '}}'); - const initial_response = JSON.parse(body.split('var ytInitialData = ')[1].split('}};')[0] + '}}'); + const player_response = JSON.parse(body.split('var ytInitialPlayerResponse = ')[1].split(';')[0].split(/; (var|const|let)/)[0]); + const initial_response = JSON.parse(body.split('var ytInitialData = ')[1].split(';')[0].split(/; (var|const|let)/)[0]); if (player_response.playabilityStatus.status !== 'OK') throw new Error( `While getting info from url\n${ From 2406bd06309e5712f0f8cdd9022a1be57f3d4006 Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Tue, 26 Oct 2021 14:13:44 +0530 Subject: [PATCH 2/5] added prepublish script --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 8479fc6..aa63cc1 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "scripts": { "build": "tsc", "build:check": "tsc --noEmit --incremental false", - "pretty": "prettier --config .prettierrc \"play-dl/*.ts\" \"play-dl/*/*.ts\" \"play-dl/*/*/*.ts\" --write " + "pretty": "prettier --config .prettierrc \"play-dl/*.ts\" \"play-dl/*/*.ts\" \"play-dl/*/*/*.ts\" --write ", + "prepublishOnly": "tsc --build --clean;tsc --build --verbose" }, "repository": { "type": "git", From 5fd1045091422b7c14a3eb31e3f40d83e8aa7877 Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Tue, 26 Oct 2021 14:21:29 +0530 Subject: [PATCH 3/5] YT shorts support --- play-dl/Spotify/index.ts | 4 +--- play-dl/YouTube/utils/extractor.ts | 18 +++++++++++++++--- play-dl/index.ts | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/play-dl/Spotify/index.ts b/play-dl/Spotify/index.ts index af83c08..64eca61 100644 --- a/play-dl/Spotify/index.ts +++ b/play-dl/Spotify/index.ts @@ -156,9 +156,7 @@ export async function sp_search( if (query.length === 0) throw new Error('Pass some query to search.'); if (limit > 50 || limit < 0) throw new Error(`You crossed limit range of Spotify [ 0 - 50 ]`); const response = await request( - `https://api.spotify.com/v1/search?type=${type}&q=${query}&limit=${limit}&market=${ - spotifyData.market - }`, + `https://api.spotify.com/v1/search?type=${type}&q=${query}&limit=${limit}&market=${spotifyData.market}`, { headers: { Authorization: `${spotifyData.token_type} ${spotifyData.access_token}` diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 0d64e91..0704edc 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -61,6 +61,8 @@ export function extractID(url: string): string { if (url.includes('youtu.be/')) video_id = url.split('youtu.be/')[1].split(/(\?|\/|&)/)[0]; else if (url.includes('youtube.com/embed/')) video_id = url.split('youtube.com/embed/')[1].split(/(\?|\/|&)/)[0]; + else if (url.includes('youtube.com/shorts/')) + video_id = url.split('youtube.com/shorts/')[1].split(/(\?|\/|&)/)[0]; else video_id = url.split('watch?v=')[1].split(/(\?|\/|&)/)[0]; return video_id; } else { @@ -76,15 +78,25 @@ export function extractID(url: string): string { */ export async function video_basic_info(url: string, options: InfoOptions = {}) { if (yt_validate(url) !== 'video') throw new Error('This is not a YouTube Watch URL'); - let video_id: string = extractID(url); + const video_id: string = extractID(url); const new_url = `https://www.youtube.com/watch?v=${video_id}&has_verified=1`; const body = await request(new_url, { proxies: options.proxy ?? [], headers: { 'accept-language': 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7' }, cookies: true }); - const player_response = JSON.parse(body.split('var ytInitialPlayerResponse = ')[1].split(';')[0].split(/; (var|const|let)/)[0]); - const initial_response = JSON.parse(body.split('var ytInitialData = ')[1].split(';')[0].split(/; (var|const|let)/)[0]); + const player_response = JSON.parse( + body + .split('var ytInitialPlayerResponse = ')[1] + .split(';')[0] + .split(/; (var|const|let)/)[0] + ); + const initial_response = JSON.parse( + body + .split('var ytInitialData = ')[1] + .split(';')[0] + .split(/; (var|const|let)/)[0] + ); if (player_response.playabilityStatus.status !== 'OK') throw new Error( `While getting info from url\n${ diff --git a/play-dl/index.ts b/play-dl/index.ts index b92f26c..063c6a6 100644 --- a/play-dl/index.ts +++ b/play-dl/index.ts @@ -77,7 +77,7 @@ export async function search( options: SearchOptions = {} ): Promise { if (!options.source) options.source = { youtube: 'video' }; - query = encodeURIComponent(query) + query = encodeURIComponent(query); if (options.source.youtube) return await yt_search(query, { limit: options.limit, type: options.source.youtube }); else if (options.source.spotify) return await sp_search(query, options.source.spotify, options.limit); else if (options.source.soundcloud) return await so_search(query, options.source.soundcloud, options.limit); From 16b0e5b2370388e7f345c50e81eea84300ebcba1 Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Tue, 26 Oct 2021 14:31:30 +0530 Subject: [PATCH 4/5] Added some more error handler --- play-dl/YouTube/utils/extractor.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 0704edc..2e36365 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -85,12 +85,12 @@ export async function video_basic_info(url: string, options: InfoOptions = {}) { headers: { 'accept-language': 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7' }, cookies: true }); - const player_response = JSON.parse( - body - .split('var ytInitialPlayerResponse = ')[1] - .split(';')[0] - .split(/; (var|const|let)/)[0] - ); + const player_data = body + .split('var ytInitialPlayerResponse = ')?.[1] + ?.split(';')[0] + .split(/; (var|const|let)/)[0]; + if (!player_data) throw new Error('Initial Player Response Data is undefined.'); + const player_response = JSON.parse(player_data); const initial_response = JSON.parse( body .split('var ytInitialData = ')[1] From 8e7643e123be11dd6e1ea29c6b20a2144d1d4246 Mon Sep 17 00:00:00 2001 From: killer069 <65385476+killer069@users.noreply.github.com> Date: Tue, 26 Oct 2021 14:40:50 +0530 Subject: [PATCH 5/5] Errors Handler complete --- play-dl/YouTube/utils/extractor.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 2e36365..23ec61e 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -90,13 +90,13 @@ export async function video_basic_info(url: string, options: InfoOptions = {}) { ?.split(';')[0] .split(/; (var|const|let)/)[0]; if (!player_data) throw new Error('Initial Player Response Data is undefined.'); + const initial_data = body + .split('var ytInitialData = ')?.[1] + ?.split(';')[0] + .split(/; (var|const|let)/)[0]; + if (!initial_data) throw new Error('Initial Response Data is undefined.'); const player_response = JSON.parse(player_data); - const initial_response = JSON.parse( - body - .split('var ytInitialData = ')[1] - .split(';')[0] - .split(/; (var|const|let)/)[0] - ); + const initial_response = JSON.parse(initial_data); if (player_response.playabilityStatus.status !== 'OK') throw new Error( `While getting info from url\n${