import { request } from "./utils/request"; import { ParseSearchInterface, ParseSearchResult } from "./utils/parser"; import { Video } from "./classes/Video"; import { Channel } from "./classes/Channel"; import { PlayList } from "./classes/Playlist"; enum SearchType { Video = 'EgIQAQ%253D%253D', PlayList = 'EgIQAw%253D%253D', Channel = 'EgIQAg%253D%253D', } export async function search(search :string, options? : ParseSearchInterface): Promise<(Video | Channel | PlayList)[]> { let url = 'https://www.youtube.com/results?search_query=' + search.replaceAll(' ', '+') if(!options) options = { type : "video"} if(!options.type) options.type = "video" if(!url.match('&sp=')){ url += '&sp=' switch(options?.type){ case 'channel': url += SearchType.Channel break case 'playlist': url += SearchType.PlayList break case 'video': url += SearchType.Video break } } let body = await request(url, { headers : {'accept-language' : 'en-US,en-IN;q=0.9,en;q=0.8,hi;q=0.7'} }) let data = ParseSearchResult(body, options) return data }