html data added in video_basic_info function

This commit is contained in:
killer069 2021-11-01 15:22:02 +05:30
parent 76ab060d57
commit 5214250eac
6 changed files with 39 additions and 30 deletions

View File

@ -50,6 +50,7 @@ let id = extractID(url)
_This are the info options that can be passed as a parameter in `video_info` and `video_basic_info`_
- proxy : Optional parameter to add support of proxies. As of now, HTTPS proxies are only supported. So make sure to get HTTPS proxies only.
- htmldata : `boolean` Set this to true if you are passing a html body as first parameter.
```js
const video = await video_basic_info(url, { proxy : ['url'] }) // Accepts a url which has port in it.
@ -59,6 +60,10 @@ const video = await video_basic_info(url, {proxy : [{
port : 8080
}]
}) // Or add a json containing hostname and port.
// Use any https package to use proxy and then do this
const video = await video_basic_info(body, { htmldata : true }) // You can use video_info function also.
```
### video_basic_info(url : `string`, options? : [`InfoOptions`](https://github.com/play-dl/play-dl/tree/main/docs/YouTube#infooptions))

View File

@ -1,7 +1,7 @@
import http, { ClientRequest, IncomingMessage } from 'node:http';
import https, { RequestOptions } from 'node:https';
import { URL } from 'node:url';
import { getCookies, setCookie, uploadCookie } from '../YouTube/utils/cookie';
import { cookieHeaders, getCookies } from '../YouTube/utils/cookie';
import { Proxy } from './classes';
export type ProxyOptions = ProxyOpts | string;
@ -63,16 +63,7 @@ export function request(req_url: string, options: RequestOpts = { method: 'GET'
return;
}
if (res.headers && res.headers['set-cookie'] && cookies_added) {
res.headers['set-cookie'].forEach((x) => {
x.split(';').forEach((x) => {
const arr = x.split('=');
if (arr.length <= 1) return;
const key = arr.shift()?.trim() as string;
const value = arr.join('=').trim();
setCookie(key, value);
});
});
uploadCookie();
cookieHeaders(res.headers['set-cookie'])
}
if (Number(res.statusCode) >= 300 && Number(res.statusCode) < 400) {
res = await https_getter(res.headers.location as string, options);
@ -98,16 +89,7 @@ export function request(req_url: string, options: RequestOpts = { method: 'GET'
return;
}
if (res.headers && (res.headers as any)['set-cookie'] && cookies_added) {
(res.headers as any)['set-cookie'].forEach((x: string) => {
x.split(';').forEach((x) => {
const arr = x.split('=');
if (arr.length <= 1) return;
const key = arr.shift()?.trim() as string;
const value = arr.join('=').trim();
setCookie(key, value);
});
});
uploadCookie();
cookieHeaders((res.headers as any)['set-cookie'])
}
if (res.statusCode >= 300 && res.statusCode < 400) {
res = await proxy_getter((res.headers as any)['location'], options.proxies, options.headers);

View File

@ -1,3 +1,4 @@
export { stream, stream_from_info, YouTubeStream } from './stream';
export * from './utils';
export { YouTube } from './search';
export { cookieHeaders } from './utils/cookie'

View File

@ -13,6 +13,7 @@ export enum StreamType {
export interface StreamOptions {
quality?: number;
proxy?: Proxy[];
htmldata? : boolean
}
export interface InfoData {
@ -53,7 +54,7 @@ export type YouTubeStream = Stream | LiveStreaming;
* @returns Stream class with type and stream for playing.
*/
export async function stream(url: string, options: StreamOptions = {}): Promise<YouTubeStream> {
const info = await video_info(url, { proxy: options.proxy });
const info = await video_info(url, { proxy: options.proxy, htmldata : options.htmldata });
const final: any[] = [];
if (
info.LiveStreamData.isLive === true &&

View File

@ -46,3 +46,16 @@ export function setCookieToken(options: { cookie: string }) {
youtubeData = { cookie };
youtubeData.file = false;
}
export function cookieHeaders(headCookie : string[]){
headCookie.forEach((x: string) => {
x.split(';').forEach((x) => {
const arr = x.split('=');
if (arr.length <= 1) return;
const key = arr.shift()?.trim() as string;
const value = arr.join('=').trim();
setCookie(key, value);
});
});
uploadCookie();
}

View File

@ -6,6 +6,7 @@ import { InfoData } from '../stream';
interface InfoOptions {
proxy?: Proxy[];
htmldata? : boolean
}
interface PlaylistOptions {
@ -79,14 +80,20 @@ export function extractID(url: string): string {
* @returns Data containing video_details, LiveStreamData and formats of video url.
*/
export async function video_basic_info(url: string, options: InfoOptions = {}) {
let body : string;
if(options.htmldata){
body = url;
}
else {
if (yt_validate(url) !== 'video') throw new Error('This is not a YouTube Watch 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, {
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_data = body
.split('var ytInitialPlayerResponse = ')?.[1]
?.split(';</script>')[0]