mirror of
https://github.com/YuzuZensai/play-dl-test.git
synced 2026-01-31 14:58:05 +00:00
pretty code
This commit is contained in:
@@ -1,39 +1,39 @@
|
||||
import { YouTubeVideo } from "../classes/Video";
|
||||
import { YouTubeVideo } from '../classes/Video';
|
||||
|
||||
export interface LiveStreamData {
|
||||
isLive: boolean;
|
||||
dashManifestUrl: string | null
|
||||
hlsManifestUrl: string | null
|
||||
dashManifestUrl: string | null;
|
||||
hlsManifestUrl: string | null;
|
||||
}
|
||||
|
||||
export interface formatData {
|
||||
itag: number;
|
||||
mimeType: string
|
||||
bitrate: number
|
||||
width: number
|
||||
height: number
|
||||
lastModified: string
|
||||
contentLength: string
|
||||
quality: string
|
||||
fps: number
|
||||
qualityLabel: string
|
||||
projectionType: string
|
||||
averageBitrate: number
|
||||
audioQuality: string
|
||||
approxDurationMs: string
|
||||
audioSampleRate: string
|
||||
audioChannels: number
|
||||
url : string
|
||||
signatureCipher : string;
|
||||
cipher : string;
|
||||
loudnessDb : number;
|
||||
targetDurationSec : number;
|
||||
itag: number;
|
||||
mimeType: string;
|
||||
bitrate: number;
|
||||
width: number;
|
||||
height: number;
|
||||
lastModified: string;
|
||||
contentLength: string;
|
||||
quality: string;
|
||||
fps: number;
|
||||
qualityLabel: string;
|
||||
projectionType: string;
|
||||
averageBitrate: number;
|
||||
audioQuality: string;
|
||||
approxDurationMs: string;
|
||||
audioSampleRate: string;
|
||||
audioChannels: number;
|
||||
url: string;
|
||||
signatureCipher: string;
|
||||
cipher: string;
|
||||
loudnessDb: number;
|
||||
targetDurationSec: number;
|
||||
}
|
||||
|
||||
export interface InfoData{
|
||||
LiveStreamData : LiveStreamData
|
||||
html5player : string
|
||||
format : Partial<formatData>[]
|
||||
video_details : YouTubeVideo
|
||||
related_videos: string[]
|
||||
}
|
||||
export interface InfoData {
|
||||
LiveStreamData: LiveStreamData;
|
||||
html5player: string;
|
||||
format: Partial<formatData>[];
|
||||
video_details: YouTubeVideo;
|
||||
related_videos: string[];
|
||||
}
|
||||
|
||||
@@ -46,3 +46,29 @@ export function setCookieToken(options: { cookie: string }) {
|
||||
youtubeData = { cookie };
|
||||
youtubeData.file = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates cookies locally either in file or in memory.
|
||||
*
|
||||
* Example
|
||||
* ```ts
|
||||
* const response = ... // Any https package get function.
|
||||
*
|
||||
* play.cookieHeaders(response.headers['set-cookie'])
|
||||
* ```
|
||||
* @param headCookie response headers['set-cookie'] array
|
||||
* @returns Nothing
|
||||
*/
|
||||
export function cookieHeaders(headCookie: string[]): void {
|
||||
if (!youtubeData?.cookie) return;
|
||||
headCookie.forEach((x: string) => {
|
||||
x.split(';').forEach((z) => {
|
||||
const arr = z.split('=');
|
||||
if (arr.length <= 1) return;
|
||||
const key = arr.shift()?.trim() as string;
|
||||
const value = arr.join('=').trim();
|
||||
setCookie(key, value);
|
||||
});
|
||||
});
|
||||
uploadCookie();
|
||||
}
|
||||
|
||||
@@ -23,9 +23,9 @@ const playlist_pattern =
|
||||
/^((?:https?:)?\/\/)?(?:(?:www|m)\.)?(youtube\.com)\/(?:(playlist|watch))(.*)?((\?|\&)list=)(PL|UU|LL|RD|OL)[a-zA-Z\d_-]{16,41}(.*)?$/;
|
||||
/**
|
||||
* Validate YouTube URL or ID.
|
||||
*
|
||||
*
|
||||
* **CAUTION :** If your search word is 11-12 long, you might get it validated as video ID.
|
||||
*
|
||||
*
|
||||
* To avoid above, add one more condition to yt_validate
|
||||
* ```ts
|
||||
* if (url.startsWith('https') && yt_validate(url) === 'video') {
|
||||
@@ -33,7 +33,7 @@ const playlist_pattern =
|
||||
* }
|
||||
* ```
|
||||
* @param url YouTube URL OR ID
|
||||
* @returns
|
||||
* @returns
|
||||
* ```
|
||||
* 'playlist' | 'video' | 'search' | false
|
||||
* ```
|
||||
@@ -114,7 +114,7 @@ export function extractID(url: string): string {
|
||||
* - `boolean` htmldata : given data is html data or not
|
||||
* @returns Video Basic Info {@link InfoData}.
|
||||
*/
|
||||
export async function video_basic_info(url: string, options: InfoOptions = {}) : Promise<InfoData> {
|
||||
export async function video_basic_info(url: string, options: InfoOptions = {}): Promise<InfoData> {
|
||||
let body: string;
|
||||
if (options.htmldata) {
|
||||
body = url;
|
||||
@@ -147,11 +147,10 @@ export async function video_basic_info(url: string, options: InfoOptions = {}) :
|
||||
player_response.playabilityStatus.errorScreen.playerKavRenderer?.reason.simpleText
|
||||
}`
|
||||
);
|
||||
const ownerInfo = initial_response.contents.twoColumnWatchNextResults.results?.results?.contents[1]?.videoSecondaryInfoRenderer
|
||||
?.owner?.videoOwnerRenderer
|
||||
const badge =
|
||||
ownerInfo?.badges &&
|
||||
ownerInfo?.badges[0];
|
||||
const ownerInfo =
|
||||
initial_response.contents.twoColumnWatchNextResults.results?.results?.contents[1]?.videoSecondaryInfoRenderer
|
||||
?.owner?.videoOwnerRenderer;
|
||||
const badge = ownerInfo?.badges && ownerInfo?.badges[0];
|
||||
const html5player = `https://www.youtube.com${body.split('"jsUrl":"')[1].split('"')[0]}`;
|
||||
const related: string[] = [];
|
||||
initial_response.contents.twoColumnWatchNextResults.secondaryResults.secondaryResults.results.forEach(
|
||||
@@ -178,7 +177,7 @@ export async function video_basic_info(url: string, options: InfoOptions = {}) :
|
||||
url: `https://www.youtube.com/channel/${vid.channelId}`,
|
||||
verified: Boolean(badge?.metadataBadgeRenderer?.style?.toLowerCase().includes('verified')),
|
||||
artist: Boolean(badge?.metadataBadgeRenderer?.style?.toLowerCase().includes('artist')),
|
||||
icons : ownerInfo?.thumbnail?.thumbnails || undefined
|
||||
icons: ownerInfo?.thumbnail?.thumbnails || undefined
|
||||
},
|
||||
views: vid.viewCount,
|
||||
tags: vid.keywords,
|
||||
|
||||
@@ -134,8 +134,8 @@ export function parseVideo(data?: any): YouTubeVideo {
|
||||
data.videoRenderer.ownerText.runs[0].navigationEndpoint.browseEndpoint.canonicalBaseUrl ||
|
||||
data.videoRenderer.ownerText.runs[0].navigationEndpoint.commandMetadata.webCommandMetadata.url
|
||||
}`,
|
||||
icons : data.videoRenderer.channelThumbnailSupportedRenderers.channelThumbnailWithLinkRenderer.thumbnail
|
||||
.thumbnails,
|
||||
icons: data.videoRenderer.channelThumbnailSupportedRenderers.channelThumbnailWithLinkRenderer.thumbnail
|
||||
.thumbnails,
|
||||
verified: Boolean(badge?.metadataBadgeRenderer?.style?.toLowerCase().includes('verified')),
|
||||
artist: Boolean(badge?.metadataBadgeRenderer?.style?.toLowerCase().includes('artist'))
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user