feat(source): add XDMovies
This commit is contained in:
parent
455d84d5b1
commit
1f4d81bfc9
25 changed files with 671 additions and 6 deletions
28
src/source/XDMovies.test.ts
Normal file
28
src/source/XDMovies.test.ts
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import { createTestContext } from '../test';
|
||||
import { FetcherMock, TmdbId } from '../utils';
|
||||
import { XDMovies } from './XDMovies';
|
||||
|
||||
const ctx = createTestContext();
|
||||
|
||||
describe('XDMovies', () => {
|
||||
let source: XDMovies;
|
||||
|
||||
beforeEach(() => {
|
||||
source = new XDMovies(new FetcherMock(`${__dirname}/__fixtures__/XDMovies`));
|
||||
});
|
||||
|
||||
test('handle non-existent devil\'s bath 2024 gracefully', async () => {
|
||||
const streams = await source.handle(ctx, 'movie', new TmdbId(931944, undefined, undefined));
|
||||
expect(streams).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('handle rathnam 2024', async () => {
|
||||
const streams = await source.handle(ctx, 'series', new TmdbId(1171532, undefined, undefined));
|
||||
expect(streams).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('handle stranger things s05e08', async () => {
|
||||
const streams = await source.handle(ctx, 'series', new TmdbId(66732, 5, 8));
|
||||
expect(streams).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
108
src/source/XDMovies.ts
Normal file
108
src/source/XDMovies.ts
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
import bytes from 'bytes';
|
||||
import * as cheerio from 'cheerio';
|
||||
import { BasicAcceptedElems, CheerioAPI } from 'cheerio';
|
||||
import { AnyNode } from 'domhandler';
|
||||
import memoize from 'memoizee';
|
||||
import { ContentType } from 'stremio-addon-sdk';
|
||||
import { Context, CountryCode, Meta } from '../types';
|
||||
import { Fetcher, findCountryCodes, getTmdbId, getTmdbNameAndYear, Id, TmdbId } from '../utils';
|
||||
import { Source, SourceResult } from './Source';
|
||||
|
||||
interface GetTokenResponse {
|
||||
token: string;
|
||||
}
|
||||
|
||||
interface SearchResponsePartial {
|
||||
tmdb_id: number;
|
||||
path: string;
|
||||
audio_languages: string;
|
||||
}
|
||||
|
||||
export class XDMovies extends Source {
|
||||
public readonly id = 'xdmovies';
|
||||
|
||||
public readonly label = 'XDMovies';
|
||||
|
||||
public readonly contentTypes: ContentType[] = ['movie', 'series'];
|
||||
|
||||
public readonly countryCodes: CountryCode[] = [CountryCode.multi, CountryCode.hi, CountryCode.ta, CountryCode.te, CountryCode.ml, CountryCode.bl, CountryCode.mr, CountryCode.kn, CountryCode.ja, CountryCode.ko, CountryCode.pa, CountryCode.gu];
|
||||
|
||||
public readonly baseUrl = 'https://new.xdmovies.wtf';
|
||||
|
||||
private readonly fetcher: Fetcher;
|
||||
|
||||
public constructor(fetcher: Fetcher) {
|
||||
super();
|
||||
|
||||
this.fetcher = fetcher;
|
||||
|
||||
this.getToken = memoize(this.getToken, {
|
||||
maxAge: 3600000, // 1 hour
|
||||
normalizer: () => 'getToken',
|
||||
});
|
||||
}
|
||||
|
||||
public async handleInternal(ctx: Context, _type: string, id: Id): Promise<SourceResult[]> {
|
||||
const tmdbId = await getTmdbId(ctx, this.fetcher, id);
|
||||
|
||||
const token = await this.getToken(ctx);
|
||||
|
||||
const searchResponseEntry = await this.search(ctx, tmdbId, token);
|
||||
if (!searchResponseEntry) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const html = await this.fetcher.text(ctx, new URL(searchResponseEntry.path, this.baseUrl));
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
if (tmdbId.season) {
|
||||
return Promise.all(
|
||||
$(`#season-episodes-${tmdbId.season} .quality-section .episode-card:nth-child(${tmdbId.episode})`)
|
||||
.map(async (_i, el) => await this.extractSourceResults(ctx, $, el, searchResponseEntry))
|
||||
.toArray(),
|
||||
);
|
||||
}
|
||||
|
||||
return Promise.all(
|
||||
$(`.download-item`)
|
||||
.map(async (_i, el) => await this.extractSourceResults(ctx, $, el, searchResponseEntry))
|
||||
.toArray(),
|
||||
);
|
||||
};
|
||||
|
||||
private readonly getToken = async (ctx: Context): Promise<string> => {
|
||||
const getTokenUrl = new URL('/php/get_token.php', this.baseUrl);
|
||||
const getTokenResponse = (await this.fetcher.json(ctx, getTokenUrl)) as GetTokenResponse;
|
||||
|
||||
return getTokenResponse.token;
|
||||
};
|
||||
|
||||
private readonly search = async (ctx: Context, tmdbId: TmdbId, token: string): Promise<SearchResponsePartial | undefined> => {
|
||||
const [name] = await getTmdbNameAndYear(ctx, this.fetcher, tmdbId);
|
||||
|
||||
const searchUrl = new URL(`/php/search_api.php?query=${encodeURIComponent(name)}&fuzzy=true`, this.baseUrl);
|
||||
const searchResponse = (await this.fetcher.json(ctx, searchUrl, { headers: { 'X-Auth-Token': token, 'X-Requested-With': 'XMLHttpRequest' } })) as SearchResponsePartial[];
|
||||
|
||||
return searchResponse.find(searchResponseEntry => searchResponseEntry.tmdb_id === tmdbId.id);
|
||||
};
|
||||
|
||||
private readonly extractSourceResults = async (ctx: Context, $: CheerioAPI, el: BasicAcceptedElems<AnyNode>, searchResponse: SearchResponsePartial): Promise<SourceResult> => {
|
||||
const localHtml = $(el).html() as string;
|
||||
|
||||
const sizeMatch = localHtml.match(/([\d.]+ ?[GM]B)/);
|
||||
const heightMatch = localHtml.match(/\d{3,}p/) as string[];
|
||||
|
||||
const meta: Meta = {
|
||||
countryCodes: [CountryCode.multi, ...findCountryCodes(searchResponse.audio_languages), ...findCountryCodes(localHtml)],
|
||||
height: parseInt(heightMatch[0] as string),
|
||||
title: $('.custom-title, .episode-title', el).text().trim(),
|
||||
...(sizeMatch && { bytes: bytes.parse(sizeMatch[1] as string) as number }),
|
||||
};
|
||||
|
||||
const url = $('a', el)
|
||||
.map((_i, el) => new URL($(el).attr('href') as string))
|
||||
.get(0) as URL;
|
||||
|
||||
return { url: await this.fetcher.getFinalRedirectUrl(ctx, url, undefined, 1), meta };
|
||||
};
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/njntlayllkcrtb1","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=YBYEFkMbTA4iMW8GC6eRz4QlqQBopkAZwm%2FXkEGGQfLxQbKw6jXvy20LfqkfyZXDMoK7v%2B5aZm2ii%2FwxYHgKA%2FvQENffFAhA8gHhAIP2JP6f\"}]}","server":"cloudflare","cf-ray":"9c7a3929fdddd260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/ft5h778dgcot8yd","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=lqIDpDMkvXJQ5dkF70SqrWsI8XImbtVOjGPNXInqqkAy%2ByiCIrxYo1fRWKnnJXNQ5GEl0MDKhkbmibVWZqUtLDcXgdhGMlvK9EY4ONU8TFQ%2B\"}]}","server":"cloudflare","cf-ray":"9c7a3929eda8d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/d140ytrad4r228o","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=l%2BNnPWvf9ij7mPQdO8%2BHxtgPOQJHQ%2FGlIIrBbYj3cOIMwZJAtCXKZ%2FLQFQFPBVfX9YXc2CA6perTIbqkd7NUQ71DcyLHQLohNxxA7YbCPf0m\"}]}","server":"cloudflare","cf-ray":"9c7a3929ed81d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/bzxqjl1vkvdxsvy","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=q8jtF8CzKNn9J%2FBYloLn5t478p27MxGets2ArRdDzcU7ug4AiaiN1yQd7zbBAs7t5UwIfl3o0JgvUEB8BJn5quVMvifvAl0%2Bi%2F4tmS6SY9Yj\"}]}","server":"cloudflare","cf-ray":"9c7a3929fdefd260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:54 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/qgdndi5j1rvil2l","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=CndX24Z%2F5xNQioSyD6GPCEcdQ9y2OX2BH82NA1ebxp%2BT5AUwWgHQMQF8vRwVXqfu9rLEGSB0uyy2UvuhN%2FY8XN2H22BuN6%2F9ZRUvQ%2F3coopk\"}]}","server":"cloudflare","cf-ray":"9c7a3923becad260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/k7sgskvmmzppzap","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=FCm7UXGA9B03WO0EYOxtIOqNkrCO4McPd%2Fc9VOwIXPKVu31CQO2Ln9VIMc8kicF0gRW5I9K8DfZ1UGxB3r7%2Bk4qww6edjGeVekfvYrIf365C\"}]}","server":"cloudflare","cf-ray":"9c7a3929ed93d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:54 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/iy7587kppeg6b6p","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=6XMv9bJamwNxTeB52HAJpQ08oeKPf%2B2u1RiFLYNupdQ8jKH8A%2FIaNqcra%2BJgZpJ%2BZrF6ukAfSUDTyUUeFOjIwQ7ibuGk0QwQ70atGJ%2BnPQSZ\"}]}","server":"cloudflare","cf-ray":"9c7a3923bea8d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:54 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/dn5g8g5drixrrl1","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=d9hgkpK%2BBaxmEdaTfnVUQQ4f9wimIa1aVmEUOITdFc6uI%2FrhlhMapqM5dKhNcPFAO0zv%2BRox0dCBqhE3SkQj1%2BXbagiJoxsEoXSY49HJnPLc\"}]}","server":"cloudflare","cf-ray":"9c7a3923bed5d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/vfhor1uv59jkrha","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=pVuXO1Q3Hlt%2F7W8RndGEqTmf%2F7emrgBHbj8avfgD%2FaX7H57KeI8gDfuUTczuM2vJIB7rrcGM9np9Emccer9iUTy4pjWPGsuYJYZOMKjA%2FChb\"}]}","server":"cloudflare","cf-ray":"9c7a3929fdc8d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:55 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/8mxktxm8ho4ib44","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=78P8cxuwo%2F1QFBjF3Opd9tV5atvAgV5fS5uQ6nxdTCdxiDFvXZ9r1ksV3oe81m5MNbfdK2MmtvJCzHSMJiboeK18DRrksg6z9THJHMxl%2F%2FVR\"}]}","server":"cloudflare","cf-ray":"9c7a3929fdb9d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"date":"Mon, 02 Feb 2026 14:01:54 GMT","content-type":"text/html; charset=utf-8","connection":"close","access-control-allow-origin":"*","location":"https://hubcloud.foo/drive/oae0mzzzje1xrvy","vary":"Accept","x-powered-by":"Express","nel":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}","cf-cache-status":"DYNAMIC","report-to":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=Gnyqle3rvoos3APD9mqtMsTNzfJdNZzyohGec%2BxDaPewpwya87zoH5jG8yG5ouV1akQjnRdrX5o1ukf6Av3W6Pl4MrukRCkwGtDLrBW6DSYF\"}]}","server":"cloudflare","cf-ray":"9c7a3923cee1d260-FRA","alt-svc":"h3=\":443\"; ma=86400"}
|
||||
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3movie1171532
generated
Normal file
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3movie1171532
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"adult":false,"backdrop_path":"/u2dKiAl7UQ9sTwhqzFxVpCnjyYT.jpg","belongs_to_collection":null,"budget":0,"genres":[{"id":28,"name":"Action"},{"id":10749,"name":"Romance"}],"homepage":"","id":1171532,"imdb_id":"tt27577888","origin_country":["IN"],"original_language":"ta","original_title":"ரத்னம்","overview":"Rathnam, a henchmen working for MLA Panneer Selvam in Vellore, protects Malliga, a medical student who bears a resemblance to Rathnam's late mother, from the relentless pursuit of land grabbers Rayudu brothers and becomes her guardian angel.","popularity":0.6786,"poster_path":"/j35uUmrMgWNQHrs0Obi8ll0OVfe.jpg","production_companies":[{"id":95823,"logo_path":"/guoPHeFGMZSXvMnF8zNnOgWPuGO.png","name":"Stone Bench Creations","origin_country":"IN"},{"id":86347,"logo_path":"/ir79iQBhrXk9PJ5Pr9vlLjM4viO.png","name":"Zee Studios","origin_country":"IN"}],"production_countries":[{"iso_3166_1":"IN","name":"India"}],"release_date":"2024-04-26","revenue":0,"runtime":159,"spoken_languages":[{"english_name":"Tamil","iso_639_1":"ta","name":"தமிழ்"}],"status":"Released","tagline":"","title":"Rathnam","video":false,"vote_average":5.273,"vote_count":11}
|
||||
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3movie931944
generated
Normal file
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3movie931944
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"adult":false,"backdrop_path":"/9oD95lebaaSNQHnLTLjjfITaCg7.jpg","belongs_to_collection":null,"budget":0,"genres":[{"id":18,"name":"Drama"},{"id":9648,"name":"Mystery"},{"id":36,"name":"History"},{"id":27,"name":"Horror"}],"homepage":"","id":931944,"imdb_id":"tt29141112","origin_country":["AT","DE"],"original_language":"de","original_title":"Des Teufels Bad","overview":"In 1750 Austria, a deeply religious woman named Agnes has just married her beloved, but her mind and heart soon grow heavy as her life becomes a long list of chores and expectations. Day after day, she is increasingly trapped in a murky and lonely path leading to evil thoughts, until the possibility of committing a shocking act of violence seems like the only way out of her inner prison.","popularity":4.649,"poster_path":"/txVfrmwFOKB5qczM0ENYSqKMnSv.jpg","production_companies":[{"id":25523,"logo_path":"/hVnHNJUHSxaTpQdWPzC8B5CRvns.png","name":"Ulrich Seidl Filmproduktion","origin_country":"AT"},{"id":23406,"logo_path":"/BTYR4mdM8dQxK0cK0gPVhkXd8j.png","name":"Heimatfilm","origin_country":"DE"},{"id":122,"logo_path":"/pbRxJ8oia1MypvLbukeamObtYr2.png","name":"Coop99 Filmproduktion","origin_country":"AT"}],"production_countries":[{"iso_3166_1":"AT","name":"Austria"},{"iso_3166_1":"DE","name":"Germany"}],"release_date":"2024-03-08","revenue":0,"runtime":121,"spoken_languages":[{"english_name":"German","iso_639_1":"de","name":"Deutsch"}],"status":"Released","tagline":"","title":"The Devil's Bath","video":false,"vote_average":6.6,"vote_count":151}
|
||||
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3tv66732
generated
Normal file
1
src/source/__fixtures__/XDMovies/https:api.themoviedb.org3tv66732
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"adult":false,"backdrop_path":"/8zbAoryWbtH0DKdev8abFAjdufy.jpg","created_by":[{"id":1179422,"credit_id":"57599b039251410a99001cce","name":"Ross Duffer","original_name":"Ross Duffer","gender":2,"profile_path":"/7wdhSHgMLry5jBKJT1mdLT3BYaZ.jpg"},{"id":1179419,"credit_id":"57599b0e925141378a002c87","name":"Matt Duffer","original_name":"Matt Duffer","gender":2,"profile_path":"/kXO5CnSxC0znMAICGxnPeuGP73U.jpg"}],"episode_run_time":[],"first_air_date":"2016-07-15","genres":[{"id":10765,"name":"Sci-Fi & Fantasy"},{"id":9648,"name":"Mystery"},{"id":10759,"name":"Action & Adventure"}],"homepage":"https://www.netflix.com/title/80057281","id":66732,"in_production":false,"languages":["en"],"last_air_date":"2025-12-31","last_episode_to_air":{"id":5607051,"name":"Chapter Eight: The Rightside Up","overview":"As Vecna prepares to destroy the world as we know it, the party must put everything on the line to defeat him once and for all.","vote_average":6.769,"vote_count":180,"air_date":"2025-12-31","episode_number":8,"episode_type":"finale","production_code":"","runtime":129,"season_number":5,"show_id":66732,"still_path":"/kP23RWbUWM6vGhT9PxFyP5VT3y4.jpg"},"name":"Stranger Things","next_episode_to_air":null,"networks":[{"id":213,"logo_path":"/wwemzKWzjKYJFfCeiB57q3r4Bcm.png","name":"Netflix","origin_country":""}],"number_of_episodes":42,"number_of_seasons":5,"origin_country":["US"],"original_language":"en","original_name":"Stranger Things","overview":"When a young boy vanishes, a small town uncovers a mystery involving secret experiments, terrifying supernatural forces, and one strange little girl.","popularity":364.1766,"poster_path":"/uOOtwVbSr4QDjAGIifLDwpb2Pdl.jpg","production_companies":[{"id":2575,"logo_path":"/9YJrHYlcfHtwtulkFMAies3aFEl.png","name":"21 Laps Entertainment","origin_country":"US"},{"id":170090,"logo_path":null,"name":"Monkey Massacre Productions","origin_country":"US"},{"id":184664,"logo_path":"/4qv40ryAKUzvwptbv13eXUAl1Wm.png","name":"Upside Down Pictures","origin_country":"US"}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"seasons":[{"air_date":"2016-07-15","episode_count":8,"id":77680,"name":"Season 1","overview":"Strange things are afoot in Hawkins, Indiana, where a young boy's sudden disappearance unearths a young girl with otherworldly powers.","poster_path":"/fOaUnQwDJV22esXEswhaDMSqn2w.jpg","season_number":1,"vote_average":8.4},{"air_date":"2017-10-27","episode_count":9,"id":83248,"name":"Stranger Things 2","overview":"It's been nearly a year since Will's strange disappearance. But life's hardly back to normal in Hawkins. Not even close.","poster_path":"/74nFJmiapxKuUBXRbSu6VqGGcuo.jpg","season_number":2,"vote_average":8.2},{"air_date":"2019-07-04","episode_count":8,"id":115216,"name":"Stranger Things 3","overview":"Budding romance. A brand-new mall. And rabid rats running toward danger. It's the summer of 1985 in Hawkins ... and one summer can change everything.","poster_path":"/x2LSRK2Cm7MZhjluni1msVJ3wDF.jpg","season_number":3,"vote_average":8.1},{"air_date":"2022-05-27","episode_count":9,"id":163313,"name":"Stranger Things 4","overview":"Darkness returns to Hawkins just in time for spring break, igniting fresh terror, disturbing memories — and an ominous new threat.","poster_path":"/zvGTZYDCoMSMIBkXExxRxLYimqN.jpg","season_number":4,"vote_average":8.5},{"air_date":"2025-11-26","episode_count":8,"id":402292,"name":"Stranger Things 5","overview":"The fall of 1987. Hawkins is scarred by rifts. Vecna has vanished and the government has placed the town under military quarantine, forcing Eleven back into hiding. To end this nightmare, they'll need everyone together, one last time.","poster_path":"/5i5Fg549J27knMvhI5NRM2FT3Gn.jpg","season_number":5,"vote_average":7.3}],"spoken_languages":[{"english_name":"English","iso_639_1":"en","name":"English"}],"status":"Ended","tagline":"It only gets stranger...","type":"Scripted","vote_average":8.581,"vote_count":20501}
|
||||
138
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfmoviesrathnam-1080p-720p-hindi-download-1171532
generated
Normal file
138
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfmoviesrathnam-1080p-720p-hindi-download-1171532
generated
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-KFGX1HHK8C"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag() { dataLayer.push(arguments); }
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-KFGX1HHK8C');
|
||||
</script>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>Rathnam — Movie</title>
|
||||
<meta name="description" content="Rathnam, a henchmen working for MLA Panneer Selvam in Vellore, protects Malliga, a medical student who bears a resemblance to Rathnam's late mother, from the relentless pursuit of land grabbers Rayudu brothers and becomes her guardian angel.">
|
||||
<link rel="stylesheet" href="/css/styles.css">
|
||||
<link rel="stylesheet" href="/css/movie-grid.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css">
|
||||
<meta property="og:title" content="Rathnam">
|
||||
<meta property="og:description" content="Rathnam, a henchmen working for MLA Panneer Selvam in Vellore, protects Malliga, a medical student who bears a resemblance to Rathnam's late mother, from the relentless pursuit of land grabbers Rayudu brothers and becomes her guardian angel.">
|
||||
<meta property="og:image" content="https://image.tmdb.org/t/p/w500/j35uUmrMgWNQHrs0Obi8ll0OVfe.jpg">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<link rel="canonical" href="/movies/rathnam-1080p-720p-hindi-download-1171532">
|
||||
<script>window.AUTH_TOKEN = '<?php echo htmlspecialchars(getenv('AUTH_TOKEN') ?: ''); ?>';</script>
|
||||
<script data-cfasync="false" src="//d2n5v45616cm6u.cloudfront.net/?mcvnd=1226697"></script>
|
||||
</head>
|
||||
<body class="dark-mode">
|
||||
<header class="details-header">
|
||||
<div class="navbar">
|
||||
<div style="display:flex;align-items:center;">
|
||||
<a href="/" style="display:flex;align-items:center;text-decoration:none;color:inherit;">
|
||||
<img src="/assets/logo1.png" style="width:32px;height:auto;" alt="XDMovies Logo" />
|
||||
<span><h1 class="logo" style="margin-left:8px;">XDMovies</h1></span>
|
||||
</a>
|
||||
</div>
|
||||
<nav style="margin-left:auto;"><ul class="nav-links"><li><a href="/">Home</a></li><li><a href="/search.html"><i class="fa-solid fa-magnifying-glass" style="margin-right:5px;"></i></a></li></ul></nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div class="movie-header" id="movie-header" style="background-image: url('https://image.tmdb.org/t/p/original/u2dKiAl7UQ9sTwhqzFxVpCnjyYT.jpg'); background-size: cover; background-position: center; background-attachment: fixed;">
|
||||
</div>
|
||||
<div class="container" id="movie-details">
|
||||
<div class="details-wrapper">
|
||||
<img class="poster" src="https://image.tmdb.org/t/p/w500/j35uUmrMgWNQHrs0Obi8ll0OVfe.jpg" alt="Rathnam">
|
||||
<div class="info">
|
||||
<h2>Rathnam</h2>
|
||||
<p><strong>Rating:</strong> 5.273 / 10 ⭐</p>
|
||||
<p><strong>Genres:</strong> Action, Romance</p>
|
||||
<p><strong>Release Date:</strong> 2024-04-26</p>
|
||||
<p id="audio-info"><strong>Audios:</strong> <span class="neon-audio">Hindi</span></p>
|
||||
<p id="source-info"><strong>Sources:</strong> <span class="neon-source">Amazon</span></p>
|
||||
<p class="overview">Rathnam, a henchmen working for MLA Panneer Selvam in Vellore, protects Malliga, a medical student who bears a resemblance to Rathnam's late mother, from the relentless pursuit of land grabbers Rayudu brothers and becomes her guardian angel.</p>
|
||||
<div class="cast">
|
||||
<h3>Star Cast:</h3>
|
||||
<p><em>Vishal Krishna, Priya Bhavani Shankar, Samuthirakani, Murali Sharma, Hareesh Peradi</em></p>
|
||||
</div>
|
||||
<h3 class="text-center mb-3 text-warning">Download Links:</h3><div class="download-box card shadow-lg pt-2 px-4 pb-4 mt-2"><details class="mb-3"><summary style="cursor:pointer; font-weight:600;">Amazon Versions(4)</summary><div class="download-buttons d-flex flex-wrap justify-content-center gap-3 mt-2"><div class="download-item text-center mb-3"><div class="custom-title mb-2 text-light">Rathnam.2024.720p.AMZN.WEB-DL.DDP2.0.H.265-XDMovies.mkv</div><a href="https://link.xdmovies.wtf/download/YHbqYlMcSKtmw8aTccl621fRFqJWXxeGHAstPRuA0E4" target="_blank" class="movie-download-btn btn btn-warning"><i class="fas fa-download me-2"></i>1.30 GB</a></div><div class="download-item text-center mb-3"><div class="custom-title mb-2 text-light">Rathnam.2024.720p.AMZN.WEB-DL.DDP2.0.H.264-XDMovies.mkv</div><a href="https://link.xdmovies.wtf/download/p1Z-Ii4P-ohUxG4Tc93JP_3jl9-7I5ZOifOf0mDT__4" target="_blank" class="movie-download-btn btn btn-warning"><i class="fas fa-download me-2"></i>4.61 GB</a></div><div class="download-item text-center mb-3"><div class="custom-title mb-2 text-light">Rathnam.2024.1080p.AMZN.WEB-DL.DDP2.0.H.265-XDMovies.mkv</div><a href="https://link.xdmovies.wtf/download/xUChy50yiRXZgCF-_8FbzG46XEGYm13LO2JcZMvY5HE" target="_blank" class="movie-download-btn btn btn-warning"><i class="fas fa-download me-2"></i>3.80 GB</a></div><div class="download-item text-center mb-3"><div class="custom-title mb-2 text-light">Rathnam.2024.1080p.AMZN.WEB-DL.DDP2.0.H.264-XDMovies.mkv</div><a href="https://link.xdmovies.wtf/download/spgEvICetLWnULbCYnmAM0gB_7pNtkDGI-chtTjOteM" target="_blank" class="movie-download-btn btn btn-warning"><i class="fas fa-download me-2"></i>8.48 GB</a></div></div></details></div>
|
||||
|
||||
|
||||
<details class="seo-text" aria-hidden="true">
|
||||
<summary class="seo-summary">Tags Ignore</summary>
|
||||
<p>Download Rathnam in Hindi Full Movie 2024 Free Direct Download from Amazon.</p>
|
||||
<p>Watch Rathnam Online & Download Latest 2024 Direct Download Links & Fast Mirrors.</p>
|
||||
<p>Available quality versions: 1080p, 720p for Rathnam.</p>
|
||||
<p>"Rathnam full movie download"? We provide direct download links and cloud downloads available.</p>
|
||||
<p>Genres: Action, Romance. #action #romance</p>
|
||||
<p>Action Romance 2024 Amazon Online</p>
|
||||
<p>Latest Amazon for free — direct download links and watch online options for Rathnam.</p>
|
||||
<p>Search terms: "Rathnam free download", "Rathnam Hindi full movie download", "Amazon Rathnam download".</p>
|
||||
<p style="display:none;">#action #romance</p>
|
||||
</details>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<div class="container"><p>© 2025 XDMovies</p></div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
function toggleSeason(elementId, button) {
|
||||
const contentEl = document.getElementById(elementId);
|
||||
const icon = button.querySelector('i');
|
||||
|
||||
const container = button.closest('.movie-resolutions');
|
||||
if (container) {
|
||||
const allResolutions = container.querySelectorAll('.resolution-episodes');
|
||||
allResolutions.forEach(resolution => {
|
||||
if (resolution.id !== elementId && resolution.classList.contains('active')) {
|
||||
resolution.classList.remove('active');
|
||||
const btn = resolution.previousElementSibling;
|
||||
if (btn) {
|
||||
const btnIcon = btn.querySelector('i');
|
||||
btnIcon.classList.replace('fa-angle-up', 'fa-angle-down');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
contentEl.classList.toggle('active');
|
||||
if (contentEl.classList.contains('active')) {
|
||||
icon.classList.replace('fa-angle-down', 'fa-angle-up');
|
||||
} else {
|
||||
icon.classList.replace('fa-angle-up', 'fa-angle-down');
|
||||
}
|
||||
}
|
||||
|
||||
function toggleQuality(elementId, button) {
|
||||
const contentEl = document.getElementById(elementId);
|
||||
const icon = button.querySelector('i');
|
||||
|
||||
const resolutionEl = button.closest('.resolution-episodes');
|
||||
const allQualities = resolutionEl.querySelectorAll('.quality-episodes');
|
||||
allQualities.forEach(quality => {
|
||||
if (quality.id !== elementId && quality.classList.contains('active')) {
|
||||
quality.classList.remove('active');
|
||||
const btn = quality.previousElementSibling;
|
||||
if (btn) {
|
||||
const btnIcon = btn.querySelector('i');
|
||||
btnIcon.classList.replace('fa-angle-up', 'fa-angle-down');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
contentEl.classList.toggle('active');
|
||||
if (contentEl.classList.contains('active')) {
|
||||
icon.classList.replace('fa-angle-down', 'fa-angle-up');
|
||||
} else {
|
||||
icon.classList.replace('fa-angle-up', 'fa-angle-down');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
1
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfphpget_token.php
generated
Normal file
1
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfphpget_token.php
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"token":"7297skkihkajwnsgaklakshuwd"}
|
||||
1
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfphpsearch_api.phpqueryRathnamandfuzzytrue
generated
Normal file
1
src/source/__fixtures__/XDMovies/https:new.xdmovies.wtfphpsearch_api.phpqueryRathnamandfuzzytrue
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
[{"id":1565591,"tmdb_id":1171532,"title":"Rathnam","type":"movie","poster":"\/j35uUmrMgWNQHrs0Obi8ll0OVfe.jpg","release_year":"2024","path":"\/movies\/rathnam-1080p-720p-hindi-download-1171532","qualities":["1080p","720p"],"audio_languages":"Hindi"}]
|
||||
|
|
@ -0,0 +1 @@
|
|||
[{"id":196,"tmdb_id":66732,"title":"Stranger Things","type":"tv","poster":"\/cVxVGwHce6xnW8UaVUggaPXbmoE.jpg","release_year":"2016","path":"\/series\/stranger-things-2160p-1080p-hindi-english-download-66732","qualities":["2160p","1080p"],"audio_languages":"Hindi, English, Tamil, Telugu"},{"id":1565254,"tmdb_id":1610413,"title":"One Last Adventure: The Making of Stranger Things 5","type":"movie","exact_match":0,"poster":"\/aZhrAx5CevLfjXcGIG3wBXxDiAL.jpg","release_year":"2026","path":"\/movies\/one-last-adventure-the-making-of-stranger-things-5-1080p-720p-hindi-english-download-1610413","qualities":["1080p","720p"],"audio_languages":"Hindi, English "},{"id":166,"tmdb_id":1525025,"title":"A Stranger by the Hill","type":"movie","exact_match":0,"poster":"\/1DK8gt7H99ctCPKt57lyoDG5dpe.jpg","release_year":"2024","path":"\/movies\/a-stranger-by-the-hill-1080p-720p-hindi-download-1525025","qualities":["1080p","720p"],"audio_languages":"Hindi"},{"id":2427,"tmdb_id":1389255,"title":"The Stranger in My Home","type":"movie","exact_match":0,"poster":"\/8rxFUdvtFwAxbyZfSBKPB2Vaal9.jpg","release_year":"2025","path":"\/movies\/the-stranger-in-my-home-2160p-1080p-hindi-english-download-1389255","qualities":["2160p","1080p"],"audio_languages":"Hindi, English "},{"id":1565521,"tmdb_id":48781,"title":"Never Talk to Strangers","type":"movie","exact_match":0,"poster":"\/naZWa06duMvKr4dLrPGgl9yrPZ1.jpg","release_year":"1995","path":"\/movies\/never-talk-to-strangers-1080p-english-download-48781","qualities":["1080p"],"audio_languages":"English"},{"id":2410,"tmdb_id":1010756,"title":"The Strangers: Chapter 2","type":"movie","exact_match":0,"poster":"\/pqADzs5SJvI2jC0DThPVMuNJcWS.jpg","release_year":"2025","path":"\/movies\/the-strangers-chapter-2-1080p-english-download-1010756","qualities":["1080p"],"audio_languages":"English"},{"id":1565325,"tmdb_id":1240592,"title":"The Wild Blade of Strangers","type":"movie","exact_match":0,"poster":"\/9DZOU5qibB8WeXtzQ00Nl6tiqfw.jpg","release_year":"2024","path":"\/movies\/the-wild-blade-of-strangers-1080p-720p-hindi-tamil-download-1240592","qualities":["1080p","720p"],"audio_languages":"Hindi, Tamil, Telugu, Chinese "},{"id":1565283,"tmdb_id":371608,"title":"The Strangers: Prey at Night","type":"movie","exact_match":0,"poster":"\/vdxLpPsZkPZdFrREp7eSeSzcimj.jpg","release_year":"2018","path":"\/movies\/the-strangers-prey-at-night-1080p-720p-hindi-english-download-371608","qualities":["1080p","720p"],"audio_languages":"Hindi, English"},{"id":152,"tmdb_id":70626,"title":"Stranger","type":"tv","exact_match":0,"poster":"\/blbbtx7DyvZ3JTGyc9MCArDL79b.jpg","release_year":"2017","path":"\/series\/stranger-1080p-hindi-korean-download-70626","qualities":["1080p"],"audio_languages":"Hindi , Korean"},{"id":980,"tmdb_id":60956,"title":"Doctor Stranger","type":"tv","exact_match":0,"poster":"\/odH9cebqUNHKh1p6BKVSs0gsD34.jpg","release_year":"2014","path":"\/series\/doctor-stranger-1080p-korean-download-60956","qualities":["1080p"],"audio_languages":"Korean "},{"id":637,"tmdb_id":89959,"title":"Strangers from Hell","type":"tv","exact_match":0,"poster":"\/o66rEzPzZZWxSrcus2f46CedHhq.jpg","release_year":"2019","path":"\/series\/strangers-from-hell-1080p-720p-english-download-89959","qualities":["1080p","720p"],"audio_languages":"English "}]
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
166
src/source/__snapshots__/XDMovies.test.ts.snap
Normal file
166
src/source/__snapshots__/XDMovies.test.ts.snap
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`XDMovies handle non-existent devil's bath 2024 gracefully 1`] = `[]`;
|
||||
|
||||
exports[`XDMovies handle rathnam 2024 1`] = `
|
||||
[
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 1395864371,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"hi",
|
||||
],
|
||||
"height": 720,
|
||||
"title": "Rathnam.2024.720p.AMZN.WEB-DL.DDP2.0.H.265-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/qgdndi5j1rvil2l",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 4949949808,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"hi",
|
||||
],
|
||||
"height": 720,
|
||||
"title": "Rathnam.2024.720p.AMZN.WEB-DL.DDP2.0.H.264-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/iy7587kppeg6b6p",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 4080218931,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"hi",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Rathnam.2024.1080p.AMZN.WEB-DL.DDP2.0.H.265-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/oae0mzzzje1xrvy",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 9105330667,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"hi",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Rathnam.2024.1080p.AMZN.WEB-DL.DDP2.0.H.264-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/dn5g8g5drixrrl1",
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
||||
exports[`XDMovies handle stranger things s05e08 1`] = `
|
||||
[
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 17544941404,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 2160,
|
||||
"title": "Stranger.Things.S05E08.2160p.NF.WEB-DL.DDP5.1.H.265-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/k7sgskvmmzppzap",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 1513975971,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Stranger.Things.S05E08.1080p.NF.WEB-DL.AAC5.1.AV1-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/ft5h778dgcot8yd",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 5508295557,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Stranger.Things.S05E08.1080p.NF.WEB-DL.DDP5.1.H.265-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/d140ytrad4r228o",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 7215545057,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Stranger.Things.S05E08.1080p.NF.WEB-DL.DDP5.1.Atmos.H.264-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/8mxktxm8ho4ib44",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 5991479377,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 1080,
|
||||
"title": "Stranger.Things.S05E08.1080p.NF.WEB-DL.DDP5.1.DV.HDR.H.265-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/bzxqjl1vkvdxsvy",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 1170378588,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 720,
|
||||
"title": "Stranger.Things.S05E08.720p.NF.WEB-DL.AAC5.1.AV1-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/vfhor1uv59jkrha",
|
||||
},
|
||||
{
|
||||
"meta": {
|
||||
"bytes": 2534030704,
|
||||
"countryCodes": [
|
||||
"multi",
|
||||
"en",
|
||||
"hi",
|
||||
"ta",
|
||||
"te",
|
||||
],
|
||||
"height": 720,
|
||||
"title": "Stranger.Things.S05E08.720p.NF.WEB-DL.AAC5.1.H.264-XDMovies.mkv",
|
||||
},
|
||||
"url": "https://hubcloud.foo/drive/njntlayllkcrtb1",
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
|
@ -19,6 +19,7 @@ import { StreamKiste } from './StreamKiste';
|
|||
import { VerHdLink } from './VerHdLink';
|
||||
import { VidSrc } from './VidSrc';
|
||||
import { VixSrc } from './VixSrc';
|
||||
import { XDMovies } from './XDMovies';
|
||||
|
||||
export * from './Source';
|
||||
|
||||
|
|
@ -28,6 +29,7 @@ export const createSources = (fetcher: Fetcher): Source[] => {
|
|||
return [
|
||||
// multi
|
||||
new FourKHDHub(fetcher),
|
||||
new XDMovies(fetcher),
|
||||
new VixSrc(fetcher),
|
||||
new VidSrc(),
|
||||
new RgShows(fetcher),
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ exports[`buildManifest default manifest 1`] = `
|
|||
"config": [
|
||||
{
|
||||
"key": "multi",
|
||||
"title": "Multi 🌐 (4KHDHub, RgShows, VidSrc, VixSrc)",
|
||||
"title": "Multi 🌐 (4KHDHub, RgShows, VidSrc, VixSrc, XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
|
|
@ -19,6 +19,11 @@ exports[`buildManifest default manifest 1`] = `
|
|||
"title": "Albanian 🇦🇱 (Kokoshka)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "bl",
|
||||
"title": "Bengali 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "de",
|
||||
"title": "German 🇩🇪 (Einschalten, KinoGer, MegaKino, MeineCloud, StreamKiste)",
|
||||
|
|
@ -34,9 +39,14 @@ exports[`buildManifest default manifest 1`] = `
|
|||
"title": "French 🇫🇷 (Frembed, FrenchCloud, Movix)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "gu",
|
||||
"title": "Gujarati 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "hi",
|
||||
"title": "Hindi 🇮🇳 (4KHDHub)",
|
||||
"title": "Hindi 🇮🇳 (4KHDHub, XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
|
|
@ -44,19 +54,49 @@ exports[`buildManifest default manifest 1`] = `
|
|||
"title": "Italian 🇮🇹 (Eurostreaming, MostraGuarda, VixSrc)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "ja",
|
||||
"title": "Japanese 🇯🇵 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "kn",
|
||||
"title": "Kannada 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "ko",
|
||||
"title": "Korean 🇰🇷 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "ml",
|
||||
"title": "Malayalam 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "mr",
|
||||
"title": "Marathi 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "mx",
|
||||
"title": "Latin American Spanish 🇲🇽 (CineHDPlus, Cuevana, HomeCine, VerHdLink)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "pa",
|
||||
"title": "Punjabi 🇮🇳 (XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "ta",
|
||||
"title": "Tamil 🇮🇳 (4KHDHub)",
|
||||
"title": "Tamil 🇮🇳 (4KHDHub, XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
"key": "te",
|
||||
"title": "Telugu 🇮🇳 (4KHDHub)",
|
||||
"title": "Telugu 🇮🇳 (4KHDHub, XDMovies)",
|
||||
"type": "checkbox",
|
||||
},
|
||||
{
|
||||
|
|
@ -84,9 +124,9 @@ exports[`buildManifest default manifest 1`] = `
|
|||
],
|
||||
"description": "Provides HTTP URLs from streaming websites. Configure add-on for additional languages. Add MediaFlow proxy for more URLs.
|
||||
|
||||
Supported languages: Albanian, German, Castilian Spanish, French, Hindi, Italian, Latin American Spanish, Tamil, Telugu
|
||||
Supported languages: Albanian, Bengali, German, Castilian Spanish, French, Gujarati, Hindi, Italian, Japanese, Kannada, Korean, Malayalam, Marathi, Latin American Spanish, Punjabi, Tamil, Telugu
|
||||
|
||||
Supported sources: 4KHDHub, CineHDPlus, Cuevana, Einschalten, Eurostreaming, Frembed, FrenchCloud, HomeCine, KinoGer, Kokoshka, MegaKino, MeineCloud, MostraGuarda, Movix, RgShows, StreamKiste, VerHdLink, VidSrc, VixSrc
|
||||
Supported sources: 4KHDHub, CineHDPlus, Cuevana, Einschalten, Eurostreaming, Frembed, FrenchCloud, HomeCine, KinoGer, Kokoshka, MegaKino, MeineCloud, MostraGuarda, Movix, RgShows, StreamKiste, VerHdLink, VidSrc, VixSrc, XDMovies
|
||||
|
||||
Supported extractors: ",
|
||||
"id": "webstreamr",
|
||||
|
|
|
|||
Loading…
Reference in a new issue