mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-17 23:51:44 +00:00
Compare commits
11 Commits
with-bundl
...
f32228961b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f32228961b | ||
|
|
e5654b17bc | ||
|
|
617670cbaf | ||
|
|
5c7b986db8 | ||
|
|
bf74f32075 | ||
|
|
67167ec8d1 | ||
|
|
07d75bdf81 | ||
|
|
913239459c | ||
|
|
1dc01890c8 | ||
|
|
7eb53273c2 | ||
|
|
099b4aba4f |
@@ -150,6 +150,44 @@ async function buildProvider(providerName) {
|
||||
return { providerName, modules: results };
|
||||
}
|
||||
|
||||
async function buildUtilityFiles() {
|
||||
const utilityFiles = ["getBaseUrl", "headers", "providerContext"];
|
||||
|
||||
for (const utilityName of utilityFiles) {
|
||||
const utilityPath = path.join(providersDir, `${utilityName}.ts`);
|
||||
|
||||
if (!fs.existsSync(utilityPath)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await esbuild.build({
|
||||
entryPoints: [utilityPath],
|
||||
bundle: true,
|
||||
platform: "node",
|
||||
format: "cjs",
|
||||
target: "es2015",
|
||||
write: false,
|
||||
external: [],
|
||||
minify: false,
|
||||
keepNames: true,
|
||||
treeShaking: true,
|
||||
outfile: `${utilityName}.js`,
|
||||
});
|
||||
|
||||
let code = result.outputFiles[0].text;
|
||||
code = code.replace(/require\(['"]node:.*?['"]\)/g, "{}");
|
||||
|
||||
const outputPath = path.join(__dirname, "dist", `${utilityName}.js`);
|
||||
fs.writeFileSync(outputPath, code);
|
||||
|
||||
console.log(`✓ ${utilityName}.js (${(code.length / 1024).toFixed(1)}kb)`);
|
||||
} catch (error) {
|
||||
console.error(`✗ Error building ${utilityName}:`, error.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function buildAll() {
|
||||
const startTime = Date.now();
|
||||
console.log(
|
||||
@@ -163,6 +201,9 @@ async function buildAll() {
|
||||
}
|
||||
fs.mkdirSync(distDir, { recursive: true });
|
||||
|
||||
// Build utility files first
|
||||
await buildUtilityFiles();
|
||||
|
||||
// Build all providers
|
||||
const results = await Promise.all(providerDirs.map(buildProvider));
|
||||
|
||||
|
||||
2
dist/1cinevood/stream.js
vendored
2
dist/1cinevood/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/4khdhub/stream.js
vendored
2
dist/4khdhub/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/Joya9tv/stream.js
vendored
2
dist/Joya9tv/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/cinemaLuxe/stream.js
vendored
2
dist/cinemaLuxe/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/drive/stream.js
vendored
2
dist/drive/stream.js
vendored
File diff suppressed because one or more lines are too long
67
dist/getBaseUrl.js
vendored
Normal file
67
dist/getBaseUrl.js
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
var __async = (__this, __arguments, generator) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
var fulfilled = (value) => {
|
||||
try {
|
||||
step(generator.next(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var rejected = (value) => {
|
||||
try {
|
||||
step(generator.throw(value));
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
}
|
||||
};
|
||||
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
||||
step((generator = generator.apply(__this, __arguments)).next());
|
||||
});
|
||||
};
|
||||
|
||||
// providers/getBaseUrl.ts
|
||||
var getBaseUrl_exports = {};
|
||||
__export(getBaseUrl_exports, {
|
||||
getBaseUrl: () => getBaseUrl
|
||||
});
|
||||
module.exports = __toCommonJS(getBaseUrl_exports);
|
||||
var expireTime = 60 * 60 * 1e3;
|
||||
var getBaseUrl = /* @__PURE__ */ __name((providerValue) => __async(null, null, function* () {
|
||||
try {
|
||||
let baseUrl = "";
|
||||
const cacheKey = "CacheBaseUrl" + providerValue;
|
||||
const timeKey = "baseUrlTime" + providerValue;
|
||||
const baseUrlRes = yield fetch(
|
||||
"https://himanshu8443.github.io/providers/modflix.json"
|
||||
);
|
||||
const baseUrlData = yield baseUrlRes.json();
|
||||
baseUrl = baseUrlData[providerValue].url;
|
||||
return baseUrl;
|
||||
} catch (error) {
|
||||
console.error(`Error fetching baseUrl: ${providerValue}`, error);
|
||||
return "";
|
||||
}
|
||||
}), "getBaseUrl");
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
getBaseUrl
|
||||
});
|
||||
2
dist/hdhub4u/stream.js
vendored
2
dist/hdhub4u/stream.js
vendored
File diff suppressed because one or more lines are too long
37
dist/headers.js
vendored
Normal file
37
dist/headers.js
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
"use strict";
|
||||
var __defProp = Object.defineProperty;
|
||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
||||
var __export = (target, all) => {
|
||||
for (var name in all)
|
||||
__defProp(target, name, { get: all[name], enumerable: true });
|
||||
};
|
||||
var __copyProps = (to, from, except, desc) => {
|
||||
if (from && typeof from === "object" || typeof from === "function") {
|
||||
for (let key of __getOwnPropNames(from))
|
||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
||||
}
|
||||
return to;
|
||||
};
|
||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
||||
|
||||
// providers/headers.ts
|
||||
var headers_exports = {};
|
||||
__export(headers_exports, {
|
||||
headers: () => headers
|
||||
});
|
||||
module.exports = __toCommonJS(headers_exports);
|
||||
var headers = {
|
||||
"sec-ch-ua": '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
|
||||
"sec-ch-ua-mobile": "?0",
|
||||
"sec-ch-ua-platform": '"Windows"',
|
||||
// 'Sec-Fetch-Site': 'none',
|
||||
// 'Sec-Fetch-User': '?1',
|
||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
|
||||
};
|
||||
// Annotate the CommonJS export names for ESM import in node:
|
||||
0 && (module.exports = {
|
||||
headers
|
||||
});
|
||||
2
dist/katMovieFix/stream.js
vendored
2
dist/katMovieFix/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/katmovies/stream.js
vendored
2
dist/katmovies/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/meta.js
vendored
2
dist/luxMovies/meta.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/posts.js
vendored
2
dist/luxMovies/posts.js
vendored
File diff suppressed because one or more lines are too long
2
dist/luxMovies/stream.js
vendored
2
dist/luxMovies/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/movies4u/stream.js
vendored
2
dist/movies4u/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/skyMovieHD/stream.js
vendored
2
dist/skyMovieHD/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/catalog.js
vendored
2
dist/vega/catalog.js
vendored
@@ -1 +1 @@
|
||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),catalog_exports={};__export(catalog_exports,{catalog:()=>catalog,genres:()=>genres});var catalog=[{title:"New",filter:""},{title:"Netflix",filter:"web-series/netflix"},{title:"Amazon Prime",filter:"web-series/amazon-prime-video"},{title:"4K Movies",filter:"movies-by-quality/2160p"}],genres=[{title:"Action",filter:"category/movies-by-genres/action"},{title:"Adventure",filter:"category/movies-by-genres/adventure"},{title:"Animation",filter:"category/movies-by-genres/animation"},{title:"Biography",filter:"category/movies-by-genres/biography"},{title:"Comedy",filter:"category/movies-by-genres/comedy"},{title:"Crime",filter:"category/movies-by-genres/crime"},{title:"Documentary",filter:"category/movies-by-genres/documentary"},{title:"Drama",filter:"category/movies-by-genres/drama"},{title:"Family",filter:"category/movies-by-genres/family"},{title:"Fantasy",filter:"category/movies-by-genres/fantasy"},{title:"History",filter:"category/movies-by-genres/history"},{title:"Horror",filter:"category/movies-by-genres/horror"},{title:"Music",filter:"category/movies-by-genres/music"},{title:"Mystery",filter:"category/movies-by-genres/mystery"},{title:"Romance",filter:"category/movies-by-genres/romance"},{title:"Sci-Fi",filter:"category/movies-by-genres/sci-fi"},{title:"Sport",filter:"category/movies-by-genres/sport"},{title:"Thriller",filter:"category/movies-by-genres/thriller"},{title:"War",filter:"category/movies-by-genres/war"},{title:"Western",filter:"category/movies-by-genres/western"}];exports.catalog=catalog,exports.genres=genres;
|
||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),catalog_exports={};__export(catalog_exports,{catalog:()=>catalog,genres:()=>genres});var catalog=[{title:"New",filter:""},{title:"Netflix",filter:"category/web-series/netflix"},{title:"Amazon Prime",filter:"category/web-series/amazon-prime-video"},{title:"4K Movies",filter:"movies-by-quality/2160p"}],genres=[{title:"Action",filter:"category/movies-by-genres/action"},{title:"Adventure",filter:"category/movies-by-genres/adventure"},{title:"Animation",filter:"category/movies-by-genres/animation"},{title:"Biography",filter:"category/movies-by-genres/biography"},{title:"Comedy",filter:"category/movies-by-genres/comedy"},{title:"Crime",filter:"category/movies-by-genres/crime"},{title:"Documentary",filter:"category/movies-by-genres/documentary"},{title:"Drama",filter:"category/movies-by-genres/drama"},{title:"Family",filter:"category/movies-by-genres/family"},{title:"Fantasy",filter:"category/movies-by-genres/fantasy"},{title:"History",filter:"category/movies-by-genres/history"},{title:"Horror",filter:"category/movies-by-genres/horror"},{title:"Music",filter:"category/movies-by-genres/music"},{title:"Mystery",filter:"category/movies-by-genres/mystery"},{title:"Romance",filter:"category/movies-by-genres/romance"},{title:"Sci-Fi",filter:"category/movies-by-genres/sci-fi"},{title:"Sport",filter:"category/movies-by-genres/sport"},{title:"Thriller",filter:"category/movies-by-genres/thriller"},{title:"War",filter:"category/movies-by-genres/war"},{title:"Western",filter:"category/movies-by-genres/western"}];exports.catalog=catalog,exports.genres=genres;
|
||||
2
dist/vega/meta.js
vendored
2
dist/vega/meta.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/posts.js
vendored
2
dist/vega/posts.js
vendored
File diff suppressed because one or more lines are too long
2
dist/vega/stream.js
vendored
2
dist/vega/stream.js
vendored
File diff suppressed because one or more lines are too long
2
dist/zeefliz/posts.js
vendored
2
dist/zeefliz/posts.js
vendored
@@ -1 +1 @@
|
||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var defaultHeaders={Referer:"https://www.google.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en-US,en;q=0.9",Pragma:"no-cache","Cache-Control":"no-cache"};function getPosts(_0){return __async(this,arguments,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_0){return __async(this,arguments,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=yield providerContext.getBaseUrl("zeefliz");let url;if(query&&query.trim()){const params=new URLSearchParams;params.append("s",query.trim()),page>1&¶ms.append("paged",page.toString()),url=`${baseUrl}/?${params.toString()}`}else url=filter?filter.startsWith("/")?`${baseUrl}${filter.replace(/\/$/,"")}${page>1?`/page/${page}`:""}`:`${baseUrl}/${filter}${page>1?`/page/${page}`:""}`:`${baseUrl}${page>1?`/page/${page}`:""}`;const{axios:axios,cheerio:cheerio}=providerContext,res=yield axios.get(url,{headers:defaultHeaders,signal:signal}),$=cheerio.load(res.data||""),resolveUrl=__name(href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,baseUrl).href,"resolveUrl"),seen=new Set,catalog=[];return $("section.site-main article.post").each((_,el)=>{var _a;const card=$(el);let link=card.find("a[href]").first().attr("href")||"";if(!link)return;if(link=resolveUrl(link),seen.has(link))return;let title=card.find("h3.entry-title a").text().trim()||card.find("a[rel='bookmark']").text().trim()||(null==(_a=card.find("a[title]").attr("title"))?void 0:_a.trim())||"";if(title=title.replace(/^Download\s*/i,"").trim(),!title)return;let img=card.find("img").attr("bv-data-src")||card.find("img").attr("src")||card.find("img").attr("data-src")||card.find("img").attr("data-original")||"";const image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
||||
"use strict";var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames=Object.getOwnPropertyNames,__hasOwnProp=Object.prototype.hasOwnProperty,__name=(target,value)=>__defProp(target,"name",{value:value,configurable:!0}),__export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&"object"==typeof from||"function"==typeof from)for(let key of __getOwnPropNames(from))__hasOwnProp.call(to,key)||key===except||__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to},__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod),__async=(__this,__arguments,generator)=>new Promise((resolve,reject)=>{var fulfilled=value=>{try{step(generator.next(value))}catch(e){reject(e)}},rejected=value=>{try{step(generator.throw(value))}catch(e){reject(e)}},step=x=>x.done?resolve(x.value):Promise.resolve(x.value).then(fulfilled,rejected);step((generator=generator.apply(__this,__arguments)).next())}),posts_exports={};__export(posts_exports,{getPosts:()=>getPosts,getSearchPosts:()=>getSearchPosts});var defaultHeaders={Referer:"https://www.google.com","User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language":"en-US,en;q=0.9",Pragma:"no-cache","Cache-Control":"no-cache"};function getPosts(_0){return __async(this,arguments,function*({filter:filter,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:filter,page:page,query:"",signal:signal,providerContext:providerContext})})}function getSearchPosts(_0){return __async(this,arguments,function*({searchQuery:searchQuery,page:page=1,signal:signal,providerContext:providerContext}){return fetchPosts({filter:"",page:page,query:searchQuery,signal:signal,providerContext:providerContext})})}function fetchPosts(_0){return __async(this,arguments,function*({filter:filter,query:query,page:page=1,signal:signal,providerContext:providerContext}){try{const baseUrl=yield providerContext.getBaseUrl("zeefliz");let url;if(query&&query.trim()){const params=new URLSearchParams;params.append("s",query.trim()),page>1&¶ms.append("paged",page.toString()),url=`${baseUrl}/?${params.toString()}`}else url=filter?filter.startsWith("/")?`${baseUrl}${filter.replace(/\/$/,"")}${page>1?`/page/${page}`:""}`:`${baseUrl}/${filter}${page>1?`/page/${page}`:""}`:`${baseUrl}${page>1?`/page/${page}`:""}`;const{axios:axios,cheerio:cheerio}=providerContext,res=yield axios.get(url,{headers:defaultHeaders,signal:signal}),$=cheerio.load(res.data||""),resolveUrl=__name(href=>(null==href?void 0:href.startsWith("http"))?href:new URL(href,baseUrl).href,"resolveUrl"),seen=new Set,catalog=[];return $("section.site-main article.post").each((_,el)=>{var _a;const card=$(el);let link=card.find("a[href]").first().attr("href")||"";if(!link)return;if(link=resolveUrl(link),seen.has(link))return;let title=card.find("h3.entry-title a").text().trim()||card.find("a[rel='bookmark']").text().trim()||(null==(_a=card.find("a[title]").attr("title"))?void 0:_a.trim())||"";if(title=title.replace(/^Download\s*/i,"").trim(),!title)return;let img=card.find("img").attr("data-src")||card.find("img").attr("bv-data-src")||card.find("img").attr("src")||card.find("img").attr("data-original")||"";const image=img?resolveUrl(img):"";seen.add(link),catalog.push({title:title,link:link,image:image})}),catalog.slice(0,100)}catch(err){return console.error("fetchPosts error:",err instanceof Error?err.message:String(err)),[]}})}__name(getPosts,"getPosts"),__name(getSearchPosts,"getSearchPosts"),__name(fetchPosts,"fetchPosts"),exports.getPosts=getPosts,exports.getSearchPosts=getSearchPosts;
|
||||
2
dist/zeefliz/stream.js
vendored
2
dist/zeefliz/stream.js
vendored
File diff suppressed because one or more lines are too long
@@ -2,7 +2,7 @@
|
||||
{
|
||||
"display_name": "VegaMovies",
|
||||
"value": "vega",
|
||||
"version": "1.16",
|
||||
"version": "2.3",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -18,7 +18,7 @@
|
||||
{
|
||||
"display_name": "MoviesDrive",
|
||||
"value": "drive",
|
||||
"version": "1.7",
|
||||
"version": "1.8",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -34,7 +34,7 @@
|
||||
{
|
||||
"display_name": "4khdHub",
|
||||
"value": "4khdhub",
|
||||
"version": "1.9",
|
||||
"version": "2.0",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -42,7 +42,7 @@
|
||||
{
|
||||
"display_name": "Cinewood",
|
||||
"value": "1cinevood",
|
||||
"version": "1.2",
|
||||
"version": "1.3",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -58,7 +58,7 @@
|
||||
{
|
||||
"display_name": "KatMoviesHd",
|
||||
"value": "katmovies",
|
||||
"version": "1.4",
|
||||
"version": "1.5",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -90,7 +90,7 @@
|
||||
{
|
||||
"display_name": "CinemaLuxe",
|
||||
"value": "cinemaLuxe",
|
||||
"version": "1.5",
|
||||
"version": "1.6",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": true
|
||||
@@ -114,7 +114,7 @@
|
||||
{
|
||||
"display_name": "Movies4U",
|
||||
"value": "movies4u",
|
||||
"version": "1.2",
|
||||
"version": "1.3",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -130,7 +130,7 @@
|
||||
{
|
||||
"display_name": "Zeefliz",
|
||||
"value": "zeefliz",
|
||||
"version": "1.2",
|
||||
"version": "1.4",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -138,7 +138,7 @@
|
||||
{
|
||||
"display_name": "KatMovieFix",
|
||||
"value": "katMovieFix",
|
||||
"version": "1.4",
|
||||
"version": "1.5",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": true
|
||||
@@ -170,7 +170,7 @@
|
||||
{
|
||||
"display_name": "HdHub4u",
|
||||
"value": "hdhub4u",
|
||||
"version": "1.4",
|
||||
"version": "1.6",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": false
|
||||
@@ -290,7 +290,7 @@
|
||||
{
|
||||
"display_name": "RogMovies",
|
||||
"value": "luxMovies",
|
||||
"version": "1.9",
|
||||
"version": "2.1",
|
||||
"icon": "",
|
||||
"type": "india",
|
||||
"disabled": false
|
||||
@@ -314,7 +314,7 @@
|
||||
{
|
||||
"display_name": "SkyMovieHD",
|
||||
"value": "skyMovieHD",
|
||||
"version": "1.4",
|
||||
"version": "1.5",
|
||||
"icon": "",
|
||||
"type": "global",
|
||||
"disabled": true
|
||||
@@ -322,7 +322,7 @@
|
||||
{
|
||||
"display_name": "Joya9tv",
|
||||
"value": "Joya9tv",
|
||||
"version": "1.3",
|
||||
"version": "1.4",
|
||||
"icon": "",
|
||||
"type": "india",
|
||||
"disabled": false
|
||||
|
||||
@@ -51,7 +51,7 @@ export async function hubcloudExtractor(
|
||||
if (!link?.includes("api")) {
|
||||
const token = link.split("/").pop();
|
||||
const baseUrl = link.split("/").slice(0, -2).join("/");
|
||||
link = `${baseUrl}/api/file/${token}?download`;
|
||||
link = `${baseUrl}/api/file/${token}`;
|
||||
}
|
||||
streamLinks.push({ server: "Pixeldrain", link: link, type: "mkv" });
|
||||
break;
|
||||
|
||||
@@ -40,7 +40,7 @@ export async function getStream({
|
||||
const hubdriveText = hubdriveRes.data;
|
||||
const $$ = cheerio.load(hubdriveText);
|
||||
hubdriveLink =
|
||||
$$(".btn.btn-primary.btn-user").attr("href") || hubdriveLink;
|
||||
$$(".btn.btn-primary.btn-user.btn-success1").attr("href") || "";
|
||||
}
|
||||
console.log("hubdriveLink2", hubdriveLink);
|
||||
}
|
||||
|
||||
@@ -40,42 +40,103 @@ export const getMeta = async ({
|
||||
},
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
const infoContainer = $(".entry-content,.post-inner");
|
||||
const heading = infoContainer?.find("h3");
|
||||
const imdbId =
|
||||
//@ts-ignore
|
||||
heading?.next("p")?.find("a")?.[0]?.attribs?.href?.match(/tt\d+/g)?.[0] ||
|
||||
infoContainer.text().match(/tt\d+/g)?.[0] ||
|
||||
"";
|
||||
// console.log(imdbId)
|
||||
const infoContainer = $(
|
||||
".entry-content, .post-inner, .post-content, .page-body",
|
||||
);
|
||||
|
||||
const type = heading?.next("p")?.text()?.includes("Series Name")
|
||||
? "series"
|
||||
: "movie";
|
||||
// console.log(type);
|
||||
// title
|
||||
const titleRegex = /Name: (.+)/;
|
||||
const title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||
let title = $("h1.post-title").text().trim();
|
||||
if (!title) {
|
||||
const heading = infoContainer?.find("h3");
|
||||
const titleRegex = /Name: (.+)/;
|
||||
title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||
}
|
||||
// console.log(title);
|
||||
|
||||
// imdbId
|
||||
let imdbId =
|
||||
$('a[href*="imdb.com"]').attr("href")?.match(/tt\d+/)?.[0] || "";
|
||||
if (!imdbId) {
|
||||
const heading = infoContainer?.find("h3");
|
||||
imdbId =
|
||||
//@ts-ignore
|
||||
heading
|
||||
?.next("p")
|
||||
?.find("a")?.[0]
|
||||
?.attribs?.href?.match(/tt\d+/g)?.[0] ||
|
||||
infoContainer.text().match(/tt\d+/g)?.[0] ||
|
||||
"";
|
||||
}
|
||||
// console.log(imdbId)
|
||||
|
||||
// type
|
||||
let type = "movie";
|
||||
|
||||
const heading = infoContainer?.find("h3");
|
||||
if (heading?.next("p")?.text()?.includes("Series Name")) {
|
||||
type = "series";
|
||||
}
|
||||
|
||||
// console.log(type);
|
||||
|
||||
// synopsis
|
||||
const synopsisNode = //@ts-ignore
|
||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||
const synopsis =
|
||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||
let synopsis = "";
|
||||
const synopsisHeader = $("h3").filter(
|
||||
(i, el) =>
|
||||
$(el).text().includes("SYNOPSIS/PLOT") || $(el).text().includes("Plot"),
|
||||
);
|
||||
if (synopsisHeader.length > 0) {
|
||||
synopsis = synopsisHeader.next("p").text().trim();
|
||||
}
|
||||
if (!synopsis) {
|
||||
const synopsisNode = //@ts-ignore
|
||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||
synopsis =
|
||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||
}
|
||||
// console.log(synopsis);
|
||||
|
||||
// image
|
||||
let image =
|
||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || "";
|
||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") ||
|
||||
infoContainer
|
||||
?.find("img")
|
||||
?.filter((i, el) => {
|
||||
const src = $(el).attr("src");
|
||||
return (
|
||||
!!src &&
|
||||
!src.includes("logo") &&
|
||||
!src.includes("svg") &&
|
||||
!src.includes("placeholder") &&
|
||||
!src.includes("icon")
|
||||
);
|
||||
})
|
||||
?.first()
|
||||
?.attr("src") ||
|
||||
"";
|
||||
|
||||
if (image.startsWith("//")) {
|
||||
image = "https:" + image;
|
||||
}
|
||||
// console.log(image);
|
||||
|
||||
// console.log({title, synopsis, image, imdbId, type});
|
||||
console.log({ title, synopsis, image, imdbId, type });
|
||||
/// Links
|
||||
const hr = infoContainer?.first()?.find("hr");
|
||||
let hr = infoContainer?.first()?.find("hr");
|
||||
|
||||
// Try to find the HR before the download buttons if possible
|
||||
const firstButton = $(".dwd-button").first();
|
||||
if (firstButton.length > 0) {
|
||||
const containerP = firstButton.closest("p");
|
||||
let prev = containerP.prev();
|
||||
while (prev.length && !prev.is("hr")) {
|
||||
prev = prev.prev();
|
||||
}
|
||||
if (prev.is("hr")) {
|
||||
hr = prev;
|
||||
}
|
||||
}
|
||||
|
||||
const list = hr?.nextUntil("hr");
|
||||
const links: Link[] = [];
|
||||
list.each((index, element: any) => {
|
||||
@@ -86,39 +147,41 @@ export const getMeta = async ({
|
||||
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
||||
// console.log(title);
|
||||
// movieLinks
|
||||
const movieLinks = element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("download")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "";
|
||||
const movieLinks =
|
||||
element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("download") ||
|
||||
element.next().find("a").text().toLowerCase().includes("download")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href") ||
|
||||
element?.next().find("a[href]")?.attr("href")
|
||||
: "";
|
||||
|
||||
// episode links
|
||||
const vcloudLinks = element
|
||||
?.next()
|
||||
.find(
|
||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;']"
|
||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']",
|
||||
)
|
||||
?.parent()
|
||||
?.attr("href");
|
||||
console.log(title);
|
||||
const episodesLink =
|
||||
(vcloudLinks
|
||||
? vcloudLinks
|
||||
: element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("episode")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "") ||
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("episode")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "") ||
|
||||
element
|
||||
?.next()
|
||||
.find(
|
||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']"
|
||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']",
|
||||
)
|
||||
?.parent()
|
||||
?.attr("href");
|
||||
|
||||
@@ -34,13 +34,13 @@ export const getPosts = async ({
|
||||
signal: AbortSignal;
|
||||
providerContext: ProviderContext;
|
||||
}): Promise<Post[]> => {
|
||||
const { getBaseUrl } = providerContext;
|
||||
const baseUrl = await getBaseUrl("lux");
|
||||
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||
const baseUrl = await getBaseUrl("Vega");
|
||||
|
||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||
const url = `${baseUrl}/${filter}/page/${page}/`;
|
||||
console.log("lux url:", url);
|
||||
return posts(url, signal, providerContext);
|
||||
console.log("vegaGetPosts url:", url);
|
||||
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
||||
};
|
||||
|
||||
export const getSearchPosts = async ({
|
||||
@@ -56,58 +56,96 @@ export const getSearchPosts = async ({
|
||||
signal: AbortSignal;
|
||||
providerContext: ProviderContext;
|
||||
}): Promise<Post[]> => {
|
||||
const { getBaseUrl } = providerContext;
|
||||
const baseUrl = await getBaseUrl("lux");
|
||||
const { getBaseUrl, axios, cheerio } = providerContext;
|
||||
const baseUrl = await getBaseUrl("Vega");
|
||||
|
||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||
const url =
|
||||
page === 1
|
||||
? `https://c.8man.workers.dev/?url=${baseUrl}/?s=${searchQuery}`
|
||||
: `https://c.8man.workers.dev/?url=${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||
console.log("lux url:", url);
|
||||
const url = `${baseUrl}/search.php?q=${searchQuery}&page=${page}`;
|
||||
console.log("vegaGetPosts url:", url);
|
||||
|
||||
return posts(url, signal, providerContext);
|
||||
try {
|
||||
const response = await axios.get(url, {
|
||||
headers: {
|
||||
...headers,
|
||||
Referer: baseUrl,
|
||||
},
|
||||
signal,
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const posts: Post[] = [];
|
||||
|
||||
if (data?.hits) {
|
||||
data.hits.forEach((hit: any) => {
|
||||
const doc = hit.document;
|
||||
const post = {
|
||||
title: doc.post_title.replace("Download", "").trim(),
|
||||
link: doc.permalink.startsWith("http")
|
||||
? doc.permalink
|
||||
: `${baseUrl}${doc.permalink}`,
|
||||
image: doc.post_thumbnail,
|
||||
};
|
||||
posts.push(post);
|
||||
});
|
||||
}
|
||||
return posts;
|
||||
} catch (error) {
|
||||
console.error("vegaGetSearchPosts error:", error);
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
async function posts(
|
||||
baseUrl: string,
|
||||
url: string,
|
||||
signal: AbortSignal,
|
||||
providerContext: ProviderContext
|
||||
headers: Record<string, string> = {},
|
||||
axios: ProviderContext["axios"],
|
||||
cheerio: ProviderContext["cheerio"],
|
||||
): Promise<Post[]> {
|
||||
try {
|
||||
const { axios, cheerio } = providerContext;
|
||||
const urlRes = await fetch(url, {
|
||||
headers: {
|
||||
...headers,
|
||||
Referer: url,
|
||||
Referer: baseUrl,
|
||||
},
|
||||
signal,
|
||||
});
|
||||
const $ = cheerio.load(await urlRes.text());
|
||||
const posts: Post[] = [];
|
||||
$(".blog-items")
|
||||
?.children("article")
|
||||
$(".blog-items,.post-list,#archive-container,.movies-grid")
|
||||
?.children("article,.entry-list-item,a")
|
||||
?.each((index, element) => {
|
||||
const post = {
|
||||
title:
|
||||
title: (
|
||||
$(element)
|
||||
?.find("a")
|
||||
?.attr("title")
|
||||
?.find(".entry-title,.poster-title")
|
||||
?.text()
|
||||
?.replace("Download", "")
|
||||
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
||||
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
||||
"",
|
||||
$(element)
|
||||
?.find(".post-title,.poster-title")
|
||||
.text()
|
||||
?.replace("Download", "") ||
|
||||
""
|
||||
).trim(),
|
||||
|
||||
link: $(element)?.find("a")?.attr("href") || "",
|
||||
link:
|
||||
$(element)?.find("a")?.attr("href") ||
|
||||
$(element)?.attr("href") ||
|
||||
"",
|
||||
image:
|
||||
$(element).find("a").find("img").attr("data-lazy-src") ||
|
||||
$(element).find("a").find("img").attr("data-src") ||
|
||||
$(element).find("a").find("img").attr("src") ||
|
||||
$(element).find("img").attr("src") ||
|
||||
"",
|
||||
};
|
||||
if (post.image.startsWith("//")) {
|
||||
post.image = "https:" + post.image;
|
||||
}
|
||||
console.log("vegaGetPosts post:", post);
|
||||
posts.push(post);
|
||||
});
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@ export const catalog = [
|
||||
},
|
||||
{
|
||||
title: "Netflix",
|
||||
filter: "web-series/netflix",
|
||||
filter: "category/web-series/netflix",
|
||||
},
|
||||
{
|
||||
title: "Amazon Prime",
|
||||
filter: "web-series/amazon-prime-video",
|
||||
filter: "category/web-series/amazon-prime-video",
|
||||
},
|
||||
{
|
||||
title: "4K Movies",
|
||||
|
||||
@@ -40,34 +40,81 @@ export const getMeta = async ({
|
||||
},
|
||||
});
|
||||
const $ = cheerio.load(response.data);
|
||||
const infoContainer = $(".entry-content,.post-inner");
|
||||
const heading = infoContainer?.find("h3");
|
||||
const imdbId =
|
||||
//@ts-ignore
|
||||
heading?.next("p")?.find("a")?.[0]?.attribs?.href?.match(/tt\d+/g)?.[0] ||
|
||||
infoContainer.text().match(/tt\d+/g)?.[0] ||
|
||||
"";
|
||||
// console.log(imdbId)
|
||||
const infoContainer = $(
|
||||
".entry-content, .post-inner, .post-content, .page-body",
|
||||
);
|
||||
|
||||
const type = heading?.next("p")?.text()?.includes("Series Name")
|
||||
? "series"
|
||||
: "movie";
|
||||
// console.log(type);
|
||||
// title
|
||||
const titleRegex = /Name: (.+)/;
|
||||
const title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||
let title = $("h1.post-title").text().trim();
|
||||
if (!title) {
|
||||
const heading = infoContainer?.find("h3");
|
||||
const titleRegex = /Name: (.+)/;
|
||||
title = heading?.next("p")?.text()?.match(titleRegex)?.[1] || "";
|
||||
}
|
||||
// console.log(title);
|
||||
|
||||
// imdbId
|
||||
let imdbId =
|
||||
$('a[href*="imdb.com"]').attr("href")?.match(/tt\d+/)?.[0] || "";
|
||||
if (!imdbId) {
|
||||
const heading = infoContainer?.find("h3");
|
||||
imdbId =
|
||||
//@ts-ignore
|
||||
heading
|
||||
?.next("p")
|
||||
?.find("a")?.[0]
|
||||
?.attribs?.href?.match(/tt\d+/g)?.[0] ||
|
||||
infoContainer.text().match(/tt\d+/g)?.[0] ||
|
||||
"";
|
||||
}
|
||||
// console.log(imdbId)
|
||||
|
||||
// type
|
||||
let type = "movie";
|
||||
|
||||
const heading = infoContainer?.find("h3");
|
||||
if (heading?.next("p")?.text()?.includes("Series Name")) {
|
||||
type = "series";
|
||||
}
|
||||
|
||||
// console.log(type);
|
||||
|
||||
// synopsis
|
||||
const synopsisNode = //@ts-ignore
|
||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||
const synopsis =
|
||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||
let synopsis = "";
|
||||
const synopsisHeader = $("h3").filter(
|
||||
(i, el) =>
|
||||
$(el).text().includes("SYNOPSIS/PLOT") || $(el).text().includes("Plot"),
|
||||
);
|
||||
if (synopsisHeader.length > 0) {
|
||||
synopsis = synopsisHeader.next("p").text().trim();
|
||||
}
|
||||
if (!synopsis) {
|
||||
const synopsisNode = //@ts-ignore
|
||||
infoContainer?.find("p")?.next("h3,h4")?.next("p")?.[0]?.children?.[0];
|
||||
synopsis =
|
||||
synopsisNode && "data" in synopsisNode ? synopsisNode.data : "";
|
||||
}
|
||||
// console.log(synopsis);
|
||||
|
||||
// image
|
||||
let image =
|
||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") || "";
|
||||
infoContainer?.find("img[data-lazy-src]")?.attr("data-lazy-src") ||
|
||||
infoContainer
|
||||
?.find("img")
|
||||
?.filter((i, el) => {
|
||||
const src = $(el).attr("src");
|
||||
return (
|
||||
!!src &&
|
||||
!src.includes("logo") &&
|
||||
!src.includes("svg") &&
|
||||
!src.includes("placeholder") &&
|
||||
!src.includes("icon")
|
||||
);
|
||||
})
|
||||
?.first()
|
||||
?.attr("src") ||
|
||||
"";
|
||||
|
||||
if (image.startsWith("//")) {
|
||||
image = "https:" + image;
|
||||
}
|
||||
@@ -75,7 +122,21 @@ export const getMeta = async ({
|
||||
|
||||
console.log({ title, synopsis, image, imdbId, type });
|
||||
/// Links
|
||||
const hr = infoContainer?.first()?.find("hr");
|
||||
let hr = infoContainer?.first()?.find("hr");
|
||||
|
||||
// Try to find the HR before the download buttons if possible
|
||||
const firstButton = $(".dwd-button").first();
|
||||
if (firstButton.length > 0) {
|
||||
const containerP = firstButton.closest("p");
|
||||
let prev = containerP.prev();
|
||||
while (prev.length && !prev.is("hr")) {
|
||||
prev = prev.prev();
|
||||
}
|
||||
if (prev.is("hr")) {
|
||||
hr = prev;
|
||||
}
|
||||
}
|
||||
|
||||
const list = hr?.nextUntil("hr");
|
||||
const links: Link[] = [];
|
||||
list.each((index, element: any) => {
|
||||
@@ -86,20 +147,23 @@ export const getMeta = async ({
|
||||
const quality = element?.text().match(/\d+p\b/)?.[0] || "";
|
||||
// console.log(title);
|
||||
// movieLinks
|
||||
const movieLinks = element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("download")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "";
|
||||
const movieLinks =
|
||||
element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("download") ||
|
||||
element.next().find("a").text().toLowerCase().includes("download")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href") ||
|
||||
element?.next().find("a[href]")?.attr("href")
|
||||
: "";
|
||||
|
||||
// episode links
|
||||
const vcloudLinks = element
|
||||
?.next()
|
||||
.find(
|
||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']"
|
||||
".btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: white;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152); color: #fdf8f2;'],.btn-outline[style='background:linear-gradient(135deg,#ed0b0b,#f2d152);color: white']",
|
||||
)
|
||||
?.parent()
|
||||
?.attr("href");
|
||||
@@ -107,17 +171,17 @@ export const getMeta = async ({
|
||||
(vcloudLinks
|
||||
? vcloudLinks
|
||||
: element
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("episode")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "") ||
|
||||
?.next()
|
||||
.find(".dwd-button")
|
||||
.text()
|
||||
.toLowerCase()
|
||||
.includes("episode")
|
||||
? element?.next().find(".dwd-button")?.parent()?.attr("href")
|
||||
: "") ||
|
||||
element
|
||||
?.next()
|
||||
.find(
|
||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']"
|
||||
".btn-outline[style='background:linear-gradient(135deg,#0ebac3,#09d261); color: white;']",
|
||||
)
|
||||
?.parent()
|
||||
?.attr("href");
|
||||
|
||||
@@ -60,10 +60,39 @@ export const getSearchPosts = async ({
|
||||
const baseUrl = await getBaseUrl("Vega");
|
||||
|
||||
console.log("vegaGetPosts baseUrl:", providerValue, baseUrl);
|
||||
const url = `${baseUrl}/page/${page}/?s=${searchQuery}`;
|
||||
const url = `${baseUrl}/search.php?q=${searchQuery}&page=${page}`;
|
||||
console.log("vegaGetPosts url:", url);
|
||||
|
||||
return posts(baseUrl, url, signal, headers, axios, cheerio);
|
||||
try {
|
||||
const response = await axios.get(url, {
|
||||
headers: {
|
||||
...headers,
|
||||
Referer: baseUrl,
|
||||
},
|
||||
signal,
|
||||
});
|
||||
|
||||
const data = response.data;
|
||||
const posts: Post[] = [];
|
||||
|
||||
if (data?.hits) {
|
||||
data.hits.forEach((hit: any) => {
|
||||
const doc = hit.document;
|
||||
const post = {
|
||||
title: doc.post_title.replace("Download", "").trim(),
|
||||
link: doc.permalink.startsWith("http")
|
||||
? doc.permalink
|
||||
: `${baseUrl}${doc.permalink}`,
|
||||
image: doc.post_thumbnail,
|
||||
};
|
||||
posts.push(post);
|
||||
});
|
||||
}
|
||||
return posts;
|
||||
} catch (error) {
|
||||
console.error("vegaGetSearchPosts error:", error);
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
async function posts(
|
||||
@@ -72,7 +101,7 @@ async function posts(
|
||||
signal: AbortSignal,
|
||||
headers: Record<string, string> = {},
|
||||
axios: ProviderContext["axios"],
|
||||
cheerio: ProviderContext["cheerio"]
|
||||
cheerio: ProviderContext["cheerio"],
|
||||
): Promise<Post[]> {
|
||||
try {
|
||||
const urlRes = await fetch(url, {
|
||||
@@ -84,31 +113,39 @@ async function posts(
|
||||
});
|
||||
const $ = cheerio.load(await urlRes.text());
|
||||
const posts: Post[] = [];
|
||||
$(".blog-items,.post-list,#archive-container")
|
||||
?.children("article,.entry-list-item")
|
||||
$(".blog-items,.post-list,#archive-container,.movies-grid")
|
||||
?.children("article,.entry-list-item,a")
|
||||
?.each((index, element) => {
|
||||
const post = {
|
||||
title: (
|
||||
$(element)
|
||||
?.find(".entry-title")
|
||||
?.find(".entry-title,.poster-title")
|
||||
?.text()
|
||||
?.replace("Download", "")
|
||||
?.match(/^(.*?)\s*\((\d{4})\)|^(.*?)\s*\((Season \d+)\)/)?.[0] ||
|
||||
$(element)?.find("a")?.attr("title")?.replace("Download", "") ||
|
||||
$(element)?.find(".post-title").text()?.replace("Download", "") ||
|
||||
$(element)
|
||||
?.find(".post-title,.poster-title")
|
||||
.text()
|
||||
?.replace("Download", "") ||
|
||||
""
|
||||
).trim(),
|
||||
|
||||
link: $(element)?.find("a")?.attr("href") || "",
|
||||
link:
|
||||
$(element)?.find("a")?.attr("href") ||
|
||||
$(element)?.attr("href") ||
|
||||
"",
|
||||
image:
|
||||
$(element).find("a").find("img").attr("data-lazy-src") ||
|
||||
$(element).find("a").find("img").attr("data-src") ||
|
||||
$(element).find("a").find("img").attr("src") ||
|
||||
$(element).find("img").attr("src") ||
|
||||
"",
|
||||
};
|
||||
if (post.image.startsWith("//")) {
|
||||
post.image = "https:" + post.image;
|
||||
}
|
||||
console.log("vegaGetPosts post:", post);
|
||||
posts.push(post);
|
||||
});
|
||||
|
||||
|
||||
@@ -113,9 +113,9 @@ async function fetchPosts({
|
||||
|
||||
// Image
|
||||
let img =
|
||||
card.find("img").attr("data-src") ||
|
||||
card.find("img").attr("bv-data-src") ||
|
||||
card.find("img").attr("src") ||
|
||||
card.find("img").attr("data-src") ||
|
||||
card.find("img").attr("data-original") ||
|
||||
"";
|
||||
const image = img ? resolveUrl(img) : "";
|
||||
@@ -128,7 +128,7 @@ async function fetchPosts({
|
||||
} catch (err) {
|
||||
console.error(
|
||||
"fetchPosts error:",
|
||||
err instanceof Error ? err.message : String(err)
|
||||
err instanceof Error ? err.message : String(err),
|
||||
);
|
||||
return [];
|
||||
}
|
||||
|
||||
@@ -3,10 +3,6 @@ const cheerio = require("cheerio");
|
||||
const axios = require("axios");
|
||||
const { z } = require("zod");
|
||||
const { getBaseUrl } = require("./dist/getBaseUrl.js");
|
||||
const { hubcloudExtracter } = require("./dist/hubcloudExtractor.js");
|
||||
const { gofileExtracter } = require("./dist/gofileExtracter.js");
|
||||
const { superVideoExtractor } = require("./dist/superVideoExtractor.js");
|
||||
const { gdFlixExtracter } = require("./dist/gdFlixExtractor.js");
|
||||
|
||||
// Create readline interface
|
||||
const rl = readline.createInterface({
|
||||
@@ -32,13 +28,7 @@ const providerContext = {
|
||||
"User-Agent":
|
||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
||||
},
|
||||
extractors: {
|
||||
hubcloudExtracter: hubcloudExtracter,
|
||||
gofileExtracter: gofileExtracter,
|
||||
superVideoExtractor: superVideoExtractor,
|
||||
gdFlixExtracter: gdFlixExtracter,
|
||||
},
|
||||
Crypto: {},
|
||||
Aes: {},
|
||||
};
|
||||
|
||||
// Function parameter definitions based on README and types
|
||||
@@ -159,7 +149,7 @@ async function getParameters(functionName, providerName) {
|
||||
const sampleValue = sampleValues[functionName]?.[paramName] || "";
|
||||
|
||||
let value = await prompt(
|
||||
`${promptText}${sampleValue ? `[sample: ${sampleValue}] ` : ""}`
|
||||
`${promptText}${sampleValue ? `[sample: ${sampleValue}] ` : ""}`,
|
||||
);
|
||||
|
||||
if (!value && sampleValue) {
|
||||
@@ -207,7 +197,7 @@ async function testProvider(providerName, functionName) {
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(
|
||||
`❌ Provider '${providerName}' not found or built. Make sure to run 'npm run build' first.`
|
||||
`❌ Provider '${providerName}' not found or built. Make sure to run 'npm run build' first.`,
|
||||
);
|
||||
console.log(`Error: ${error.message}`);
|
||||
return;
|
||||
@@ -217,7 +207,7 @@ async function testProvider(providerName, functionName) {
|
||||
if (!module[functionName]) {
|
||||
console.log(`❌ Function '${functionName}' not found in ${providerName}`);
|
||||
const availableFunctions = Object.keys(module).filter(
|
||||
(key) => typeof module[key] === "function"
|
||||
(key) => typeof module[key] === "function",
|
||||
);
|
||||
console.log(`Available functions: ${availableFunctions.join(", ")}`);
|
||||
return;
|
||||
@@ -249,7 +239,7 @@ async function testProvider(providerName, functionName) {
|
||||
|
||||
if (!validationResult.isValid) {
|
||||
console.log(
|
||||
"\n💡 Tip: Check your provider implementation to ensure it returns the correct format."
|
||||
"\n💡 Tip: Check your provider implementation to ensure it returns the correct format.",
|
||||
);
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -281,7 +271,7 @@ const StreamSchema = z.object({
|
||||
language: z.string(),
|
||||
type: z.string(),
|
||||
uri: z.string().url(),
|
||||
})
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
headers: z.any().optional(),
|
||||
@@ -297,7 +287,7 @@ const LinkSchema = z.object({
|
||||
title: z.string().min(1, "Direct link title cannot be empty"),
|
||||
link: z.string().url("Direct link must be a valid URL"),
|
||||
type: z.enum(["movie", "series"]).optional(),
|
||||
})
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
});
|
||||
@@ -421,7 +411,7 @@ async function main() {
|
||||
console.log("\nFlags:");
|
||||
console.log(" --rebuild Rebuild TypeScript files before testing");
|
||||
console.log(
|
||||
"\nNote: Run with --rebuild flag if you've made changes to TypeScript files!"
|
||||
"\nNote: Run with --rebuild flag if you've made changes to TypeScript files!",
|
||||
);
|
||||
rl.close();
|
||||
return;
|
||||
@@ -430,16 +420,15 @@ async function main() {
|
||||
if (args.length < 2) {
|
||||
console.log("❌ Please provide both provider name and function name");
|
||||
console.log(
|
||||
"Usage: node test-provider.js <provider> <function> [--rebuild]"
|
||||
"Usage: node test-provider.js <provider> <function> [--rebuild]",
|
||||
);
|
||||
rl.close();
|
||||
return;
|
||||
}
|
||||
|
||||
const providerName = args[0];
|
||||
const functionName = args[1];
|
||||
|
||||
// Validate function name
|
||||
// Validate function name (case-insensitive)
|
||||
const validFunctions = [
|
||||
"getPosts",
|
||||
"getSearchPosts",
|
||||
@@ -447,8 +436,11 @@ async function main() {
|
||||
"getEpisodes",
|
||||
"getStream",
|
||||
];
|
||||
const functionName =
|
||||
validFunctions.find((f) => f.toLowerCase() === args[1].toLowerCase()) ??
|
||||
args[1];
|
||||
if (!validFunctions.includes(functionName)) {
|
||||
console.log(`❌ Invalid function name: ${functionName}`);
|
||||
console.log(`❌ Invalid function name: ${args[1]}`);
|
||||
console.log(`Valid functions: ${validFunctions.join(", ")}`);
|
||||
rl.close();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user