feat(extractor): implement Uqload via MediaFlow Proxy

This commit is contained in:
WebStreamr 2025-06-23 12:35:35 +00:00
parent fca2841ce0
commit ab588a1501
No known key found for this signature in database
5 changed files with 542 additions and 2 deletions

View file

@ -0,0 +1,21 @@
import winston from 'winston';
import { FetcherMock } from '../utils';
import { CountryCode } from '../types';
import { ExtractorRegistry } from './ExtractorRegistry';
import { Uqload } from './Uqload';
import { createTestContext } from '../test';
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
const extractorRegistry = new ExtractorRegistry(logger, [new Uqload(new FetcherMock(`${__dirname}/__fixtures__/Uqload`))]);
const ctx = createTestContext({ mediaFlowProxyUrl: 'https://mediaflow-proxy.test', mediaFlowProxyPassword: 'asdfg' });
describe('Uqload', () => {
test('uqload.net /embed-', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://uqload.net/embed-z0xbr87oz637.html'), CountryCode.fr)).toMatchSnapshot();
});
test('uqload.net /', async () => {
expect(await extractorRegistry.handle(ctx, new URL('https://uqload.net/z0xbr87oz637.html'), CountryCode.fr)).toMatchSnapshot();
});
});

54
src/extractor/Uqload.ts Normal file
View file

@ -0,0 +1,54 @@
import * as cheerio from 'cheerio';
import { Extractor } from './Extractor';
import { buildMediaFlowProxyUrl, Fetcher, hasMediaFlowProxy } from '../utils';
import { Context, CountryCode, Format, UrlResult } from '../types';
export class Uqload extends Extractor {
public readonly id = 'uqload';
public readonly label = 'Uqload (via MediaFlow Proxy)';
public override readonly ttl = 0;
private readonly fetcher: Fetcher;
public constructor(fetcher: Fetcher) {
super();
this.fetcher = fetcher;
}
public supports(ctx: Context, url: URL): boolean {
return null !== url.host.match(/uqload/) && hasMediaFlowProxy(ctx.config);
}
public override normalize(url: URL): URL {
return new URL(url.href.replace('/embed-', '/'));
}
protected async extractInternal(ctx: Context, url: URL, countryCode: CountryCode): Promise<UrlResult[]> {
const html = await this.fetcher.text(ctx, url);
const heightMatch = html.match(/\d{3,}x(\d{3,})/);
const $ = cheerio.load(html);
const title = $('h1').text().trim();
return [
{
url: buildMediaFlowProxyUrl(ctx.config, 'Uqload', url),
format: Format.mp4,
label: this.label,
sourceId: `${this.id}_${countryCode}`,
ttl: this.ttl,
meta: {
countryCode,
title,
...(heightMatch && {
height: parseInt(heightMatch[1] as string) as number,
}),
},
},
];
};
}

View file

@ -0,0 +1,428 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name=viewport content="width=device-width, initial-scale=1.0" />
<title>Watch Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 x265 TyHD mkv The Ultimate Free Video Hosting Solution for Webmasters and Bloggers</title>
<meta name="description" content="Introducing Uqload: The Ultimate Free Video Hosting Solution for Webmasters and Bloggers. Say goodbye to limited storage and bandwidth constraints with Uqload. Enjoy unlimited storage, fastest HLS technology, customizable embedding, comprehensive analytics, monetization opportunities, top-notch security, and responsive customer support."/>
<link rel="shortcut icon" href="/favicon.ico?v=0" type="image/x-icon"/>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/main.css?v=13"/>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/style.css"/>
<script type="text/javascript" src="/js/modernizr.custom.04022.js"></script>
<script language="JavaScript" type="text/javascript" CHARSET="UTF-8" src="https://uqload.net/js/jquery.min.js?v=0"></script>
<script language="JavaScript" type="text/javascript" CHARSET="UTF-8" src="https://uqload.net/js/xupload.js?v=6"></script>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/bootstrap.min.css"/>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/bootstrap-theme.min.css"/>
<script type="text/javascript" src="https://uqload.net/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/uqload_style.css?v=48"/>
<link rel="stylesheet" type="text/css" href="https://uqload.net/css/uqload_icons.css"/>
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet"/>
<link href="https://fonts.googleapis.com/css?family=Raleway:200,200i,300,300i,400,400i,500,500i,600,600i,700,700i,800,800i&subset=latin-ext" rel="stylesheet"/>
<script type="text/javascript" src="https://uqload.net/js/actions.js?v=9"></script>
<!--<META NAME="keywords" CONTENT="black, mirror, s07e06, multi, vff, 1080p, webrip, eac3, x265, tyhd, mkv"/>-->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-49F5JJ5589"></script>
<meta name="robots" content="noindex, nofollow">
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-49F5JJ5589');
</script>
</head>
<body>
<div class="container-fluid" id="main">
<header class="row" id="header">
<div class="mobile-menu"></div>
<div class="col-md-3 col-sm-4">
<a href="https://uqload.net">
<span class="top-logo"></span></a>
</div>
<!--start menu-->
<div class="col-md-9 col-sm-8 menu">
<ul class="top-menu">
<li><a href="https://uqload.net/contact">Support</a></li>
<li><a href="https://uqload.net/login.html">Login</a></li>
<li class="header-signup text-uppercase"><a href="https://uqload.net/?op=registration">Sign Up</a></li>
<!--<li class="dropdown">
<div id="language">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><span class="trf trf-english"></span> <span class="caret"></span></a>
<ul class="dropdown-menu">
<li>
<a href="https://uqload.net/?op=change_lang&amp;lang=2">
<span class="trf trf-russian"></span><span class="langname">Russian</span>
</a>
</li>
</ul>
</div>
</li>-->
</ul>
<div class="clearfix"></div>
</div>
<!--end menu-->
</header> <!--end header-->
<div class="row content">
<div class="container">
<script language="JavaScript" type="text/javascript" CHARSET="UTF-8" src="https://uqload.net/js/jquery.cookie.js"></script>
<script type="text/javascript" src="https://uqload.net/js/clipboard.min.js"></script>
<script>$(document).ready(function(){new Clipboard('.copybtn');new Clipboard('.ccbtn');});</script>
<script>
$.cookie('file_id', '15872064', { expires: 10 });
$.cookie('aff', '41156', { expires: 10 });
</script>
<style>
#vplayer{height:96.6% !important;width:100% !important;}
.player-poster[data-poster]{background-size: contain !important;}
</style>
<h1>
Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD
</h1>
<div id="video-content" class="left"> <!-- start player-->
<!--div class="player">
</div-->
<div id="video-content" class="col-xs-12 video-holder">
<div class="video-embeder">
<div id="play_limit_box">
<a href="https://uqload.net/premium.html">Upgrade your account</a> to watch videos with no limits!
</div>
<script type="text/javascript" src="/player_clappr/clappr.min.js?v=5"></script>
<script type="text/javascript" src="/player_clappr/clappr-chromecast-plugin.min.js?v=2"></script><script src="https://uqload.net/js/pop.js"></script><script src="/js/custom-pop.js?v=14"></script>
<script>
var gaga = setInterval(function() {
if($('.media-control').is(':visible')){
$('.media-control-right-panel').prepend('<div id="playerlogo3" style="height:32px;float:right;color:#fff; width:50px; margin-top:4px;margin-right:12px"><a href="https://uqload.net/" target="_blank"><img src="/img/player_logo.png" alt="Uqload" /></a></div>');
if($('#playerlogo3').length >0){
clearInterval(gaga);
}
}
}, 500);
</script>
<div id='vplayer' style="width:940px;height:427px;text-align:center;"></div>
</div>
</div>
</div> <!--end player-->
<div class="clearfix"></div>
<br/>
<div class="tabedcontent">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" aria-expanded="true" href="#share">Share</a></li>
<li><a data-toggle="tab" aria-expanded="true" href="#flag">Flag</a></li>
<li><a data-toggle="tab" aria-expanded="true" href="#addto">Add to</a></li>
</ul>
<div class="tab-content">
<div id="share" class="tab-pane fade in active">
<div class="innertabs">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#embedcode" aria-expanded="true">Embed Code</a></li>
<li><a data-toggle="tab" href="#downloadlink" aria-expanded="true">Download Link</a></li>
<li><a data-toggle="tab" href="#forumcode" aria-expanded="true">Forum Code</a></li>
<li><a data-toggle="tab" href="#htmlcode" aria-expanded="true">HTML Code</a></li>
</ul>
<div class="tab-content">
<div id="embedcode" class="tab-pane fade active in">
<div class="form-inline">
<div class="form-group">
<label>Embed size:</label> <input type="text" id="iew" value="640" class="form-control input-lg" style="max-width:60px;">x<input type="text" id="ieh" value="360" class="form-control input-lg" style="max-width:60px;">
</div>
<div class="form-group newline">
<textarea id="iet" class="form-control input-lg"><IFRAME SRC="https://uqload.net/embed-z0xbr87oz637.html" FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=640 HEIGHT=360 allowfullscreen></IFRAME></textarea>
</div>
<p class="text-center">
<button style="margin:0 auto; margin-top:30px;" class="btn btn-default ccbtn" data-clipboard-target="#iet">Copy</button>
</p>
</div>
</div>
<div id="downloadlink" class="tab-pane fade">
<textarea id="downloadlinktext" class="form-control input-lg" onFocus="copy(this);">https://uqload.net/z0xbr87oz637.html</textarea>
<p class="text-center">
<button style="margin:0 auto; margin-top:30px;" class="btn btn-default ccbtn" data-clipboard-target="#downloadlinktext">Copy</button>
</p>
</div>
<div id="forumcode" class="tab-pane fade">
<textarea style="min-height:100px;" id="forumcodetext" class="form-control input-lg" onFocus="copy(this);">[URL=https://uqload.net/z0xbr87oz637.html][IMG]https://m60.uqload.net/i/07/03174/z0xbr87oz637_t.jpg[/IMG]
Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD[/URL]
[792x360, 01:30:26]</textarea>
<p class="text-center">
<button style="margin:0 auto; margin-top:30px;" class="btn btn-default ccbtn" data-clipboard-target="#forumcode">Copy</button>
</p>
</div>
<div id="htmlcode" class="tab-pane fade">
<textarea id="htmlcodetext" class="form-control input-lg"><a href="https://uqload.net/z0xbr87oz637.html"><img src="https://m60.uqload.net/i/07/03174/z0xbr87oz637_t.jpg" border=0><br>Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD</a><br>[792x360, 01:30:26]</textarea>
<p class="text-center">
<button style="margin:0 auto; margin-top:30px;" class="btn btn-default ccbtn" data-clipboard-target="#htmlcodetext">Copy</button>
</p>
</div>
</div>
</div>
</div>
<div id="flag" class="tab-pane">
<form class="form-inline" method="POST" action="https://uqload.net/" onsubmit="$.post('https://uqload.net/',$(this).serialize(),function(code){ eval(code); } );return false;">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="z0xbr87oz637">
<div class="form-group">
<label>Reason:</label>
<select class="form-control input-lg" 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">
<label for="report_info">Details:</label>
<textarea name="report_info" style="min-width:200px;" class="form-control input-lg" placeholder="Details"></textarea>
</div>
<input type="submit" name="add" value="Send Report" class="btn btn-default">
</form>
</div>
<div id="addto" class="tab-pane">
<button onclick="return jah('https://uqload.net/?op=favorites_do&amp;add=z0xbr87oz637')" id="fav_btn">Add to Favorites</button>
</div>
</div>
</div>
<!--<div id="content" class="left">
<div class="section">
<ul class="tabs">
<li>Flag</li>
<li>Share</li>
<li>Add to</li>
<li class="current">About</li>
</ul>
<div class="box" id="id_flag">
<form method="POST" action="https://uqload.net/" onsubmit="$.post('https://uqload.net/',$(this).serialize(),function(code){ eval(code); } );return false;">
<input type="hidden" name="op" value="report_file">
<input type="hidden" name="file_code" value="z0xbr87oz637">
Reason: <select name="report_type">
<option>Broken video</option>
<option>Wrong title/description</option>
<option>Copyright restriction</option>
<option>Other</option>
</select>
<textarea name="report_info" style="width:98%; margin:5px 0;" cols=24 rows=2 placeholder="Details"></textarea>
<input type="submit" name="add" value="Send Report" class="f-btn-blue">
</form>
</div>
<div class="box">
<div class="tabber" style="text-align:left;width:100%;">
<div class="tabbertab">
<h2>Download Link</h2>
<textarea style="width:98%;" cols=24 rows=3>https://uqload.net/z0xbr87oz637.html</textarea>
</div>
<div class="tabbertab">
<h2>Forum Code</h2>
<textarea style="width:98%;" cols=24 rows=3>[URL=https://uqload.net/z0xbr87oz637.html][IMG]https://m60.uqload.net/i/07/03174/z0xbr87oz637_t.jpg[/IMG]
Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD[/URL]
[792x360, 01:30:26]</textarea>
</div>
<div class="tabbertab">
<h2>HTML Code</h2>
<textarea style="width:98%;" cols=24 rows=3><a href="https://uqload.net/z0xbr87oz637.html"><img src="https://m60.uqload.net/i/07/03174/z0xbr87oz637_t.jpg" border=0><br>Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD</a><br>[792x360, 01:30:26]</textarea>
</div>
<div class="tabbertab">
<h2>Embed Code</h2>
<div style="padding:2px;text-align:left;">Embed size: <input type="text" id="iew" value="640" size=3>x<input type="text" id="ieh" value="360" size=3></div>
<textarea id="iet" style="width:98%;" cols=24 rows=3><IFRAME SRC="https://uqload.net/embed-z0xbr87oz637.html" FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=640 HEIGHT=360 allowfullscreen></IFRAME></textarea>
</div>
</div>
</div>
<div class="box" id="add_to">
<button onclick="return jah('https://uqload.net/?op=favorites_do&amp;add=z0xbr87oz637')" id="fav_btn">Add to Favorites</button>
</div>
<div class="box visible">
<div class="tabcontent">
<ul>
<li>
<p class="aboutleft">Category</p>
<p class="aboutright"><a href="https://uqload.net/category/"></a></p>
</li>
<li>
</ul>
</div>
<div class="clear"></div>
</div>
</div>
</div>-->
<script type='text/javascript'>var player = new Clappr.Player({
sources: ["https://m60.uqload.net/3rfkr3ep2fw2q4drdinp7ppqco2xtt5ele76uwwvy24rwjscvdv4e52vjd3a/v.mp4"],
preload: 'none',
poster: "https://m60.uqload.net/i/07/03174/z0xbr87oz637_xt.jpg",
width: "100%",
height: "100%",
disableVideoTagContextMenu: true,
parentId: "#vplayer"
,plugins: {"core": [ChromecastPlugin]}
,chromecast: { media: {title: "Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD"}, poster: "https://m60.uqload.net/i/07/03174/z0xbr87oz637.jpg" }
});
var vvplay,vvad,x2ok=0;
player.listenTo(player.core.mediaControl, Clappr.Events.MEDIACONTROL_HIDE, function(){$('#share-button').hide();});
player.listenTo(player.core.mediaControl, Clappr.Events.MEDIACONTROL_SHOW, function(){$('#share-button').show();});
player.on(Clappr.Events.PLAYER_READY, function() { });
player.on(Clappr.Events.PLAYER_TIMEUPDATE, function(x) {
if(5>0 && x.current>=5 && vvad!=1){vvad=1;$('div.video_ad_fadein').fadeIn('slow');}
if(x2ok==0 && x.current>=2441 && x.current<=(2441+2)){x2ok=x.current;}
});
player.on(Clappr.Events.PLAYER_PLAY, function() { doPlay(); });
player.on(Clappr.Events.PLAYER_ENDED, function() { $('div.video_ad').show(); });
function doPlay()
{
$('div.video_ad').hide();
if(vvplay)return;
vvplay=1;
adb=0;
if( window.cRAds === undefined ){ adb=1; }
$.get('https://uqload.net/dl?op=view&file_code=z0xbr87oz637&hash=15872064-130-61-1750682056-5f56ca687cff6a1173d61f1780175934&embed=&adb='+adb, function(data) {$('#fviews').html(data);} );
}
</script>
<Script type="text/javascript" language="JavaScript">
adb=0;
if( window.popns === undefined ){ adb=1; }
//if( window.cRAds === undefined ){ adb=1; }
//if( window._mgq === undefined ){ adb=1; }
if($('.push_button').css('display')=='none'){ adb=1; }
noplayer=0;
if(adb && 0){noplayer=1; $('#play_limit_box').show(); $('#play_limit_box').html('Uploader of this video wants you to disable Adblock, Please disable and reload the page.').css('color','#111'); }
$("#embed_div textarea").focus(function (){ $(this).select(); })
document.write('<style type="text/css">.tabber{display:none;}<\/style>');
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 language="JavaScript" type="text/javascript" src="https://uqload.net/js/tabber.js"></script>
<Script>
$(function() {
});
$( document ).ready(function() {
$('#vplayer').html('<iframe style="height: 100%;width: 100%;border: 0;overflow: hidden;" src="https://'+(document.domain==('uqload.net')?'www.uqload.net':'uqload.net')+'/embed-'+location.href.split('/')[3]+'" allowfullscreen></iframe>');
});
</Script>
<div class="visiteurs">
<script id="_wau1ww">var _wau = _wau || []; _wau.push(["classic", "kwhbyurh7quk", "1ww"]);
(function() {var s=document.createElement("script"); s.async=true;
s.src="//widgets.amung.us/classic.js";
document.getElementsByTagName("head")[0].appendChild(s);
})();</script>
</div>
</div>
</div> <!--end conteiner-->
<footer class="row">
<div class="col-md-2 col-sm-2 copyright hidden-xs">© uqload 2017.</div>
<div class="col-md-8 col-sm-8 footer-menu">
<ul>
<li><a href="https://uqload.net">Home</a></li>
<li><a href="https://uqload.net/faq">FAQ</a></li>
<li><a href="https://uqload.net/tos">Terms of service</a></li>
<li><a href="https://uqload.net/dmca">DMCA</a></li>
<li><a href="https://uqload.net/copyright">Copyright Policy</a></li>
<li><a href="https://uqload.net/make_money.html">Make Money</a></li>
<li><a href="https://uqload.net/checkfiles.html">Link Checker</a></li>
<li><a href="https://uqload.net/contact">Contact Us</a></li>
</ul>
</div>
<div class="col-md-2 col-sm-2 footer-logo hidden-xs"><a href="https://uqload.net" class="foot-logo"></a></div>
</footer>
</div>
</body>
</html>

View file

@ -0,0 +1,35 @@
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
exports[`Uqload uqload.net / 1`] = `
[
{
"format": "mp4",
"label": "Uqload (via MediaFlow Proxy)",
"meta": {
"countryCode": "fr",
"height": 360,
"title": "Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD",
},
"sourceId": "uqload_fr",
"ttl": 0,
"url": "https://mediaflow-proxy.test/extractor/video?host=Uqload&redirect_stream=true&api_password=asdfg&d=https%3A%2F%2Fuqload.net%2Fz0xbr87oz637.html",
},
]
`;
exports[`Uqload uqload.net /embed- 1`] = `
[
{
"format": "mp4",
"label": "Uqload (via MediaFlow Proxy)",
"meta": {
"countryCode": "fr",
"height": 360,
"title": "Black Mirror S07E06 MULTI VFF 1080p WEBrip EAC3 5 1 x265-TyHD",
},
"sourceId": "uqload_fr",
"ttl": 0,
"url": "https://mediaflow-proxy.test/extractor/video?host=Uqload&redirect_stream=true&api_password=asdfg&d=https%3A%2F%2Fuqload.net%2Fz0xbr87oz637.html",
},
]
`;

View file

@ -2,13 +2,14 @@ import { DoodStream } from './DoodStream';
import { Dropload } from './Dropload';
import { ExternalUrl } from './ExternalUrl';
import { Extractor } from './Extractor';
import { Fetcher } from '../utils';
import { Fsst } from './Fsst';
import { KinoGer } from './KinoGer';
import { Mixdrop } from './Mixdrop';
import { Soaper } from './Soaper';
import { SuperVideo } from './SuperVideo';
import { Uqload } from './Uqload';
import { VidSrc } from './VidSrc';
import { Fetcher } from '../utils';
import { Mixdrop } from './Mixdrop';
export * from './Extractor';
export * from './ExtractorRegistry';
@ -21,6 +22,7 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => [
new KinoGer(fetcher),
new Mixdrop(fetcher),
new Soaper(fetcher),
new Uqload(fetcher),
new VidSrc(fetcher),
new ExternalUrl(fetcher), // fallback extractor which must come last
];