1.2.1
Fixed JSON Parse Issues. Updated @types/nodes version. Added YouTube shorts url support.
This commit is contained in:
commit
9463df802d
@ -11,7 +11,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"build:check": "tsc --noEmit --incremental false",
|
"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": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
@ -156,9 +156,7 @@ export async function sp_search(
|
|||||||
if (query.length === 0) throw new Error('Pass some query to 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 ]`);
|
if (limit > 50 || limit < 0) throw new Error(`You crossed limit range of Spotify [ 0 - 50 ]`);
|
||||||
const response = await request(
|
const response = await request(
|
||||||
`https://api.spotify.com/v1/search?type=${type}&q=${query}&limit=${limit}&market=${
|
`https://api.spotify.com/v1/search?type=${type}&q=${query}&limit=${limit}&market=${spotifyData.market}`,
|
||||||
spotifyData.market
|
|
||||||
}`,
|
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `${spotifyData.token_type} ${spotifyData.access_token}`
|
Authorization: `${spotifyData.token_type} ${spotifyData.access_token}`
|
||||||
|
|||||||
@ -61,6 +61,8 @@ export function extractID(url: string): string {
|
|||||||
if (url.includes('youtu.be/')) video_id = url.split('youtu.be/')[1].split(/(\?|\/|&)/)[0];
|
if (url.includes('youtu.be/')) video_id = url.split('youtu.be/')[1].split(/(\?|\/|&)/)[0];
|
||||||
else if (url.includes('youtube.com/embed/'))
|
else if (url.includes('youtube.com/embed/'))
|
||||||
video_id = url.split('youtube.com/embed/')[1].split(/(\?|\/|&)/)[0];
|
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];
|
else video_id = url.split('watch?v=')[1].split(/(\?|\/|&)/)[0];
|
||||||
return video_id;
|
return video_id;
|
||||||
} else {
|
} else {
|
||||||
@ -76,15 +78,25 @@ export function extractID(url: string): string {
|
|||||||
*/
|
*/
|
||||||
export async function video_basic_info(url: string, options: InfoOptions = {}) {
|
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');
|
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 new_url = `https://www.youtube.com/watch?v=${video_id}&has_verified=1`;
|
||||||
const body = await request(new_url, {
|
const body = await request(new_url, {
|
||||||
proxies: options.proxy ?? [],
|
proxies: options.proxy ?? [],
|
||||||
headers: { 'accept-language': 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7' },
|
headers: { 'accept-language': 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7' },
|
||||||
cookies: true
|
cookies: true
|
||||||
});
|
});
|
||||||
const player_response = JSON.parse(body.split('var ytInitialPlayerResponse = ')[1].split('}};')[0] + '}}');
|
const player_data = body
|
||||||
const initial_response = JSON.parse(body.split('var ytInitialData = ')[1].split('}};')[0] + '}}');
|
.split('var ytInitialPlayerResponse = ')?.[1]
|
||||||
|
?.split(';</script>')[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(';</script>')[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(initial_data);
|
||||||
if (player_response.playabilityStatus.status !== 'OK')
|
if (player_response.playabilityStatus.status !== 'OK')
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`While getting info from url\n${
|
`While getting info from url\n${
|
||||||
|
|||||||
@ -77,7 +77,7 @@ export async function search(
|
|||||||
options: SearchOptions = {}
|
options: SearchOptions = {}
|
||||||
): Promise<YouTube[] | Spotify[] | SoundCloud[]> {
|
): Promise<YouTube[] | Spotify[] | SoundCloud[]> {
|
||||||
if (!options.source) options.source = { youtube: 'video' };
|
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 });
|
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.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);
|
else if (options.source.soundcloud) return await so_search(query, options.source.soundcloud, options.limit);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user