with plot + synopsis = $("p:contains('plot')").text().trim(); + } + // 4. Download links (multiple qualities) + const links = []; + $('a[href*="download.php?file="], a[href*="dwload.php?file="]').each((i, el) => { + var _a; + const downloadPage = ((_a = $(el).attr("href")) === null || _a === void 0 ? void 0 : _a.replace("dwload.php", "download.php")) || ""; + const text = $(el).text().trim(); + if (downloadPage && /\d+p/i.test(text)) { + // Only add links with quality in text + links.push({ + title: text, + directLinks: [{ title: "Movie", link: baseUrl + downloadPage }], + }); + } + }); + $("img[src*='/images/play.png']").each((i, el) => { + const downloadPage = $(el).siblings("a").attr("href"); + const text = $(el).siblings("a").text().trim(); + console.log("Found link:🔥🔥", text, downloadPage); + if (downloadPage && text) { + links.push({ + title: text, + episodesLink: baseUrl + downloadPage, + }); + } + }); + return { + title, + synopsis, + image, + imdbId, + tags, + type, + linkList: links, + //info: infoRows.join("\n"), + }; + } + catch (err) { + console.error(err); + return { + title: "", + synopsis: "", + image: "", + imdbId: "", + type: "movie", + linkList: [], + }; + } + }); +}; +exports.getMeta = getMeta; diff --git a/dist/moviezwap/posts.js b/dist/moviezwap/posts.js index 791a6ad..b696579 100644 --- a/dist/moviezwap/posts.js +++ b/dist/moviezwap/posts.js @@ -1 +1,57 @@ -"use strict";var __awaiter=this&&this.__awaiter||function(t,e,r,o){return new(r||(r=Promise))(function(n,i){function s(t){try{c(o.next(t))}catch(t){i(t)}}function a(t){try{c(o.throw(t))}catch(t){i(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r(function(t){t(e)})).then(s,a)}c((o=o.apply(t,e||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSearchPosts=exports.getPosts=void 0;const getPosts=function(t){return __awaiter(this,arguments,void 0,function*({filter:t,page:e,signal:r,providerContext:o}){const{getBaseUrl:n,cheerio:i}=o;return posts({url:`${yield n("moviezwap")}${t}`,signal:r,cheerio:i})})};exports.getPosts=getPosts;const getSearchPosts=function(t){return __awaiter(this,arguments,void 0,function*({searchQuery:t,page:e,signal:r,providerContext:o}){const{getBaseUrl:n,cheerio:i}=o;return posts({url:`${yield n("moviezwap")}/search.php?q=${encodeURIComponent(t)}`,signal:r,cheerio:i})})};function posts(t){return __awaiter(this,arguments,void 0,function*({url:t,signal:e,cheerio:r}){try{const o=yield fetch(t,{signal:e}),n=yield o.text(),i=r.load(n),s=[];return i('a[href^="/movie/"]').each((t,e)=>{const r=i(e).text().trim(),o=i(e).attr("href");r&&o&&s.push({title:r,link:o,image:""})}),s}catch(t){return[]}})}exports.getSearchPosts=getSearchPosts; \ No newline at end of file +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getSearchPosts = exports.getPosts = void 0; +const getPosts = function (_a) { + return __awaiter(this, arguments, void 0, function* ({ filter, page, signal, providerContext, }) { + const { getBaseUrl, cheerio } = providerContext; + const baseUrl = yield getBaseUrl("moviezwap"); + const url = `${baseUrl}${filter}`; + return posts({ url, signal, cheerio }); + }); +}; +exports.getPosts = getPosts; +const getSearchPosts = function (_a) { + return __awaiter(this, arguments, void 0, function* ({ searchQuery, page, signal, providerContext, }) { + const { getBaseUrl, cheerio } = providerContext; + const baseUrl = yield getBaseUrl("moviezwap"); + const url = `${baseUrl}/search.php?q=${encodeURIComponent(searchQuery)}`; + return posts({ url, signal, cheerio }); + }); +}; +exports.getSearchPosts = getSearchPosts; +function posts(_a) { + return __awaiter(this, arguments, void 0, function* ({ url, signal, cheerio, }) { + try { + const res = yield fetch(url, { signal }); + const data = yield res.text(); + const $ = cheerio.load(data); + const catalog = []; + $('a[href^="/movie/"]').each((i, el) => { + const title = $(el).text().trim(); + const link = $(el).attr("href"); + const image = ""; + if (title && link) { + catalog.push({ + title: title, + link: link, + image: image, + }); + } + }); + return catalog; + } + catch (err) { + console.error("moviezwapGetPosts error ", err); + return []; + } + }); +} diff --git a/dist/moviezwap/stream.js b/dist/moviezwap/stream.js index 4b283e2..a71a814 100644 --- a/dist/moviezwap/stream.js +++ b/dist/moviezwap/stream.js @@ -1 +1,35 @@ -"use strict";var __awaiter=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))(function(r,o){function i(e){try{c(a.next(e))}catch(e){o(e)}}function s(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,s)}c((a=a.apply(e,t||[])).next())})};function getStream(e){return __awaiter(this,arguments,void 0,function*({link:e,signal:t,providerContext:n}){const{axios:a,cheerio:r,commonHeaders:o}=n,i=(yield a.get(e,{headers:o,signal:t})).data,s=r.load(i),c=[];return s('a:contains("Fast Download Server")').each((e,t)=>{const n=s(t).attr("href");n&&n.toLocaleLowerCase().includes(".mp4")&&c.push({link:n,type:"mp4",server:"Fast Download",headers:o})}),c})}Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=getStream; \ No newline at end of file +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getStream = getStream; +function getStream(_a) { + return __awaiter(this, arguments, void 0, function* ({ link, signal, providerContext, }) { + const { axios, cheerio, commonHeaders: headers } = providerContext; + const res = yield axios.get(link, { headers, signal }); + const html = res.data; + const $ = cheerio.load(html); + const Streams = []; + // Find the actual .mp4 download link + let downloadLink = null; + $('a:contains("Fast Download Server")').each((i, el) => { + const href = $(el).attr("href"); + if (href && href.toLocaleLowerCase().includes(".mp4")) { + Streams.push({ + link: href, + type: "mp4", + server: "Fast Download", + headers: headers, + }); + } + }); + return Streams; + }); +} diff --git a/dist/multi/catalog.js b/dist/multi/catalog.js index 7d7016c..c8a00cd 100644 --- a/dist/multi/catalog.js +++ b/dist/multi/catalog.js @@ -1 +1,79 @@ -"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.genres=exports.catalog=void 0,exports.catalog=[{title:"Trending",filter:"/trending/"},{title:"Netflix",filter:"/genre/netflix/"},{title:"Amazon Prime",filter:"/genre/amazon-prime/"},{title:"Disney Hotstar",filter:"/genre/disney-hotstar/"}],exports.genres=[{title:"Action",filter:"/genre/action/"},{title:"Adventure",filter:"/genre/adventure/"},{title:"Animation",filter:"/genre/animation/"},{title:"Comedy",filter:"/genre/comedy/"},{title:"Crime",filter:"/genre/crime/"},{title:"Drama",filter:"/genre/drama/"},{title:"Family",filter:"/genre/family/"},{title:"Fantasy",filter:"/genre/fantasy/"},{title:"History",filter:"/genre/history/"},{title:"Horror",filter:"/genre/horror/"},{title:"Mystery",filter:"/genre/mystery/"},{title:"Romance",filter:"/genre/romance/"},{title:"Science Fiction",filter:"/genre/science-fiction/"},{title:"Thriller",filter:"/genre/thriller/"}]; \ No newline at end of file +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.genres = exports.catalog = void 0; +exports.catalog = [ + { + title: "Trending", + filter: "/trending/", + }, + { + title: "Netflix", + filter: "/genre/netflix/", + }, + { + title: "Amazon Prime", + filter: "/genre/amazon-prime/", + }, + { + title: "Disney Hotstar", + filter: "/genre/disney-hotstar/", + }, +]; +exports.genres = [ + { + title: "Action", + filter: "/genre/action/", + }, + { + title: "Adventure", + filter: "/genre/adventure/", + }, + { + title: "Animation", + filter: "/genre/animation/", + }, + { + title: "Comedy", + filter: "/genre/comedy/", + }, + { + title: "Crime", + filter: "/genre/crime/", + }, + { + title: "Drama", + filter: "/genre/drama/", + }, + { + title: "Family", + filter: "/genre/family/", + }, + { + title: "Fantasy", + filter: "/genre/fantasy/", + }, + { + title: "History", + filter: "/genre/history/", + }, + { + title: "Horror", + filter: "/genre/horror/", + }, + { + title: "Mystery", + filter: "/genre/mystery/", + }, + { + title: "Romance", + filter: "/genre/romance/", + }, + { + title: "Science Fiction", + filter: "/genre/science-fiction/", + }, + { + title: "Thriller", + filter: "/genre/thriller/", + }, +]; diff --git a/dist/multi/meta.js b/dist/multi/meta.js index bd161ad..1192299 100644 --- a/dist/multi/meta.js +++ b/dist/multi/meta.js @@ -1 +1,87 @@ -"use strict";var __awaiter=this&&this.__awaiter||function(t,e,i,n){return new(i||(i=Promise))(function(s,r){function o(t){try{c(n.next(t))}catch(t){r(t)}}function a(t){try{c(n.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i(function(t){t(e)})).then(o,a)}c((n=n.apply(t,e||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMeta=void 0;const getMeta=function(t){return __awaiter(this,arguments,void 0,function*({link:t,providerContext:e}){try{const{axios:i,cheerio:n}=e,s=t,r=(yield i.get(s)).data,o=n.load(r),a=s.includes("tvshows")?"series":"movie",c="",d=s.split("/")[4].replace(/-/g," "),l=o(".g-item").find("a").attr("href")||"",p=o(".wp-content").find("p").text()||"",u=[];return"series"===a?o("#seasons").children().map((t,e)=>{const i=o(e).find(".title").children().remove().end().text();let n=[];o(e).find(".episodios").children().map((t,e)=>{const i="Episode"+o(e).find(".numerando").text().trim().split("-")[1],s=o(e).find("a").attr("href");i&&s&&n.push({title:i,link:s})}),i&&n.length>0&&u.push({title:i,directLinks:n})}):u.push({title:d,directLinks:[{title:d,link:s.slice(0,-1),type:"movie"}]}),{title:d,synopsis:p,image:l,imdbId:c,type:a,linkList:u}}catch(t){return{title:"",synopsis:"",image:"",imdbId:"",type:"movie",linkList:[]}}})};exports.getMeta=getMeta; \ No newline at end of file +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getMeta = void 0; +const getMeta = function (_a) { + return __awaiter(this, arguments, void 0, function* ({ link, providerContext, }) { + try { + const { axios, cheerio } = providerContext; + const url = link; + const res = yield axios.get(url); + const data = res.data; + const $ = cheerio.load(data); + const type = url.includes("tvshows") ? "series" : "movie"; + const imdbId = ""; + const title = url.split("/")[4].replace(/-/g, " "); + const image = $(".g-item").find("a").attr("href") || ""; + const synopsis = $(".wp-content").find("p").text() || ""; + // Links + const links = []; + if (type === "series") { + $("#seasons") + .children() + .map((i, element) => { + const title = $(element) + .find(".title") + .children() + .remove() + .end() + .text(); + let episodesList = []; + $(element) + .find(".episodios") + .children() + .map((i, element) => { + const title = "Episode" + + $(element).find(".numerando").text().trim().split("-")[1]; + const link = $(element).find("a").attr("href"); + if (title && link) { + episodesList.push({ title, link }); + } + }); + if (title && episodesList.length > 0) { + links.push({ + title, + directLinks: episodesList, + }); + } + }); + } + else { + links.push({ + title: title, + directLinks: [{ title: title, link: url.slice(0, -1), type: "movie" }], + }); + } + // console.log('multi meta', links); + return { + title, + synopsis, + image, + imdbId, + type, + linkList: links, + }; + } + catch (err) { + console.error(err); + return { + title: "", + synopsis: "", + image: "", + imdbId: "", + type: "movie", + linkList: [], + }; + } + }); +}; +exports.getMeta = getMeta; diff --git a/dist/multi/posts.js b/dist/multi/posts.js index e81a766..1aa8c61 100644 --- a/dist/multi/posts.js +++ b/dist/multi/posts.js @@ -1 +1,60 @@ -"use strict";var __awaiter=this&&this.__awaiter||function(t,e,r,i){return new(r||(r=Promise))(function(n,s){function o(t){try{c(i.next(t))}catch(t){s(t)}}function a(t){try{c(i.throw(t))}catch(t){s(t)}}function c(t){var e;t.done?n(t.value):(e=t.value,e instanceof r?e:new r(function(t){t(e)})).then(o,a)}c((i=i.apply(t,e||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getSearchPosts=exports.getPosts=void 0;const getPosts=function(t){return __awaiter(this,arguments,void 0,function*({filter:t,page:e,signal:r,providerContext:i}){const{getBaseUrl:n,cheerio:s}=i;return posts({url:`${(yield n("multi"))+t}page/${e}/`,signal:r,cheerio:s})})};exports.getPosts=getPosts;const getSearchPosts=function(t){return __awaiter(this,arguments,void 0,function*({searchQuery:t,signal:e,providerContext:r}){const{getBaseUrl:i,cheerio:n}=r;return posts({url:`${yield i("multi")}/?s=${t}`,signal:e,cheerio:n})})};function posts(t){return __awaiter(this,arguments,void 0,function*({url:t,signal:e,cheerio:r}){try{const i=yield fetch(t,{signal:e}),n=yield i.text(),s=r.load(n),o=[];return s(".items.full").children().map((t,e)=>{const r=s(e).find(".poster").find("img").attr("alt"),i=s(e).find(".poster").find("a").attr("href"),n=s(e).find(".poster").find("img").attr("data-src")||s(e).find(".poster").find("img").attr("src");r&&i&&n&&o.push({title:r,link:i,image:n})}),o}catch(t){return[]}})}exports.getSearchPosts=getSearchPosts; \ No newline at end of file +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getSearchPosts = exports.getPosts = void 0; +const getPosts = function (_a) { + return __awaiter(this, arguments, void 0, function* ({ filter, page, signal, providerContext, }) { + const { getBaseUrl, cheerio } = providerContext; + const baseUrl = yield getBaseUrl("multi"); + const url = `${baseUrl + filter}page/${page}/`; + return posts({ url, signal, cheerio }); + }); +}; +exports.getPosts = getPosts; +const getSearchPosts = function (_a) { + return __awaiter(this, arguments, void 0, function* ({ searchQuery, signal, providerContext, }) { + const { getBaseUrl, cheerio } = providerContext; + const baseUrl = yield getBaseUrl("multi"); + const url = `${baseUrl}/?s=${searchQuery}`; + return posts({ url, signal, cheerio }); + }); +}; +exports.getSearchPosts = getSearchPosts; +function posts(_a) { + return __awaiter(this, arguments, void 0, function* ({ url, signal, cheerio, }) { + try { + const res = yield fetch(url, { signal }); + const data = yield res.text(); + const $ = cheerio.load(data); + const catalog = []; + $(".items.full") + .children() + .map((i, element) => { + const title = $(element).find(".poster").find("img").attr("alt"); + const link = $(element).find(".poster").find("a").attr("href"); + const image = $(element).find(".poster").find("img").attr("data-src") || + $(element).find(".poster").find("img").attr("src"); + if (title && link && image) { + catalog.push({ + title: title, + link: link, + image: image, + }); + } + }); + return catalog; + } + catch (err) { + console.error("multiGetPosts error ", err); + return []; + } + }); +} diff --git a/dist/multi/stream.js b/dist/multi/stream.js index 7599e9b..7ba51e6 100644 --- a/dist/multi/stream.js +++ b/dist/multi/stream.js @@ -1 +1,139 @@ -"use strict";var __awaiter=this&&this.__awaiter||function(e,t,i,o){return new(i||(i=Promise))(function(n,l){function a(e){try{s(o.next(e))}catch(e){l(e)}}function r(e){try{s(o.throw(e))}catch(e){l(e)}}function s(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(a,r)}s((o=o.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getStream=void 0;const getStream=function(e){return __awaiter(this,arguments,void 0,function*({link:e,providerContext:t}){var i,o,n,l,a,r,s,d,p;const{axios:c,cheerio:u}=t,v={"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"',Referer:"https://multimovies.online/","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"};try{const t=(yield c.get(e,{headers:v})).data,y=u.load(t),g=[],w=y("#player-option-1").attr("data-post"),b=y("#player-option-1").attr("data-nume"),_=y("#player-option-1").attr("data-type"),x=e.split("/").slice(0,3).join("/"),j=new FormData;j.append("action","doo_player_ajax"),j.append("post",w||""),j.append("nume",b||""),j.append("type",_||"");const S=yield fetch(`${x}/wp-admin/admin-ajax.php`,{headers:v,body:j,method:"POST"}),O=yield S.json();let M=(null===(o=null===(i=null==O?void 0:O.embed_url)||void 0===i?void 0:i.match(/