feat(handler): add Eurostream (it series)
This commit is contained in:
parent
7f26047250
commit
c6d9bfb01b
12 changed files with 3302 additions and 16 deletions
50
src/handler/Eurostreaming.test.ts
Normal file
50
src/handler/Eurostreaming.test.ts
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
import winston from 'winston';
|
||||
import { Eurostreaming } from './Eurostreaming';
|
||||
import { EmbedExtractorRegistry } from '../embed-extractor';
|
||||
import { Fetcher } from '../utils';
|
||||
import { Context } from '../types';
|
||||
jest.mock('../utils/Fetcher');
|
||||
|
||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
||||
// @ts-expect-error No constructor args needed
|
||||
const fetcher = new Fetcher();
|
||||
const handler = new Eurostreaming(fetcher, new EmbedExtractorRegistry(logger, fetcher));
|
||||
const ctx: Context = { ip: '127.0.0.1' };
|
||||
|
||||
describe('Eurostreaming', () => {
|
||||
test('does not handle non imdb series', async () => {
|
||||
const streams = await handler.handle(ctx, 'kitsu:123');
|
||||
|
||||
expect(streams).toHaveLength(0);
|
||||
});
|
||||
|
||||
test('handles non-existent series gracefully', async () => {
|
||||
const streams = await handler.handle(ctx, 'tt12345678:1:1');
|
||||
|
||||
expect(streams).toHaveLength(0);
|
||||
});
|
||||
|
||||
test('handle imdb black mirror s2e4', async () => {
|
||||
const streams = (await handler.handle(ctx, 'tt2085059:2:4')).filter(stream => stream !== undefined);
|
||||
|
||||
expect(streams).toHaveLength(2);
|
||||
expect(streams[0]).toStrictEqual({
|
||||
url: expect.any(URL),
|
||||
label: 'SuperVideo',
|
||||
sourceId: 'supervideo_it',
|
||||
height: 1080,
|
||||
bytes: 875875532,
|
||||
countryCode: 'it',
|
||||
});
|
||||
expect(streams[0]?.url.href).toMatch(/^https:\/\/.*?.m3u8/);
|
||||
expect(streams[1]).toStrictEqual({
|
||||
url: expect.any(URL),
|
||||
label: 'Dropload',
|
||||
sourceId: 'dropload_it',
|
||||
height: 1080,
|
||||
bytes: 875875532,
|
||||
countryCode: 'it',
|
||||
});
|
||||
expect(streams[1]?.url.href).toMatch(/^https:\/\/.*?.m3u8/);
|
||||
});
|
||||
});
|
||||
78
src/handler/Eurostreaming.ts
Normal file
78
src/handler/Eurostreaming.ts
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
import * as cheerio from 'cheerio';
|
||||
import { Handler } from './types';
|
||||
import { ImdbId, parseImdbId, Fetcher } from '../utils';
|
||||
import { EmbedExtractorRegistry } from '../embed-extractor';
|
||||
import { Context } from '../types';
|
||||
|
||||
export class Eurostreaming implements Handler {
|
||||
readonly id = 'eurostreaming';
|
||||
|
||||
readonly label = 'Eurostreaming';
|
||||
|
||||
readonly contentTypes = ['series'];
|
||||
|
||||
readonly languages = ['it'];
|
||||
|
||||
private readonly fetcher: Fetcher;
|
||||
private readonly embedExtractors: EmbedExtractorRegistry;
|
||||
|
||||
constructor(fetcher: Fetcher, embedExtractors: EmbedExtractorRegistry) {
|
||||
this.fetcher = fetcher;
|
||||
this.embedExtractors = embedExtractors;
|
||||
}
|
||||
|
||||
readonly handle = async (ctx: Context, id: string) => {
|
||||
if (!id.startsWith('tt')) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const imdbId = parseImdbId(id);
|
||||
|
||||
const seriesPageUrl = await this.fetchSeriesPageUrl(ctx, imdbId);
|
||||
if (!seriesPageUrl) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const html = await this.fetcher.text(ctx, seriesPageUrl);
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
return Promise.all(
|
||||
$(`[data-num="${imdbId.series}x${imdbId.episode}"]`)
|
||||
.siblings('.mirrors')
|
||||
.children('[data-link!="#"]')
|
||||
.map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://')))
|
||||
.toArray()
|
||||
.filter(embedUrl => !embedUrl.host.match(/eurostreaming/))
|
||||
.map(embedUrl => this.embedExtractors.handle(ctx, embedUrl, 'it')),
|
||||
);
|
||||
};
|
||||
|
||||
private fetchSeriesPageUrl = async (ctx: Context, imdbId: ImdbId): Promise<URL | undefined> => {
|
||||
const html = await this.fetcher.textPost(
|
||||
ctx,
|
||||
new URL('https://eurostreaming.my/index.php'),
|
||||
{
|
||||
do: 'search',
|
||||
subaction: 'search',
|
||||
search_start: 0,
|
||||
full_search: 0,
|
||||
result_from: 1,
|
||||
story: imdbId.id,
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
const $ = cheerio.load(html);
|
||||
|
||||
const url = $('.post-content a[href]:first')
|
||||
.map((_i, el) => $(el).attr('href'))
|
||||
.get(0);
|
||||
|
||||
return url !== undefined ? new URL(url) : url;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
export * from './CineHDPlus';
|
||||
export * from './Eurostreaming';
|
||||
export * from './FrenchCloud';
|
||||
export * from './KinoKiste';
|
||||
export * from './MeineCloud';
|
||||
|
|
|
|||
12
src/index.ts
12
src/index.ts
|
|
@ -3,7 +3,16 @@ import axios from 'axios';
|
|||
import axiosRetry from 'axios-retry';
|
||||
import { setupCache } from 'axios-cache-interceptor';
|
||||
import winston from 'winston';
|
||||
import { CineHDPlus, FrenchCloud, Handler, KinoKiste, MeineCloud, MostraGuarda, VerHdLink } from './handler';
|
||||
import {
|
||||
CineHDPlus,
|
||||
Eurostreaming,
|
||||
FrenchCloud,
|
||||
Handler,
|
||||
KinoKiste,
|
||||
MeineCloud,
|
||||
MostraGuarda,
|
||||
VerHdLink,
|
||||
} from './handler';
|
||||
import { EmbedExtractorRegistry } from './embed-extractor';
|
||||
import { ConfigureController, ManifestController, StreamController } from './controller';
|
||||
import { Fetcher, StreamResolver } from './utils';
|
||||
|
|
@ -37,6 +46,7 @@ const handlers: Handler[] = [
|
|||
// FR
|
||||
new FrenchCloud(fetcher, embedExtractors),
|
||||
// IT
|
||||
new Eurostreaming(fetcher, embedExtractors),
|
||||
new MostraGuarda(fetcher, embedExtractors),
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,35 @@ describe('fetch', () => {
|
|||
expect(responseText2).toStrictEqual(responseText1);
|
||||
|
||||
expect(axiosSpy).toHaveBeenCalledWith(
|
||||
'https://some-url.test/', {
|
||||
'https://some-url.test/',
|
||||
{
|
||||
headers: {
|
||||
'User-Agent': expect.not.stringMatching(/jest/),
|
||||
'Forwarded': 'for=127.0.0.1',
|
||||
'X-Forwarded-For': '127.0.0.1',
|
||||
'X-Forwarded-Proto': 'https',
|
||||
'X-Real-IP': '127.0.0.1',
|
||||
},
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test('textPost passes successful response through setting headers', async () => {
|
||||
axiosMock.onPost().reply(200, 'some text');
|
||||
const axiosSpy = jest.spyOn(axios, 'post');
|
||||
|
||||
const responseText1 = await fetcher.textPost(ctx, new URL('https://some-url.test/'), { foo: 'bar' });
|
||||
const responseText2 = await fetcher.textPost(ctx, new URL('https://some-url.test/'), { foo: 'bar' }, { headers: { 'User-Agent': 'jest' } });
|
||||
|
||||
expect(responseText1).toBe('some text');
|
||||
expect(responseText2).toStrictEqual(responseText1);
|
||||
|
||||
expect(axiosSpy).toHaveBeenCalledWith(
|
||||
'https://some-url.test/',
|
||||
{
|
||||
foo: 'bar',
|
||||
},
|
||||
{
|
||||
headers: {
|
||||
'User-Agent': expect.not.stringMatching(/jest/),
|
||||
'Forwarded': 'for=127.0.0.1',
|
||||
|
|
|
|||
|
|
@ -20,24 +20,33 @@ export class Fetcher {
|
|||
readonly text = async (ctx: Context, url: URL, config?: AxiosRequestConfig): Promise<string> => {
|
||||
this.logger.info(`Fetch ${url}`);
|
||||
|
||||
const response = await this.axios.get(
|
||||
url.href,
|
||||
{
|
||||
...config,
|
||||
headers: {
|
||||
...config?.headers,
|
||||
'User-Agent': this.createUserAgentForIp(ctx.ip),
|
||||
'Forwarded': `for=${ctx.ip}`,
|
||||
'X-Forwarded-For': ctx.ip,
|
||||
'X-Forwarded-Proto': url.protocol.slice(0, -1),
|
||||
'X-Real-IP': ctx.ip,
|
||||
},
|
||||
},
|
||||
);
|
||||
const response = await this.axios.get(url.href, this.getConfig(ctx, url, config));
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
readonly textPost = async (ctx: Context, url: URL, data: unknown, config?: AxiosRequestConfig): Promise<string> => {
|
||||
this.logger.info(`Fetch post ${url}`);
|
||||
|
||||
const response = await this.axios.post(url.href, data, this.getConfig(ctx, url, config));
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
private readonly getConfig = (ctx: Context, url: URL, config?: AxiosRequestConfig): AxiosRequestConfig => {
|
||||
return {
|
||||
...config,
|
||||
headers: {
|
||||
...config?.headers,
|
||||
'User-Agent': this.createUserAgentForIp(ctx.ip),
|
||||
'Forwarded': `for=${ctx.ip}`,
|
||||
'X-Forwarded-For': ctx.ip,
|
||||
'X-Forwarded-Proto': url.protocol.slice(0, -1),
|
||||
'X-Real-IP': ctx.ip,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
private readonly createUserAgentForIp = (ip: string): string => {
|
||||
let userAgent = this.ipUserAgentCache.get(ip);
|
||||
if (userAgent) {
|
||||
|
|
|
|||
502
src/utils/__fixtures__/Fetcher/https:dropload.io978xyyxi3ldq.html
generated
Normal file
502
src/utils/__fixtures__/Fetcher/https:dropload.io978xyyxi3ldq.html
generated
Normal file
|
|
@ -0,0 +1,502 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Dropload - Revolution Video Hosting</title>
|
||||
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="theme-color" content="#FFF">
|
||||
<meta name="format-detection" conten="telephone=no">
|
||||
<link rel="apple-touch-icon" href="https://dropload.io/assets2/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="https://dropload.io/assets2/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="https://dropload.io/assets2/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<link rel="manifest" href="https://dropload.io/assets2/images/favicon/manifest.json">
|
||||
<link rel="icon" href="https://dropload.io/assets2/images/favicon/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
<link href="https://dropload.io/assets2/css/style.css?v=2" rel="stylesheet">
|
||||
<script src="https://code.jquery.com/jquery-3.2.1.min.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
<script src="https://dropload.io/assets2/js/bootstrap.bundle.min.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
<script src="https://dropload.io/assets2/js/xupload.js?v=13" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
<script src="https://dropload.io/assets2/js/app.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header class="header">
|
||||
<div class="container">
|
||||
<div class="row align-items-center flex-nowrap">
|
||||
<div class="col-auto d-lg-none me-auto">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn text-primary" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<i class="icon icon-menu icon-size-18"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
|
||||
<a href="/?op=registration" class="dropdown-item">Upload</a>
|
||||
|
||||
<a href="/make_money.html" class="dropdown-item">Earn money</a>
|
||||
<a href="/api.html" class="dropdown-item">Service API</a>
|
||||
<a href="/tos" class="dropdown-item">Terms and Conditions</a>
|
||||
<a href="/contact" class="dropdown-item">Contacts</a>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto me-lg-5">
|
||||
<a href="/">
|
||||
<img src="https://dropload.io/assets2/images/logo.svg" class="logo" alt="Dropload.io - ">
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto d-none d-lg-block">
|
||||
<nav class="nav">
|
||||
|
||||
<a href="/?op=registration" class="nav-link">Upload</a>
|
||||
|
||||
<a href="/make_money.html" class="nav-link">Earn money</a>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-auto d-none d-lg-block ms-auto">
|
||||
<a href="/login.html" class="btn login-btn me-2">
|
||||
<i class="icon icon-account me-2"></i>Login</a>
|
||||
<a href="/?op=registration" class="btn reg-btn">Create an Account</a>
|
||||
</div>
|
||||
|
||||
<div class="col-auto d-lg-none ms-auto">
|
||||
<div class="dropdown">
|
||||
<button class="btn icon-btn text-primary" data-bs-toggle="dropdown" data-bs-offset="0, 16">
|
||||
<i class="icon icon-account icon-size-18"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li>
|
||||
<a class="dropdown-item" href="/login.html">Login</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="dropdown-item" href="/?op=registration">Create an Account</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
|
||||
|
||||
<script src="https://dropload.io/js/jquery.cookie.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
|
||||
|
||||
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript">
|
||||
$.cookie('file_id', '1448116', { expires: 10 });
|
||||
$.cookie('aff', '5', { expires: 10 });
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<section class="mb-5 mb-lg-7">
|
||||
<div class="container">
|
||||
<div class="videoplayer">
|
||||
<div class="videoplayer-embed">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="pdiv" style="position: absolute;left:0;top:0;width: 100%;height:100%;">
|
||||
|
||||
<!-- Over player banner ADs code start here -->
|
||||
<!-- Over player banner ADs code end here -->
|
||||
|
||||
|
||||
<!--div id="adbd" class="overdiv">
|
||||
<div>Disable ADBlock plugin and allow pop-ups in your browser to watch video</div>
|
||||
</div-->
|
||||
|
||||
<!-- <div id="play_limit_box" class="d-flex flex-column justify-content-center p-3 text-center" style="position:absolute;left:0;top:0;width:100%;height:100%;background-color:rgba(0,0,0,.55);z-index:10;">
|
||||
<div class="mb-2">
|
||||
<a class="btn btn-gradient" href="/premium.html">Upgrade your account</a>
|
||||
</div>
|
||||
to watch videos with no limits!
|
||||
</div> -->
|
||||
|
||||
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript" src='https://dropload.io/player/jw8/jwplayer.js'></script>
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript">jwplayer.key="";</script>
|
||||
<style>
|
||||
.jw-text-track-cue {
|
||||
text-shadow: 1px 1px 2px transparent !important;
|
||||
line-height: 1.53em;
|
||||
padding-left: 0.3em !important;
|
||||
padding-right: 0.3em !important;
|
||||
padding-bottom: 0.2em !important;
|
||||
border-radius: 6px;
|
||||
}
|
||||
</style><script src="/js/localstorage-slim.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script><script src="https://dropload.io/js/dnsads.js?dfp=1&ad_code=2&adsrc=3" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src='/images/back2.jpg' style='width:100%;height:100%;'></div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<button type="button" class="btn lightdown"></button>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div class="lightdown-backdrop"></div>
|
||||
|
||||
<h1>Black Mirror S2 E4 1080p </h1>
|
||||
<div class="videoplayer-controlbar">
|
||||
<div class="row g-1">
|
||||
<div class="col-auto flex-grow-1 flex-shrink-1 mw-0">
|
||||
<div class="videoplayer-details">
|
||||
<div class="row align-items-center flex-nowrap">
|
||||
<div class="col-auto flex-shrink-1 mw-0">
|
||||
<div class="row flex-lg-nowrap">
|
||||
|
||||
|
||||
<div class="col-auto d-flex align-items-center">
|
||||
<i class="icon icon-clock icon-size-16 me-2 opacity-50"></i>
|
||||
on Apr 10, 2025
|
||||
</div>
|
||||
|
||||
<div class="col-auto d-flex align-items-center">
|
||||
<i class="icon icon-download2 icon-size-16 me-2 opacity-50"></i>
|
||||
<span id="size"></span>
|
||||
</div>
|
||||
<div class="col-auto d-flex align-items-center">
|
||||
<i class="icon icon-clock icon-size-16 me-2 opacity-50"></i>
|
||||
01:14:05
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto d-flex align-items-center">
|
||||
|
||||
<button class="btn icon-btn me-4" data-bs-toggle="modal" data-bs-target="#modal_addplaylist">
|
||||
<i class="icon icon-addlist icon-size-16"></i>
|
||||
</button>
|
||||
<button type="button" class="btn icon-btn text-danger" data-bs-toggle="modal" data-bs-target="#modal_flag">
|
||||
<i class="icon icon-flag icon-size-16"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-like border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=978xyyxi3ldq&v=up')" title="Like" data-cf-modified-a9bf83b31be3a1c8064935cd-="">
|
||||
<i class="icon icon-like icon-size-16 me-2"></i>
|
||||
<span id="likes_num">0</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-dislike border-0" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=978xyyxi3ldq&v=down')" title="Don't Like" data-cf-modified-a9bf83b31be3a1c8064935cd-="">
|
||||
<i class="icon icon-dislike icon-size-16 me-2"></i>
|
||||
<span id="dislikes_num">0</span>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mb-5">
|
||||
<div class="row justify-content-center justify-content-lg-between">
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-auto order-lg-last mb-3">
|
||||
<div class="dropdown">
|
||||
|
||||
<a class="btn btn-gradient videoplayer-download" data-bs-toggle="dropdown">
|
||||
|
||||
Download<i class="icon icon-download icon-size-20 ms-2"></i>
|
||||
|
||||
</a>
|
||||
|
||||
<div class="dropdown-menu w-100 py-0 shadow">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="https://dropload.io/d/978xyyxi3ldq_h" class="dropdown-item d-flex align-items-center">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="flex-grow-1 pe-3 text-white">
|
||||
<b>HD quality</b> <br> <span class="xsmall text-light">1920x1080, <span class="download-size">835.3 MB</span></span>
|
||||
</span>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="18"><defs><linearGradient id="a" x1="0%" x2="100%" y1="0%" y2="0%"><stop offset="0%" stop-color="#3DB6D4"/><stop offset="100%" stop-color="#6BCFA4"/></linearGradient></defs><path fill-rule="evenodd" fill="#3DB6D4" d="M13 6V0H7v6H2l8 8 8-8h-5ZM0 16h20v2H0v-2Z"/><path fill="url(#a)" d="M13 6V0H7v6H2l8 8 8-8h-5ZM0 16h20v2H0v-2Z"/></svg>
|
||||
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript">
|
||||
$(function(){
|
||||
var a = $('.dropdown-menu a:first-child .download-size');
|
||||
$('#size').append(a);
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="col-12 col-lg-7 mb-3">
|
||||
<div class="copybox">
|
||||
<textarea class="form-control copy-source" rows="6"><IFRAME SRC="https://dropload.io/e/978xyyxi3ldq" FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=640 HEIGHT=360 allowfullscreen></IFRAME></textarea>
|
||||
<button class="btn btn-primary" onclick="if (!window.__cfRLUnblockHandlers) return false; copy(this);" data-cf-modified-a9bf83b31be3a1c8064935cd-="">Copy</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<div class="modal fade" id="modal_flag" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5">Flag</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body pt-0">
|
||||
<form method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); } );return false;" data-cf-modified-a9bf83b31be3a1c8064935cd-="">
|
||||
<input type="hidden" name="op" value="report_file">
|
||||
<input type="hidden" name="file_code" value="978xyyxi3ldq">
|
||||
<div class="mb-3">
|
||||
<label class="form-label">Reason:</label>
|
||||
<select class="form-select" name="report_type">
|
||||
<option>Broken video</option>
|
||||
<option>Wrong title/description</option>
|
||||
<option>Copyright restriction</option>
|
||||
<option>Other</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<textarea name="report_info" class="form-control" rows="2" placeholder="Details"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<input type="submit" name="add" value="Send Report" class="btn btn-gradient submit-btn">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal_addplaylist" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5">Add to</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body pt-0">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="modal_share" tabindex="-1">
|
||||
<div class="modal-dialog modal-dialog-centered">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h1 class="modal-title fs-5">Share</h1>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body pt-0">
|
||||
|
||||
|
||||
Share code
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('1d("5x").5w({5v:{2i:"/5u/2l/2k-o.2l?v=3",q:"2k-o"},5t:[{2j:"13://5s.o.12/5r/5q/5p/5o/5n.5m?t=5l-5k&s=1z&e=5j&f=22&i=0.0&5i=0&5h=21.20.5g.5f"}],5e:"1j%",5d:"1j%",5c:"5b",5a:"59.58",57:\'56\',55:"y",a:[{2j:"/26?23=54&k=53&2i=13://2h.o.12/52.2g",51:"50"}],1s:{4z:1,2f:\'#4y\',4x:\'#4w\',4v:"4u",4t:30,4s:\'1j\',},\'4r\':{"4q":"4p"},4o:"4n",4m:"13://o.12/",4l:{},4k:y,1r:[1,1.25,1.5,2],4j:\'13://2h.o.12/4i.2g\'}).g(\'1t\',8(){d n=2d.4h("11");n.4g="n";n.2e(\'4f\',\'4-1i 4-1i-4e 4-2c-2f 4-4d 4-1i-4c\');n.2e(\'4b\',\'6.1c(6.4a()+10)\');2d.49(\'.4-2c-48\').47(n)});d 1g,1h;d 46=0,45=0;d 6=1d();d 2a=0,44=0,43=0,j=0;$.42({41:{\'40-3z\':\'3y-3x\'}});6.g(\'3w\',8(x){9(5>0&&x.p>=5&&1h!=1){1h=1;$(\'11.3v\').3u(\'3t\')}9(x.p>=j+5||x.p<j){j=x.p;1f.3s(\'1e\',3r.3q(j),{3p:2b*2b*24*7})}});6.g(\'1c\',8(x){2a=x.p});6.g(\'3o\',8(x){29(x)});6.g(\'3n\',8(){$(\'11.28\').3m();1f.3l(\'1e\')});6.g(\'3k\',8(x){});8 29(x){$(\'11.28\').27();$(\'#3j\').27();9(1g)15;1g=1;z=0;9(3i.3h===3g){z=1}$.1x(\'/26?23=3f&3e=3d&3c=22-21-20-1z-3b&3a=&z=\'+z,8(1y){$(\'#39\').38(1y)});d j=1f.1x(\'1e\');9(j>0){1d().1c(j)}}8 37(){d a=6.16(1w);1v.1u(a);9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1w){1v.1u(\'!!=\'+i);6.1k(i)}}}}6.g(\'1t\',8(){});6.g("h",8(r){d a=6.16();9(a.k<2)15;$(\'.4-c-36-35\').34(8(){$(\'#4-c-b-h\').19(\'4-c-b-u\');$(\'.4-b-h\').m(\'l-1a\',\'w\')});6.33("/32/31.2z","2y 2x",8(){$(\'.4-1q\').2w(\'4-c-1p\');$(\'.4-c-1s, .4-c-1r\').m(\'l-1b\',\'w\');9($(\'.4-1q\').2v(\'4-c-1p\')){$(\'.4-b-h\').m(\'l-1b\',\'y\');$(\'.4-b-h\').m(\'l-1a\',\'y\');$(\'.4-c-b-2u\').19(\'4-c-b-u\');$(\'.4-c-b-h\').2t(\'4-c-b-u\')}2s{$(\'.4-b-h\').m(\'l-1b\',\'w\');$(\'.4-b-h\').m(\'l-1a\',\'w\');$(\'.4-c-b-h\').19(\'4-c-b-u\')}},"2r");6.g("2q",8(r){18.2p(\'17\',r.a[r.2o].q)});9(18.1o(\'17\')){2n("1n(18.1o(\'17\'));",2m)}});d 14;8 1n(1l){d a=6.16();9(a.k>1){1m(i=0;i<a.k;i++){9(a[i].q==1l){9(i==14){15}14=i;6.1k(i)}}}}',36,214,'||||jw||player||function|if|tracks|submenu|settings|var|||on|audioTracks||lastt|length|aria|attr|newButton|dropload|position|name|event|||active||false||true|adb||div|io|https|current_audio|return|getAudioTracks|default_audio|localStorage|removeClass|expanded|checked|seek|jwplayer|tt978xyyxi3ldq|ls|vvplay|vvad|icon|100|setCurrentAudioTrack|audio_name|for|audio_set|getItem|open|controls|playbackRates|captions|ready|log|console|track_name|get|data|1747217151|61|130|1448116|op|||dl|hide|video_ad|doPlay|prevt|60|button|document|setAttribute|color|jpg|img|url|file|jw8|css|300|setTimeout|currentTrack|setItem|audioTrackChanged|dualSound|else|addClass|quality|hasClass|toggleClass|Track|Audio|svg||dualy|images|addButton|mousedown|buttons|topbar|set_audio_track|html|fviews|embed|d4934d3a59c73c7efe2e9da5b2898e4a|hash|978xyyxi3ldq|file_code|view|undefined|cRAds|window|over_player_msg|pause|remove|show|complete|play|ttl|round|Math|set|slow|fadeIn|video_ad_fadein|time|cache|no|Cache|Content|headers|ajaxSetup|v2done|tott|vastdone2|vastdone1|appendChild|container|querySelector|getPosition|onclick|forward|reset|inline|class|id|createElement|978xyyxi3ldq_xt|image|playbackRateControls|cast|aboutlink|DropLoad|abouttext|HD|1570|qualityLabels|fontOpacity|backgroundOpacity|Tahoma|fontFamily|303030|backgroundColor|FFFFFF|userFontScale|thumbnails|kind|978xyyxi3ldq0000|4445|get_slides|androidhls|metadata|preload|63|4444|duration|uniform|stretching|height|width|204|236|ii|sp|14400|zgcmoXiSQ6rkMu7qHrSpN_pWOc95IPYwk|unq9qxjYC|m3u8|master|978xyyxi3ldq_h|00289|01|hls2|srv24|sources|assets2|skin|setup|vplayer'.split('|')))
|
||||
</script>
|
||||
|
||||
<style media="screen">
|
||||
.lightdown {
|
||||
position: absolute;
|
||||
top: 20px;
|
||||
right: 20px;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cpath fill-rule='evenodd' fill='%23FFF' d='M10 20c-1.654 0-3-1.346-3-3v-.531c0-.625-.254-1.237-.695-1.679l-.548-.548A5.96 5.96 0 0 1 4 10c0-1.603.624-3.109 1.757-4.243A5.961 5.961 0 0 1 10 4a5.96 5.96 0 0 1 4.242 1.757A5.96 5.96 0 0 1 16 10a5.957 5.957 0 0 1-1.758 4.242l-.546.547a2.396 2.396 0 0 0-.696 1.68V17c0 1.654-1.346 3-3 3Zm-1.025-4c.017.154.025.311.025.469V17a1.001 1.001 0 0 0 2 0v-.531c0-.158.008-.315.024-.469H8.975Zm-.737-2h3.524c.152-.222.325-.431.519-.624l.546-.547A3.974 3.974 0 0 0 14 10a3.975 3.975 0 0 0-1.172-2.829c-1.512-1.51-4.146-1.51-5.657 0A3.978 3.978 0 0 0 6 10c0 1.068.416 2.072 1.171 2.828h.001l.547.548c.194.194.367.402.519.624ZM19 11h-1a1 1 0 1 1 0-2h1a1 1 0 1 1 0 2ZM2 11H1a1 1 0 1 1 0-2h1a1 1 0 0 1 0 2Zm13.657-5.657a.999.999 0 0 1-.707-1.707l.707-.707a1 1 0 0 1 1.414 1.414l-.707.707a.993.993 0 0 1-.707.293Zm-11.314 0a.993.993 0 0 1-.707-.293l-.707-.707a.999.999 0 1 1 1.414-1.414l.707.707a.999.999 0 0 1-.707 1.707ZM10 3a1 1 0 0 1-1-1V1a1 1 0 0 1 2 0v1a1 1 0 0 1-1 1Z'/%3E%3C/svg%3E") no-repeat center;
|
||||
background-color: rgba(28,37,52,.75);
|
||||
transition: .25s;
|
||||
opacity: 0;
|
||||
}
|
||||
.videoplayer-embed:hover .lightdown {
|
||||
opacity: 1;
|
||||
}
|
||||
.body-lightdown .lightdown {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20'%3E%3Cpath fill-rule='evenodd' fill='%233DB6D4' d='M10 20c-1.654 0-3-1.346-3-3v-.531c0-.625-.254-1.237-.695-1.679l-.548-.548A5.96 5.96 0 0 1 4 10c0-1.603.624-3.109 1.757-4.243A5.961 5.961 0 0 1 10 4a5.96 5.96 0 0 1 4.242 1.757A5.96 5.96 0 0 1 16 10a5.957 5.957 0 0 1-1.758 4.242l-.546.547a2.396 2.396 0 0 0-.696 1.68V17c0 1.654-1.346 3-3 3Zm-1.025-4c.017.154.025.311.025.469V17a1.001 1.001 0 0 0 2 0v-.531c0-.158.008-.315.024-.469H8.975Zm-.737-2h3.524c.152-.222.325-.431.519-.624l.546-.547A3.974 3.974 0 0 0 14 10a3.975 3.975 0 0 0-1.172-2.829c-1.512-1.51-4.146-1.51-5.657 0A3.978 3.978 0 0 0 6 10c0 1.068.416 2.072 1.171 2.828h.001l.547.548c.194.194.367.402.519.624ZM19 11h-1a1 1 0 1 1 0-2h1a1 1 0 1 1 0 2ZM2 11H1a1 1 0 1 1 0-2h1a1 1 0 0 1 0 2Zm13.657-5.657a.999.999 0 0 1-.707-1.707l.707-.707a1 1 0 0 1 1.414 1.414l-.707.707a.993.993 0 0 1-.707.293Zm-11.314 0a.993.993 0 0 1-.707-.293l-.707-.707a.999.999 0 1 1 1.414-1.414l.707.707a.999.999 0 0 1-.707 1.707ZM10 3a1 1 0 0 1-1-1V1a1 1 0 0 1 2 0v1a1 1 0 0 1-1 1Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
.lightdown-backdrop {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,.9);
|
||||
display: none;
|
||||
z-index: 1999;
|
||||
}
|
||||
.body-lightdown .lightdown-backdrop {
|
||||
display: block;
|
||||
}
|
||||
.body-lightdown .videoplayer-embed {
|
||||
z-index: 2000;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script type="a9bf83b31be3a1c8064935cd-text/javascript">
|
||||
$('.lightdown').on('click', function(){
|
||||
$('body').toggleClass('body-lightdown');
|
||||
})
|
||||
</script>
|
||||
|
||||
<Script type="a9bf83b31be3a1c8064935cd-text/javascript">
|
||||
$("#embed_div textarea").focus(function (){ $(this).select(); })
|
||||
var tab_cookie='tab_down';
|
||||
|
||||
$('ul.tabs').on('click', 'li:not(.current)', function() {
|
||||
$(this).addClass('current').siblings().removeClass('current')
|
||||
.parents('div.section').find('div.box').eq($(this).index()).fadeIn(150).siblings('div.box').hide();
|
||||
});
|
||||
|
||||
$("#iew,#ieh").change(function (){
|
||||
var ww = $("#iew").val();
|
||||
var hh = $("#ieh").val();
|
||||
ww = ww.replace(/\D/g,'');
|
||||
hh = hh.replace(/\D/g,'');
|
||||
if(!ww)ww=640;
|
||||
if(!hh)hh=360;
|
||||
tt = $("#iet").val();
|
||||
tt = tt.replace(/ WIDTH=\d+ HEIGHT=\d+ /,' WIDTH='+ww+' HEIGHT='+hh+' ');
|
||||
$("#iet").val(tt);
|
||||
});
|
||||
|
||||
|
||||
</Script>
|
||||
<script src="https://dropload.io/js/tabber.js" type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
|
||||
|
||||
<Script type="a9bf83b31be3a1c8064935cd-text/javascript">
|
||||
$(function() {
|
||||
|
||||
});
|
||||
</Script>
|
||||
<script data-cfasync="false" async type="text/javascript" src="//sx.impubicpuddly.com/rO7FQr7AANJdtg/111561"></script>
|
||||
<script src='https://dropload.io/tag2.js' type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
<script src='https://dropload.io/tag1.js' type="a9bf83b31be3a1c8064935cd-text/javascript"></script>
|
||||
|
||||
|
||||
<!-- Javascript Alt Ads code start -->
|
||||
<!-- Javascript Alt Ads code end -->
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container">
|
||||
<div class="row text-center text-lg-start flex-lg-nowrap">
|
||||
<div class="col">
|
||||
<div class="mb-3">
|
||||
<a href="/">
|
||||
<img src="https://dropload.io/assets2/images/logo.svg" alt="">
|
||||
</a>
|
||||
</div>
|
||||
<div class="text-muted mb-4 small">© 2025 Dropload - Revolution Video Hosting. All rights reserved.</div>
|
||||
</div>
|
||||
<div class="col d-none d-lg-block">
|
||||
<div class="nav flex-column mb-3">
|
||||
<a href="/faq" class="nav-link">FAQ</a>
|
||||
<a href="/contact" class="nav-link">Contact Us</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-none d-lg-block">
|
||||
<div class="nav flex-column mb-3">
|
||||
<a href="/tos" class="nav-link">Terms of service</a>
|
||||
<a href="#" class="nav-link">Privacy Policy</a>
|
||||
<a href="#" class="nav-link">Copyright Policy</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-none d-lg-block">
|
||||
<div class="nav flex-column mb-3">
|
||||
<a href="/api.html" class="nav-link">API</a>
|
||||
<a href="/make_money.html" class="nav-link">Make Money</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
||||
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="a9bf83b31be3a1c8064935cd-|49" defer></script></body>
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
1481
src/utils/__fixtures__/Fetcher/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html
generated
Normal file
1481
src/utils/__fixtures__/Fetcher/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html
generated
Normal file
File diff suppressed because one or more lines are too long
410
src/utils/__fixtures__/Fetcher/https:supervideo.ccanf0clp2vb6y.html
generated
Normal file
410
src/utils/__fixtures__/Fetcher/https:supervideo.ccanf0clp2vb6y.html
generated
Normal file
|
|
@ -0,0 +1,410 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>
|
||||
|
||||
Watch Black Mirror 1080p
|
||||
|
||||
</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta name="description" content="Watch video Black Mirror 1080p">
|
||||
<meta name="keywords" content="black, mirror, 1080p">
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" href="https://supervideo.cc/assets/css/style.css?v=130">
|
||||
<!-- jsdata -->
|
||||
<script src="https://supervideo.cc/assets/js/libs.min.js?v=2" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<script src="https://supervideo.cc/assets/js/common.js?v=2" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<script src="https://supervideo.cc/js/xupload.js?v=4" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<!-- favicon -->
|
||||
<link rel="apple-touch-icon" href="https://supervideo.cc/assets/images/favicon/apple-touch-icon.png" sizes="180x180">
|
||||
<link rel="icon" href="https://supervideo.cc/assets/images/favicon/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" href="https://supervideo.cc/assets/images/favicon/favicon-16x16.png" sizes="16x16">
|
||||
<!-- <link rel="manifest" href="https://supervideo.cc/assets/images/favicon/manifest.json">-->
|
||||
<link rel="icon" href="https://supervideo.cc/assets/images/favicon/favicon.ico">
|
||||
</head>
|
||||
|
||||
<body class="
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
">
|
||||
<header class="header">
|
||||
<div class="container-fluid">
|
||||
<div class="header__bar flex-start">
|
||||
<div class="flex-grow-1">
|
||||
<a href="/" class="logo"></a>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="header__right"><a href="/login.html" class="btn btn_border_default header__btn">
|
||||
Login
|
||||
</a><a href="/?op=registration" class="btn btn_secondary header__btn">
|
||||
Sign Up
|
||||
</a></div>
|
||||
<div class="header-mobile">
|
||||
<button type="button" class="btn-toggle" data-toggle="dropdown">
|
||||
<i class="icon icon_user icon_size_18"></i>
|
||||
</button>
|
||||
<div class="dropdown-menu dropdown-menu-right header-mobile__dropdown-menu">
|
||||
<a href="/login.html" class="btn btn_block btn_border_default">
|
||||
Login
|
||||
</a><a href="/?op=registration" class="btn btn_block btn_secondary">
|
||||
Sign Up
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
.modal {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.download-codes__copy {
|
||||
position: relative;
|
||||
margin-bottom: 15px;
|
||||
margin-top: 10px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
.download__player {
|
||||
position: relative;
|
||||
padding-top: 56.25%;
|
||||
}
|
||||
|
||||
.download__info-item {
|
||||
margin-bottom: 15px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.download__info-item a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.download__info-tags {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.downloadbox__dropdown-menu li a {
|
||||
-webkit-flex-wrap: nowrap;
|
||||
-ms-flex-wrap: nowrap;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
.downloadbox__quality {
|
||||
margin-right: 5px;
|
||||
}
|
||||
.downloadbox__size {font-size: 13px;}
|
||||
</style>
|
||||
|
||||
|
||||
<!--100% ads-->
|
||||
<script src="/9271593.js" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<script src="/9271609.js" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<script data-cfasync="false" async type="text/javascript" src="//zm.nostocbark.com/rljPIWhbr4xr/115547"></script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script language="JavaScript" type="6bbf278747c567e60b6f7e9a-text/javascript" CHARSET="UTF-8" src="https://supervideo.cc/js/jquery.cookie.js"></script>
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript">
|
||||
$.cookie('file_id', '2439705', { expires: 10 });
|
||||
$.cookie('aff', '53', { expires: 10 });
|
||||
|
||||
</script>
|
||||
|
||||
<div class="container-fluid">
|
||||
|
||||
|
||||
|
||||
<div class="download">
|
||||
<div class="download__top" style="background-image: url(https://supervideo.cc/assets/images/bg_download.png);">
|
||||
<div class="container">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="download__player">
|
||||
<div class="overlay " >
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript" src='https://supervideo.cc/player8/jwplayer.js'></script>
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript">jwplayer.key="9dOyFG96QFb9AWbR+FhhislXHfV1gIhrkaxLYfLydfiYyC0s";</script>
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-46849459-36" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript">
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', 'UA-46849459-36');
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="https://supervideo.cc/assets/player/myskinfile.css?v=11">
|
||||
<script src="https://supervideo.cc/js/pop.js" type="6bbf278747c567e60b6f7e9a-text/javascript"></script>
|
||||
<div id='vplayer' style="width:100%;height:100%;text-align:center;"><img src="https://i.serversicuro.cc/anf0clp2vb6y_xt.jpg" style="width:100%;height:100%;"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-sm-8 mr-auto">
|
||||
<h1 class="download__title">
|
||||
Black Mirror S2 E4 1080p
|
||||
</h1>
|
||||
<ul class="download__info">
|
||||
<li><i class="icon icon_clock icon_align_left"></i>
|
||||
on
|
||||
Apr 10, 2025
|
||||
</li>
|
||||
<li><i class="icon icon_user icon_align_left"></i><a href="/users/dima123">
|
||||
dima123
|
||||
</a></li>
|
||||
<li><i class="icon icon_eye icon_align_left"></i>
|
||||
611 views
|
||||
</li>
|
||||
<li><button type="button" class="btn download__flag" data-toggle="modal" data-target="#vid-flag"><i class="icon icon_flag"></i></button>
|
||||
<div class="modal fade" id="vid-flag" tabindex="-1" role="dialog" aria-labelledby="modal-title" aria-hidden="true">
|
||||
<div class="modal-dialog modal-dialog-centered" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="modal-title">Flag:</h5>
|
||||
<button type="button" class="modal-close" data-dismiss="modal" aria-label="Close">
|
||||
<i class="icon icon_round-close icon_size_20"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="modal-body" id="id_flag">
|
||||
<form class="form" method="POST" action="/" onsubmit="if (!window.__cfRLUnblockHandlers) return false; $.post('/',$(this).serialize(),function(code){ eval(code); $('#id_flag').wrapInner('<span></span>').addClass('alert alert-success'); } );return false;" data-cf-modified-6bbf278747c567e60b6f7e9a-="">
|
||||
<input type="hidden" name="op" value="report_file">
|
||||
<input type="hidden" name="file_code" value="anf0clp2vb6y">
|
||||
<div class="form__group">
|
||||
<label class="form__label">
|
||||
Reason
|
||||
</label>
|
||||
<select class="input" name="report_type">
|
||||
<option>
|
||||
Broken video
|
||||
</option>
|
||||
<option>
|
||||
Wrong title/description
|
||||
</option>
|
||||
<option>
|
||||
Copyright restriction
|
||||
</option>
|
||||
<option>
|
||||
Other
|
||||
</option>
|
||||
</select></div>
|
||||
<div class="form__group">
|
||||
<textarea name="report_info" class="input" id="msg" rows="2" placeholder="Details"></textarea>
|
||||
</div>
|
||||
<input type="submit" name="add" value="Send Report" class="btn btn_primary">
|
||||
<button type="submit" class="btn btn_default" data-dismiss="modal">Cancel</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-auto">
|
||||
<ul class="download-social">
|
||||
<li><a class="download-social__item download-social__item_facebook" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Facebook', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://www.facebook.com/sharer/sharer.php?u=/anf0clp2vb6y" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i class="icon icon_facebook"></i></a></li>
|
||||
<li><a class="download-social__item download-social__item_twitter" onclick="if (!window.__cfRLUnblockHandlers) return false; window.open(this.href, 'Share Twitter', 'width=640,height=436,toolbar=0,status=0'); return false" href="https://twitter.com/intent/tweet?text=Black Mirror S2 E4 1080p" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i class="icon icon_twitter"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class="dowonload-rating" id="vote">
|
||||
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_plus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=anf0clp2vb6y&v=up')" title="Like" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i
|
||||
class="icon icon_like icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="likes_num">
|
||||
0
|
||||
</span></button>
|
||||
<span class="dowonload-rating__divider"></span>
|
||||
<button type="button" class="btn dowonload-rating__btn dowonload-rating__btn_minus" onclick="if (!window.__cfRLUnblockHandlers) return false; return jah('/?op=vote&file_code=anf0clp2vb6y&v=down')" title="Don't Like" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i
|
||||
class="icon icon_dislike icon_align_left icon-size_20 dowonload-rating__icon"></i><span id="dislikes_num">
|
||||
0
|
||||
</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center">
|
||||
|
||||
|
||||
<div class="col-sm-auto">
|
||||
|
||||
<div class="downloadbox">
|
||||
<a href="#" data-toggle="dropdown" class="downloadbox__btn"> <i class="icon icon_download downloadbox__icon"></i> <span> <strong class="downloadbox__title">FREE DOWNLOAD</strong> Click to start Download </span> </a>
|
||||
<ul class="dropdown-menu downloadbox__dropdown-menu">
|
||||
|
||||
<li>
|
||||
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('anf0clp2vb6y','o','2439705-130-61-1747217153-c5b4a3d62fffc348bd3b488a1b84c122')" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i
|
||||
class="icon icon_download icon_size_18 icon_align_left"></i><b class="downloadbox__quality">
|
||||
Original
|
||||
</b><span class="downloadbox__size">
|
||||
1920x1080, 835.3 MB
|
||||
</span></a>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<a href="#" onclick="if (!window.__cfRLUnblockHandlers) return false; download_video('anf0clp2vb6y','n','2439705-130-61-1747217153-c5b4a3d62fffc348bd3b488a1b84c122')" data-cf-modified-6bbf278747c567e60b6f7e9a-=""><i
|
||||
class="icon icon_download icon_size_18 icon_align_left"></i><b class="downloadbox__quality">
|
||||
Normal quality
|
||||
</b><span class="downloadbox__size">
|
||||
1920x1080, 835.3 MB
|
||||
</span></a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 order-2 order-lg-1">
|
||||
|
||||
</div>
|
||||
<div class="col-lg-4 order-1 order-lg-2">
|
||||
<div class="dsh-block">
|
||||
<ul class="dsh-block__tabs nav">
|
||||
<li><a class="active" data-toggle="tab" href="#tab-link">
|
||||
Download Link
|
||||
</a></li>
|
||||
<li><a data-toggle="tab" href="#tab-forum">
|
||||
Forum Code
|
||||
</a></li>
|
||||
<li><a data-toggle="tab" href="#tab-html">HTML</a></li>
|
||||
<li><a data-toggle="tab" href="#tab-embed">Embed</a></li>
|
||||
</ul>
|
||||
<div class="dsh-block__body tab-content clearfix">
|
||||
<div class="tab-pane fade show active" id="tab-link">
|
||||
<div class="download-codes js-codes">
|
||||
<textarea class="input download-codes__area">/anf0clp2vb6y</textarea>
|
||||
<button type="button" class="btn btn_link btn_sm download-codes__copy js-copy-codes"><i class="icon icon_copy icon_align_left"></i><span>Copy</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab-forum">
|
||||
<div class="download-codes js-codes">
|
||||
<textarea class="input download-codes__area">[URL=/anf0clp2vb6y][IMG]https://i.serversicuro.cc/anf0clp2vb6y_t.jpg[/IMG]
|
||||
Black Mirror S2 E4 1080p[/URL]
|
||||
[1920x1080, 01:14:04]</textarea>
|
||||
<button type="button" class="btn btn_link btn_sm download-codes__copy js-copy-codes"><i class="icon icon_copy icon_align_left"></i><span>Copy</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab-html">
|
||||
<div class="download-codes js-codes">
|
||||
<textarea
|
||||
class="input download-codes__area"><a href="/anf0clp2vb6y"><img src="https://i.serversicuro.cc/anf0clp2vb6y_t.jpg" border=0><br>Black Mirror S2 E4 1080p</a><br>[1920x1080, 01:14:04]</textarea>
|
||||
<button type="button" class="btn btn_link btn_sm download-codes__copy js-copy-codes"><i class="icon icon_copy icon_align_left"></i><span>Copy</span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab-embed">
|
||||
<div class="form__group">
|
||||
<div class="row align-items-center text-center justify-content-center">
|
||||
<div class="col-12">
|
||||
<label class="form__label">Embed size: </label>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class="row no-gutters align-items-center">
|
||||
<div class="col-auto">
|
||||
<input type="text" class="input" id="iew" value="640" size="3">
|
||||
</div>
|
||||
<div class="col-auto text-muted"><i class="icon icon_close icon_size_8 icon_align_left icon_align_right"></i></div>
|
||||
<div class="col-auto"><input class="input" type="text" id="ieh" value="360" size="3"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="download-codes js-codes">
|
||||
<textarea id="iet" class="input download-codes__area"><div style="position:relative;padding-bottom:56%;padding-top:20px;height:0;"><irame src="/e/anf0clp2vb6y" frameborder=0 marginwidth=0 marginheight=0 scrolling=no width=640 height=360 allowfullscreen style="position:absolute;top:0;left:0;width:100%;height:100%;"></iframe></div></textarea>
|
||||
<button type="button" class="btn btn_link btn_sm download-codes__copy js-copy-codes"><i class="icon icon_copy icon_align_left"></i><span>Copy</span></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript">eval(function(p,a,c,k,e,d){while(c--)if(k[c])p=p.replace(new RegExp('\\b'+c.toString(a)+'\\b','g'),k[c]);return p}('e("3o").3n({3m:[{m:"6://3l.n.4/3k/3j,3i,3h,.3g/3f.3e"}],3d:"6://i.n.4/3c.10",3b:"14%",3a:"14%",39:"38",37:"13.11",36:\'35\',34:"l",33:"l",32:"31",30:"2z",2y:[0.25,0.5,0.2x,1,1.25,1.5,2],2w:{2v:"2u"},2t:[{m:"/2s?t=2r&2q=13.11&2p=6://i.n.4/2o.10",2n:"2m"}],2l:{2k:\'#2j\',2i:12,2h:"2g",2f:0,2e:\'2d\',2c:2b},2a:"29",28:"",27:{m:"6://d.4/r/26.q",24:"6://d.4/c",8:"o-23",22:"5",u:l},21:{}});k f,j,h=0;k 20=0,1z=0;k 7=e();7.9(\'1y\',3(x){b(5>0&&x.8>=5&&j!=1){j=1;$(\'g.1x\').1w(\'1v\')}b(h==0&&x.8>=z&&x.8<=(z+2)){h=x.8}});7.9(\'1u\',3(x){y(x)});7.9(\'1t\',3(){$(\'g.w\').1s()});3 y(x){$(\'g.w\').u();b(f)1r;f=1;a=0;b(p.1q===1p){a=1}$.1o(\'/1n?t=1m&1l=c&1k=1j-1i-1h-1g-1f&1e=&a=\'+a,3(s){$(\'#1d\').1c(s)})}7.9(\'1b\',3(){});e().1a("6://d.4/r/19.q","18",3(){p.o.17.16=\'/v/c\'},"15");',36,133,'|||function|cc||https|player|position|on|adb|if|anf0clp2vb6y|supervideo|jwplayer|vvplay|div|x2ok||vvad|var|true|file|serversicuro|top|window|png|images|data|op|hide||video_ad||doPlay|1111|jpg|65||4444|100|download11|href|location|Download|download2|addButton|ready|html|fviews|embed|9d45c4afea3131f7d8803f923d82d737|1747217151|61|130|2439705|hash|file_code|view|dl|get|undefined|cRAds|return|show|complete|play|slow|fadeIn|video_ad_fadein|time|vastdone2|vastdone1|cast|margin|right|link||logo_p|logo|aboutlink|xvs|abouttext|90|fontOpacity|none|edgeStyle|backgroundOpacity|Verdana|fontFamily|fontSize|FFFFFF|color|captions|thumbnails|kind|anf0clp2vb6y0000|url|length|get_slides|dlf|tracks|myskin|name|skin|75|playbackRateControls|start|startparam|html5|primary|hlshtml|androidhls|metadata|preload|duration|uniform|stretching|height|width|anf0clp2vb6y_xt|image|m3u8|master|urlset|obtfascykj3vna7rk5a|khdhascykjrixs7huqq|dnzpdeoe5xg4a3gyvaqx5ojpswtxjd5a22rklgah7|hls|hfs309|sources|setup|vplayer'.split('|')))
|
||||
</script>
|
||||
<script type="6bbf278747c567e60b6f7e9a-text/javascript">
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<footer class="footer">
|
||||
<div class="container-fluid">
|
||||
<div class="footer__copyright">© 2017 - 2025 SuperVideo | Fast HLS Video Streaming Service
|
||||
</div>
|
||||
<ul class="footer__menu">
|
||||
<li><a href="">
|
||||
Home
|
||||
</a></li>
|
||||
|
||||
|
||||
<li><a href="/faq">
|
||||
FAQ
|
||||
</a></li>
|
||||
<li><a href="/tos">
|
||||
Terms of service
|
||||
</a></li>
|
||||
|
||||
|
||||
<li><a href="/premium">
|
||||
Trust Uploader
|
||||
</a></li>
|
||||
|
||||
|
||||
<li><a href="/make_money.html">
|
||||
Make Money
|
||||
</a></li>
|
||||
<li><a href="/checkfiles.html">
|
||||
Link Checker
|
||||
</a></li>
|
||||
<li><a href="/contacts">
|
||||
Contact Us
|
||||
</a></li>
|
||||
</ul>
|
||||
<div class="text-center" style="padding-top: 8px;">
|
||||
<!-- <a href="http://www.xvstheme.com/" rel="nofollow" title="Designed by XVSTheme" class="small text-reset" style="display:inline-flex; align-items: center">
|
||||
<span style="margin-right: 4px;">Designed by</span>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="78.1" height="11" viewBox="0 0 78.1 11" xml:space="preserve"><path d="M73.5 7.5h-5.7c0 1.2.7 1.9 1.8 1.9.8 0 1.4-.4 1.6-1h2.4c-.6 1.7-1.9 2.6-3.9 2.6-2.8 0-4.2-1.4-4.2-4.1 0-2.8 1.3-4.1 4.1-4.1 2.7 0 4 1.3 4 3.8 0 .3 0 .6-.1.9zm-3.9-3.1c-1.1 0-1.6.4-1.7 1.6h3.4c-.2-1.1-.7-1.6-1.7-1.6zM62 6.3c0-1-.4-1.4-1.3-1.4-1 0-1.5.5-1.5 1.6v4.2h-2.3V6.3c0-1-.4-1.4-1.3-1.4-1 0-1.5.5-1.5 1.6v4.2h-2.3V3.1l2.1-.1.2 1c.4-.7 1.2-1.1 2.2-1.1 1.3 0 2.2.5 2.6 1.4.5-.9 1.3-1.4 2.5-1.4 2 0 3 1.1 3 3.4v4.5H62V6.3zM44.6 7.5c0 1.2.7 1.9 1.8 1.9.8 0 1.4-.4 1.6-1h2.4c-.5 1.7-1.8 2.6-3.8 2.6-2.8 0-4.2-1.4-4.2-4.1 0-2.8 1.3-4.1 4.1-4.1 2.7 0 4 1.3 4 3.8 0 .3 0 .6-.1.9h-5.8zm1.8-3.1c-1.1 0-1.6.4-1.7 1.6H48c-.1-1.1-.6-1.6-1.6-1.6zm-7.6 1.9c0-1-.4-1.4-1.4-1.4-1.2 0-1.6.5-1.6 1.6v4.2h-2.3V0h2.3v3.8c.4-.6 1.2-1 2.2-1 2.1 0 3.1 1.1 3.1 3.4v4.5h-2.4c.1.1.1-4.4.1-4.4zM27.4 7.6V5.2h-1.1V3.5l1.1-.4V1.4h2.3v1.7H32v2.1h-2.3v2.3c0 .9.3 1.2 1.2 1.2h1v2.1h-1.3c-2.3 0-3.2-.9-3.2-3.2zm-4.6-1.5c2.2.4 2.8.9 2.8 2.4S24.1 11 22 11c-2.4 0-3.8-.9-4.1-2.6h2.3c.2.6.7 1 1.7 1 .8 0 1.3-.4 1.3-.8 0-.5-.2-.7-1.2-.8l-1.5-.2c-1.8-.3-2.6-1-2.6-2.1C17.9 4 19.3 3 21.5 3c2.3 0 3.7.9 3.8 2.4h-2.4c-.1-.5-.7-.8-1.6-.8-.7 0-1.2.3-1.2.8 0 .4.2.6 1 .7.3-.1 1.7 0 1.7 0zM13.2 11c-2.2 0-3.1-1-3.5-3.5L9 3.1h2.3l.7 4.3c.2 1.1.5 1.5 1.2 1.5s1-.4 1.2-1.5l.6-4.3h2.4l-.7 4.4c-.4 2.5-1.4 3.5-3.5 3.5zm-7.3-.2L4.4 8.4l-1.6 2.3H0l2.8-3.9L.1 3.1h2.8l1.4 2.3 1.4-2.3h2.8L6 6.9l2.8 3.9H5.9z" fill="#000222"/><path d="M78.1 8.7h-2.6V11h2.6V8.7z" fill="#28e98c"/></svg>
|
||||
</a> -->
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="6bbf278747c567e60b6f7e9a-|49" defer></script></body>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -17,4 +17,18 @@ export class Fetcher {
|
|||
return text;
|
||||
}
|
||||
};
|
||||
|
||||
readonly textPost = async (_ctx: Context, url: URL, data: unknown, config?: AxiosRequestConfig): Promise<string> => {
|
||||
const path = `${__dirname}/../__fixtures__/Fetcher/post-${slugify(url.href)}-${slugify(JSON.stringify(data))}`;
|
||||
|
||||
if (fs.existsSync(path)) {
|
||||
return fs.readFileSync(path).toString();
|
||||
} else {
|
||||
const text = (await Axios.create().post(url.href, data, config)).data;
|
||||
|
||||
fs.writeFileSync(path, text);
|
||||
|
||||
return text;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue