From f1be72088f32bcf98979644d3bcdcd75ba5af478 Mon Sep 17 00:00:00 2001 From: absidue <48293849+absidue@users.noreply.github.com> Date: Sat, 16 Oct 2021 16:32:49 +0200 Subject: [PATCH] Add video_info_from_basic_info function --- docs/YouTube/README.md | 10 ++++++++++ play-dl/YouTube/stream.ts | 2 +- play-dl/YouTube/utils/extractor.ts | 16 ++++++++++++++++ play-dl/YouTube/utils/index.ts | 9 ++++++++- play-dl/index.ts | 11 ++++++++++- 5 files changed, 45 insertions(+), 3 deletions(-) diff --git a/docs/YouTube/README.md b/docs/YouTube/README.md index 46698b4..9143578 100644 --- a/docs/YouTube/README.md +++ b/docs/YouTube/README.md @@ -86,6 +86,16 @@ const video = await video_info(url) console.log(video.format) ``` +### video_info_from_basic_info(data : `InfoData`) + +_This contains everything with deciphered formats along with `video_details`. It uses data returned by [`video_basic_info`](https://github.com/play-dl/play-dl/tree/main/docs/YouTube#video_basic_infourl--string-options--infooptions). This function is useful if you use [`video_basic_info`](https://github.com/play-dl/play-dl/tree/main/docs/YouTube#video_basic_infourl--string-options--infooptions) earlier in your code and want to convert the output for use with [`stream_from_info`](https://github.com/play-dl/play-dl/tree/main/docs#stream_from_infoinfo--infodata-options--streamoptions)_ + +```js +const basic_video = await video_basic_info(url); + +const video = await video_info_from_basic_info(basic_video); +``` + ## Playlist ### playlist_info(url : `string`, options : `PlaylistOptions`) diff --git a/play-dl/YouTube/stream.ts b/play-dl/YouTube/stream.ts index ebe9f7c..eebec84 100644 --- a/play-dl/YouTube/stream.ts +++ b/play-dl/YouTube/stream.ts @@ -85,7 +85,7 @@ export async function stream(url: string, options: StreamOptions = {}): Promise< ); } /** - * Stream command for YouTube using info from video_info function. + * Stream command for YouTube using info from video_info or video_info_from_basic_info function. * @param info video_info data * @param options lets you add quality, cookie, proxy support for stream * @returns Stream class with type and stream for playing. diff --git a/play-dl/YouTube/utils/extractor.ts b/play-dl/YouTube/utils/extractor.ts index 8a010af..45eb96b 100644 --- a/play-dl/YouTube/utils/extractor.ts +++ b/play-dl/YouTube/utils/extractor.ts @@ -2,6 +2,7 @@ import { ProxyOptions as Proxy, request } from './../../Request/index'; import { format_decipher } from './cipher'; import { YouTubeVideo } from '../classes/Video'; import { YouTubePlayList } from '../classes/Playlist'; +import { InfoData } from '../stream'; interface InfoOptions { proxy?: Proxy[]; @@ -176,6 +177,21 @@ export async function video_info(url: string, options: InfoOptions = {}) { return data; } } +/** + * Function uses data from video_basic_info and deciphers it if it contains signatures. + * @param data basic_video_info data + * @returns Data containing video_details, LiveStreamData and formats of video url. + */ +export async function video_info_from_basic_info(data: InfoData) { + if (data.LiveStreamData.isLive === true && data.LiveStreamData.hlsManifestUrl !== null) { + return data; + } else if (data.format[0].signatureCipher || data.format[0].cipher) { + data.format = await format_decipher(data.format, data.html5player); + return data; + } else { + return data; + } +} /** * Function to get YouTube playlist info from a playlist url. * @param url Playlist URL diff --git a/play-dl/YouTube/utils/index.ts b/play-dl/YouTube/utils/index.ts index 086c0d2..ada534a 100644 --- a/play-dl/YouTube/utils/index.ts +++ b/play-dl/YouTube/utils/index.ts @@ -1 +1,8 @@ -export { video_basic_info, video_info, playlist_info, yt_validate, extractID } from './extractor'; +export { + video_basic_info, + video_info, + video_info_from_basic_info, + playlist_info, + yt_validate, + extractID +} from './extractor'; diff --git a/play-dl/index.ts b/play-dl/index.ts index 1b92e7e..63e0466 100644 --- a/play-dl/index.ts +++ b/play-dl/index.ts @@ -1,4 +1,13 @@ -export { playlist_info, video_basic_info, video_info, yt_validate, extractID, YouTube, YouTubeStream } from './YouTube'; +export { + playlist_info, + video_basic_info, + video_info, + video_info_from_basic_info, + yt_validate, + extractID, + YouTube, + YouTubeStream +} from './YouTube'; export { spotify, sp_validate, refreshToken, is_expired, Spotify } from './Spotify'; export { soundcloud, so_validate, SoundCloud, SoundCloudStream } from './SoundCloud'; export { setToken } from './token';