chore(source): improve Soaper matching

There are cases where the upload year does not match, but we have a full
keywoard match and that should be enough.
This commit is contained in:
WebStreamr 2025-07-02 10:00:24 +00:00
parent 5c7b3fb7f2
commit ce4a00cfdd
No known key found for this signature in database
5 changed files with 813 additions and 1 deletions

View file

@ -40,4 +40,9 @@ describe('Soaper', () => {
const streams = await handler.handle(ctx, 'series', new ImdbId('tt0093058', undefined, undefined));
expect(streams).toMatchSnapshot();
});
test('handle lego heroes flash', async () => {
const streams = await handler.handle(ctx, 'movie', new TmdbId(504997, undefined, undefined));
expect(streams).toMatchSnapshot();
});
});

View file

@ -58,9 +58,16 @@ export class Soaper implements Source {
const $ = cheerio.load(html);
return $(`.thumbnail .img-group:has(.img-tip:contains("${year}")) a[href^="${hrefPrefix}"]`)
const exactKeyWordMatchUrl = $(`a[href^="${hrefPrefix}"]`)
.filter((_i, el) => $(el).text().toLowerCase() === keyword.toLowerCase())
.map((_i, el) => new URL($(el).attr('href') as string, this.baseUrl))
.get(0);
const yearMatchUrl = $(`.thumbnail .img-group:has(.img-tip:contains("${year}")) a[href^="${hrefPrefix}"]`)
.map((_i, el) => new URL($(el).attr('href') as string, this.baseUrl))
.get(0);
return exactKeyWordMatchUrl ?? yearMatchUrl;
};
private readonly getKeywordYearAndHrefPrefix = async (ctx: Context, tmdbId: TmdbId): Promise<[string, number, string]> => {

View file

@ -0,0 +1 @@
{"adult":false,"backdrop_path":"/uSVXTWbdPPpiecRlGvIZrz9gc8Q.jpg","belongs_to_collection":{"id":386162,"name":"LEGO DC Comics Super Heroes Collection","poster_path":"/noBsTnvxo1G4DVd36kaKSbTtM1M.jpg","backdrop_path":"/xMSbYXiCstnssIdxAajbGST8lpI.jpg"},"budget":10000000,"genres":[{"id":12,"name":"Adventure"},{"id":16,"name":"Animation"},{"id":35,"name":"Comedy"},{"id":10751,"name":"Family"},{"id":878,"name":"Science Fiction"}],"homepage":"https://www.warnerbros.com/lego-dc-super-heroes-flash","id":504997,"imdb_id":"tt7877382","origin_country":["US"],"original_language":"en","original_title":"LEGO DC Comics Super Heroes: The Flash","overview":"Reverse-Flash manipulates the Speed Force to put the Flash into a time loop that forces him to relive the same day over and over again—with progressively disastrous results, including losing his powers and being fired by the Justice League. The Flash must find a way to restore time to its original path and finally apprehend his worst enemy before all is lost for the Flash…and the world!","popularity":1.3876,"poster_path":"/zxz7Qo3GhiHkkFl26tWJ3uIwXiJ.jpg","production_companies":[{"id":2785,"logo_path":"/l5zW8jjmQOCx2dFmvnmbYmqoBmL.png","name":"Warner Bros. Animation","origin_country":"US"},{"id":9993,"logo_path":"/2Tc1P3Ac8M479naPp1kYT3izLS5.png","name":"DC Entertainment","origin_country":"US"},{"id":4081,"logo_path":"/9Q0SyrhQD61wWbz5KJOkL6tu2mg.png","name":"LEGO","origin_country":"DK"}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"release_date":"2018-02-13","revenue":0,"runtime":78,"spoken_languages":[{"english_name":"English","iso_639_1":"en","name":"English"}],"status":"Released","tagline":"Fastest Minifigure Alive","title":"LEGO DC Comics Super Heroes: The Flash","video":false,"vote_average":6.796,"vote_count":218}

View file

@ -0,0 +1,789 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Soaper live offers top rated TV shows and movies. Soaper.Tv It hosts 500 plus full-length TV shows and 5000 plus movies. A best choice for you to watch."/>
<meta name="keywords" content="Soaper tv,soaper.tv, soap2day,Soaper.live,free tv seriesfree movies onlinetv onlinetv li<x>nkstv li<x>nks moviesfree tv showswatch tv shows onlinewatch tv shows online free."/>
<title>Soaper.live</title>
<!-- Bootstrap -->
<link href="/static/style/home/css/bootstrap.css" rel="stylesheet">
<link href="/static/style/home/css/font-awesome.css" rel="stylesheet">
<link href="/static/style/home/css/style.css?v=190315" rel="stylesheet">
<script src="/static/style/home/js/jquery-1.7.2.min.js"></script>
<script src="/static/layer/layer.js"></script>
<script src="/static/main.js?v=1.0.5"></script>
<script src="/static/layer/layer.js"></script>
<script src="/static/status.js"></script>
<script type="module" src="/static/instantpage.js"></script>
<style>
.panel-info {
border-color: #bce8f1;
}
.panel-info > .panel-heading {
color: #31708f;
background-color: #9eeae7;
border-color: #bce8f1;
}
.panel-info > .panel-heading + .panel-collapse > .panel-body {
border-top-color: #bce8f1;
}
.panel-info > .panel-heading .badge {
color: #31708f;
background-color: #9eeae7;
}
.panel-info > .panel-footer + .panel-collapse > .panel-body {
border-bottom-color: #bce8f1;
}
.alert-info {
color: #31708f;
background-color: #9eeae7;
border-color: #bce8f1;
}
.navbar-default {
background-color: #9eeae7;
border-color: #bce8f1;
}
.no-padding {
padding:0px;
}
<!--d9edf7-->
</style>
</head>
<body>
<script type="text/javascript">var _Hasync= _Hasync|| [];
_Hasync.push(['Histats.start', '1,4705507,4,0,0,0,00000000']);
_Hasync.push(['Histats.fasi', '1']);
_Hasync.push(['Histats.track_hits', '']);
(function() {
var hs = document.createElement('script'); hs.type = 'text/javascript'; hs.async = true;
hs.src = ('//s10.histats.com/js15_as.js');
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(hs);
})();</script>
<div class="content">
<!-- NAVBARS -->
<div class="container">
<h3><img src="/logo.png"/></h3>
<div class="row">
<div class="col-sm-12">
<nav class="navbar navbar-default open-hover" role="navigation";>
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="/">Home</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav">
<li><a href="/movielist/">Movies</a></li>
<li><a href="/tvlist/">TV Series</a></li>
<li class="dropdown">
<a href="/Upcoming/" class="dropdown-toggle" data-toggle="dropdown">Upcoming List <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/preview/">Upcoming Episodes</a></li>
<li><a href="/Upcoming/">Upcoming Movies</a></li>
</ul>
</li>
<!--
<li class="dropdown">
<a href="/cliplist/" class="dropdown-toggle" data-toggle="dropdown">Clip <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="/cliplist/cat/1">Clip Collection</a></li>
</ul>
</li>
!-->
<li><a href="/faq/">FAQ</a></li>
<li><a target="_blank" href="https://www.soaperpage.com/">SoaperTv Official Domains</a></li>
</ul>
<div class="navbar-form navbar-right" role="search">
<div class="form-group">
<button type="button" class="btn btn-info" style="height:33px;display:inline;background-color:#5cb85c;" data-toggle="modal" data-target="#myaddModal">Add Update</button>
<input type="text" class="form-control" style="width:240px;display:inline" placeholder="Find Movies, TVs, Directors, Actors" id="txtSearch" value="LEGO DC Comics Super Heroes: The Flash">
<button type="button" class="btn btn-info" style="height:33px;display:inline;background-color:#cccccc;" id="btnSearch"><i class="fa fa-search"></i></button>
<div style="padding-left:10px;display:inline" class="hidden-xs">
<a target="_blank" href="https://twitter.com/home/?status=https://soaper.live/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash">
<img src="/static/style/home/images/twitter.png" />
</a>
<a target="_blank" href="https://www.facebook.com/share.php?u=https://soaper.live/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash">
<img src="/static/style/home/images/facebook.png" />
</a>
</div>
<div class="visible-xs">
<p></p>
<a target="_blank" href="https://twitter.com/home/?status=https://soaper.live/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash">
<img src="/static/style/home/images/twitter.png" />
</a>
<a target="_blank" href="https://www.facebook.com/share.php?u=https://soaper.live/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash">
<img src="/static/style/home/images/facebook.png" />
</a>
</div>
<div class="loginbar">
<a id="aLogin" href="/home/user/login?r=/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash" class="btn btn-primary">Login</a>
<a href="/home/user/register" class="btn btn-success">Sign up</a>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
</div>
<script>
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('2 4(){e a=$(\'#3\').g().f();6(a.h==0){k.7(\'j 5 i 9 d.\',\'#3\',{7:[1,\'#b\'],c:8});s u}t.w="/v.r?5="+a}$(\'#n\').m(2(){4()});$(\'#3\').l(\'q\',2(a){6(a.p=="o"){4()}});',33,33,'||function|txtSearch|SearchFunc|keyword|if|tips|2000|be||aaaaaa|time|empty|var|trim|val|length|cannot|Search|layer|bind|click|btnSearch|13|keyCode|keypress|html|return|location|false|search|href'.split('|'),0,{}))
</script>
<div id="myaddModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" class="modal fade" style="display: none;">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-hidden="true" class="close">×</button>
<h4 id="myModalLabel" class="modal-title">Update or Add Movie/TV Request</h4>
</div>
<div class="modal-body">
<p style="width: 100%;height: 45px;display: block;line-height: 45px;text-align: center;">To prevent abuse of requests, you can add or update requests after logging in.</p>
<p style="width: 100%;height: 45px;display: block;line-height: 45px;text-align: center;"><a id="aLogin" href="/home/user/login?r=/search.html?keyword=LEGO%20DC%20Comics%20Super%20Heroes%3A%20The%20Flash" class="btn btn-primary">Login</a>
<a href="/home/user/register" class="btn btn-success">Sign up</a></p>
</div> </div>
</div>
</div>
<script>
$('#email').val('');
$('#btnaddmovie').click(function() {
var a = $('#Moviename').val();
var c = $('#addMtype').val();
var d = $('#actiontype').val();
var m = $('#email').val();
var o = $('#addtxtContent').val();
if (a == '') {
alert('Your input text cannot be empty.');
return false
}
$('#myaddModal').modal('hide');
$.ajax({
url: "/home/index/addnewmovie",
data: {
title: a,
addType: c,
actiontype: d,
vparam: o,
email: m
},
dataType: "JSON",
type: "POST",
error: function() {},
success: function(a) {
var b = eval("(" + a + ")");
if (b["key"]) {
alert(b["val"]);
$('#txtContent').val('');
$('#Moviename').val('');
$('#addtxtContent').val('');
$('#myaddModal').modal('hide')
} else {
alert(b["val"]);
$('#myaddModal').modal('hide');
location.href="/home/user/login";
}
}
})
});</script>
<div class="container">
<div class="row">
<!--
<div class="col-sm-12 col-lg-12 ">
<div class="alert alert-info">Location : <a href="/">Home</a> >> Search</div>
</div>
!-->
<div class="col-sm-8 col-lg-8 col-xs-12">
<div class="panel panel-info panel-default">
<div class="panel-heading">Notifications</div>
<div class="panel-body">
<div class="alert alert-warning" style="font-size:16px;margin:0px;">
<p><b>If the movie you like is not online, please find it below or manually add an update request.</b></p><p><b>The administrator will complete the processing within 3 hours.</b></p><p><b>To prevent abuse of requests, please log in before submitting!</b></p><p><b>Thank you for your support.</b></p> </div>
</div>
</div>
<div class="panel panel-info panel-default">
<div class="panel-heading">Related Movies</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-12 col-lg-12 ">
<div class="row">
<div class="col-sm-12 col-lg-12 no-padding">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" >
<h4>Titles includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6 no-padding">
<div class="thumbnail text-center" style="border:none">
<div class="img-group">
<a href='/movie_lOGwQVEDV0.html'><img src="/res/pic/movie/cover/504997.jpg" alt=""></a>
<div class="img-tip label label-info" style="padding:3">2025</div>
</div>
<div style="height:40px;overflow: hidden; text-overflow: ellipsis;">
<h5><a href='/movie_lOGwQVEDV0.html'>Lego DC Comics Super Heroes: The Flash</a></h5>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="display:none">
<h4>Actors includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="display:none">
<h4>Directors includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-info panel-default">
<div class="panel-heading">Related TVs</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-12 col-lg-12">
<div class="row">
<div class="col-sm-12 col-lg-12 no-padding">
&nbsp;&nbsp;&nbsp;&nbsp;No matches found.
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="display:none">
<h4>Titles includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="display:none">
<h4>Actors includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12" style="display:none">
<h4>Directors includes keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-info panel-default" id='otherH' hidden="hidden">
<div class="panel-heading">Unpublished Movie ,You can click to apply for update and publish within 6 hours</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-12 col-lg-12">
<div class="row">
<div class="col-sm-12 col-lg-12 no-padding" id='otherm'>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<h4>Other Movie for keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="panel panel-info panel-default" id='otherTH' hidden="hidden">
<div class="panel-heading" >Unpublished Tv ,You can click to apply for update and publish within 24 hours</div>
<div class="panel-body">
<div class="row">
<div class="col-sm-12 col-lg-12">
<div class="row">
<div class="col-sm-12 col-lg-12 no-padding" id='othertv'>
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<h4>Other Tv for keyword 'LEGO DC Comics Super Heroes: The Flash' :</h4>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
var mdata = null;
var tvdata = null;
function GetMovie(){
$.ajax({
method:'POST',
url:'/home/Apis/Get_Other_movie',
data: {
m: "LEGO DC Comics Super Heroes: The Flash",
t: 0
},
dataType: "JSON",
type: "POST",
success:function(res){
var b = eval("(" + res + ")");
if (b["key"]) {
//$("#other").show();
$("#otherH").show();
mdata = b.data;
var arr=[]
$.each(b.data,function(i,item){
arr.push('<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6 no-padding"><div class="thumbnail text-center" style="border:none"><div class="img-group"><a href="#"><img src="'+ item.Poster+'"></a><div class="img-tip label label-info" style="padding:3">'+ item.year+ '</div></div><div style="height:65px;overflow: hidden; text-overflow: ellipsis;"><h5>'+ item.title+'</h5><a class="label label-primary" onclick="addmovie('+ i +')"><i class="fa fa-heart-o"></i> Update Movie</a></div></div></div>')
})
$('#otherm').html(arr.join(''))
};
}
})
};
function GetTv(){
$.ajax({
method:'POST',
url:'/home/Apis/Get_Other_tv',
data: {
tv: "LEGO DC Comics Super Heroes: The Flash",
t: 0
},
dataType: "JSON",
type: "POST",
success:function(res){
var b = eval("(" + res + ")");
if (b["key"]) {
//$("#other").show();
$("#otherTH").show();
tvdata = b.data;
var arr=[]
$.each(b.data,function(i,item){
arr.push('<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6 no-padding"><div class="thumbnail text-center" style="border:none"><div class="img-group"><a href="#"><img src="'+ item.Poster+'"></a><div class="img-tip label label-info" style="padding:3">'+ item.year+ '</div></div><div style="height:65px;overflow: hidden; text-overflow: ellipsis;"><h5>'+ item.title+'</h5><a class="label label-primary" onclick="addtv(' + i + ')"><i class="fa fa-heart-o"></i> Update Tv</a></div></div></div>')
})
$('#othertv').html(arr.join(''))
};
}
})
};
function addmovie(i) {
$('#Moviename').val(mdata[i]['title']);
$('#addtxtContent').val('Movie Year: '+ mdata[i]['year'] +'\r\nImdb: ' + mdata[i]['imdb'] + '\r\nTmdb: '+ mdata[i]['tmdb'] +'\r\nPlease do not delete the information here' );
$('#myaddModal').modal('show')
};
function addtv(i) {
$('#Moviename').val(tvdata[i]['title']);
$('#addtxtContent').val('Tv '+'Year: '+ tvdata[i]['year'] +'\r\nImdb: ' + tvdata[i]['imdb'] + '\r\nTmdb: '+ tvdata[i]['tmdb'] +'\r\nPlease do not delete the information here' );
$('#myaddModal').modal('show')
};
$(document).ready(function() {
GetMovie();GetTv();});
</script><div class="col-lg-4 col-sm-4 col-xs-12">
<div class="panel panel-info panel-default" style="height:0px">
<script type="text/javascript">
if (ads_status) {
var t1 = new Date().getTime();
var browser = {
versions: function() {
var u = navigator.userAgent;
return {
trident: u.indexOf('Trident') > -1,
presto: u.indexOf('Presto') > -1,
webKit: u.indexOf('AppleWebKit') > -1,
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,
mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/),
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1,
iPad: u.indexOf('iPad') > -1,
webApp: u.indexOf('Safari') == -1
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
};
if (browser.versions.mobile && (browser.versions.android || browser.versions.ios)) {
console.log('');
}else{
}
}
</script>
</div>
<div class="panel panel-info panel-default">
<div class="panel-heading">TOP Movies</div>
<div class="panel-body">
<div class="text-left center-block">
<div class="col-lg-6 col-md-12 col-sm-12">
<p><h5>Recommendation</h5></p>
<p class="text-default">
<a href="/movie_n8gO0wBGXy.html">Open</a>
</p>
<p class="text-default">
<a href="/movie_5KDq7aAGp1.html">The Simone Biles Story: Courage to Soar</a>
</p>
<p class="text-default">
<a href="/movie_4vGPv0OD31.html">This Is Congo</a>
</p>
<p class="text-default">
<a href="/movie_qLDo2vMk6w.html">Stalked by My Amish Boyfriend</a>
</p>
<p class="text-default">
<a href="/movie_RaDeLYYkBj.html">Trainwreck: Poop Cruise</a>
</p>
<p class="text-default">
<a href="/movie_9EkNvmXk4n.html">Steph Tolev: Filth Queen</a>
</p>
<p class="text-default">
<a href="/movie_ZRG02OvDjP.html">The Stranger in My Home</a>
</p>
<p class="text-default">
<a href="/movie_Q8gmA7qg5P.html">Enigma</a>
</p>
<p class="text-default">
<a href="/movie_Y4GQje8kbe.html">The Twisters</a>
</p>
<p class="text-default">
<a href="/movie_mlkWmAWgba.html">Ruthless Renegade</a>
</p>
<p class="text-default">
<a href="/movie_dVGL79wgYb.html">90 Feet from Home</a>
</p>
<p class="text-default">
<a href="/movie_6Jkv15YGjz.html">Barbara Walters: Tell Me Everything</a>
</p>
<p class="text-default">
<a href="/movie_AvGzM4ZgR2.html">I'm Your Venus</a>
</p>
<p class="text-default">
<a href="/movie_ajDVe62kVo.html">Trust Me</a>
</p>
<p class="text-default">
<a href="/movie_zwgldVvgE4.html">Viata mea sexuala</a>
</p>
<p class="text-default">
<a href="/movie_LwD8O26k9a.html">Grenfell: Uncovered</a>
</p>
<p class="text-default">
<a href="/movie_lOGw3N5GV0.html">Frozen: The Hit Broadway Musical</a>
</p>
<p class="text-default">
<a href="/movie_r7DJ7W6g4E.html">KPop Demon Hunters</a>
</p>
<p class="text-default">
<a href="/movie_rYg39nlkL1.html">Alma & the Wolf</a>
</p>
<p class="text-default">
<a href="/movie_38gawREkMY.html">A King Like Me</a>
</p>
</div>
<div class="col-lg-6 col-md-12 col-sm-12">
<p><h5>Popular</h5></p>
<p class="text-default">
<a href="/movie_lOGwPmEkV0.html">Five Nights at Freddy's</a>
</p>
<p class="text-default">
<a href="/movie_AvGzdArDR2.html">Barbie</a>
</p>
<p class="text-default">
<a href="/movie_qPnG6zlG7v.html">Spider-Man: Across the Spider-Verse</a>
</p>
<p class="text-default">
<a href="/movie_5Wk53ORg1m.html">Trolls Band Together</a>
</p>
<p class="text-default">
<a href="/movie_2YJk9mKkPM.html">Guardians of the Galaxy Vol. 3</a>
</p>
<p class="text-default">
<a href="/movie_ajDVxPKGVo.html">Godzilla x Kong: The New Empire</a>
</p>
<p class="text-default">
<a href="/movie_38gaByxGMY.html">Kung Fu Panda 4</a>
</p>
<p class="text-default">
<a href="/movie_538gaXbDMY.html">Deadpool 3</a>
</p>
<p class="text-default">
<a href="/movie_PnG65x6g7v.html">The Hunger Games: The Ballad of Songbirds & Snakes</a>
</p>
<p class="text-default">
<a href="/movie_5XgRM8bDbe.html">Transformers: Rise of the Beasts</a>
</p>
<p class="text-default">
<a href="/movie_9EkNAALG4n.html">A Quiet Place: Day One</a>
</p>
<p class="text-default">
<a href="/movie_OMkKeaOgLq.html">Bad Boys 4</a>
</p>
<p class="text-default">
<a href="/movie_J2gbNL3gzP.html">Oppenheimer</a>
</p>
<p class="text-default">
<a href="/movie_dVGLeOBkYb.html">Twisters</a>
</p>
<p class="text-default">
<a href="/movie_lOGwXKEkV0.html">Anyone But You</a>
</p>
<p class="text-default">
<a href="/movie_mdZkrKwD6z.html">John Wick: Chapter 4</a>
</p>
<p class="text-default">
<a href="/movie_YJk9J8dDPM.html">The Beekeeper</a>
</p>
<p class="text-default">
<a href="/movie_r7DJKP2g4E.html">The Substance</a>
</p>
<p class="text-default">
<a href="/movie_3d8kdr0gY9.html">Dune</a>
</p>
<p class="text-default">
<a href="/movie_1eGMeopGY9.html">Talk to Me</a>
</p>
</div>
</div>
</div>
</div>
<div class="panel panel-info panel-default">
<div class="panel-heading">TOP TVs</div>
<div class="panel-body">
<div class="text-left center-block">
<div class="col-lg-6 col-md-12 col-sm-12 ">
<p><h5>New Release</h5></p>
<p class="text-default">
<a href="/tv_y5XgRaNDbe.html">Phineas and Ferb</a>
</p>
<p class="text-default">
<a href="/tv_r5Wk58RG1m.html">Mako: Island of Secrets</a>
</p>
<p class="text-default">
<a href="/tv_rWmgxr7kYx.html">Big Little Lies</a>
</p>
<p class="text-default">
<a href="/tv_X5vgyrnGm0.html">Psych</a>
</p>
<p class="text-default">
<a href="/tv_QnXDE4rkml.html">Tyler Perry's Divorced Sistas</a>
</p>
<p class="text-default">
<a href="/tv_BvXD2MWkLY.html">The Survivors (2025)</a>
</p>
<p class="text-default">
<a href="/tv_mdZkrBEk6z.html">Stick</a>
</p>
<p class="text-default">
<a href="/tv_POMkKOWkLq.html">MasterChef Junior</a>
</p>
<p class="text-default">
<a href="/tv_OYRkXJ7gbQ.html">Overcompensating</a>
</p>
<p class="text-default">
<a href="/tv_51rGpOog87.html">Secrets We Keep</a>
</p>
<p class="text-default">
<a href="/tv_zOlkn6nkVw.html">Code of Silence</a>
</p>
<p class="text-default">
<a href="/tv_34OGBNKG6Z.html">Murderbot</a>
</p>
<p class="text-default">
<a href="/tv_3d8kd9WDY9.html">Duster</a>
</p>
<p class="text-default">
<a href="/tv_6n8gOpBGXy.html">The Bombing of Pan Am 103</a>
</p>
<p class="text-default">
<a href="/tv_jaZGAmAG9J.html">The Ultimate Fighter</a>
</p>
<p class="text-default">
<a href="/tv_qPnG6l9D7v.html">The Better Sister</a>
</p>
<p class="text-default">
<a href="/tv_l5KDqdAkp1.html">Dept. Q</a>
</p>
<p class="text-default">
<a href="/tv_Y4vGP5Ok31.html">Adults (2025)</a>
</p>
<p class="text-default">
<a href="/tv_PqLDooMD6w.html">The Second Best Hospital in the Galaxy</a>
</p>
<p class="text-default">
<a href="/tv_Xj4D43NkbO.html">Clarkson's Farm</a>
</p>
</div>
<div class="col-lg-6 col-md-12 col-sm-12">
<p><h5>Popular</h5></p>
<p class="text-default">
<a href="/tv_wY4GQKLDbe.html">Modern Family</a>
</p>
<p class="text-default">
<a href="/tv_WzxG1AJG1X.html">South Park</a>
</p>
<p class="text-default">
<a href="/tv_538ga5ZgMY.html">Family Guy</a>
</p>
<p class="text-default">
<a href="/tv_1J2gbKaGzP.html">The Rookie</a>
</p>
<p class="text-default">
<a href="/tv_0LwD8MOg9a.html">Rick and Morty</a>
</p>
<p class="text-default">
<a href="/tv_dr7DJQMk4E.html">The Office (US)</a>
</p>
<p class="text-default">
<a href="/tv_0LwD8ZVG9a.html">The Boys</a>
</p>
<p class="text-default">
<a href="/tv_a6Jkv2Ykjz.html">The Big Bang Theory</a>
</p>
<p class="text-default">
<a href="/tv_YxAgjOVGEL.html">Friends</a>
</p>
<p class="text-default">
<a href="/tv_XmlkWlqDba.html">Love Island (US)</a>
</p>
<p class="text-default">
<a href="/tv_34OGB6G6Zl.html">Game of Thrones</a>
</p>
<p class="text-default">
<a href="/tv_OYRkXd3kbQ.html">Young Sheldon</a>
</p>
<p class="text-default">
<a href="/tv_nzwglX1gE4.html">Criminal Minds</a>
</p>
<p class="text-default">
<a href="/tv_POMkKlbDLq.html">Brooklyn Nine-Nine</a>
</p>
<p class="text-default">
<a href="/tv_34OGBPoD6Z.html">Snowfall</a>
</p>
<p class="text-default">
<a href="/tv_31eGMaGY97.html">Grey's Anatomy</a>
</p>
<p class="text-default">
<a href="/tv_X5vgynnGm0.html">Bob's Burgers</a>
</p>
<p class="text-default">
<a href="/tv_51rGpWNg87.html">The Vampire Diaries</a>
</p>
<p class="text-default">
<a href="/tv_O5aDYvg7QR.html">Shameless (US)</a>
</p>
<p class="text-default">
<a href="/tv_o9dG73rG05.html">Invincible (2021)</a>
</p>
</div>
</div>
</div>
</div>
<div class="panel panel-info panel-default">
<img src='/pic/qr.png' />
</div>
</div></div>
</div>
</div>
</div>
<!-- END NAVBARS -->
<!-- Footer -->
<footer>
<div class="col-sm-12 col-lg-12 col-xs-12">
<div class="panel panel-info panel-default">
<div class="panel-body text-center">
<h5>Copyright@ 2024 Soaper.live All rights reserved.</h5>
</div>
</div>
</div>
</footer>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>-->
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="/static/style/home/js/jquery.min.js"></script>
<script src="/static/style/home/js/bootstrap.js"></script>
<script src="/static/style/home/js/jquery.slimscroll.js"></script>
<script src="/static/style/home/js/gmaps.js"></script>
<script src="/static/style/home/js/main.js"></script>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-LH3Q643Q2J"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-LH3Q643Q2J');
</script>
<script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'958d2dfedf0edc82',t:'MTc1MTQ0OTIwNS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>

View file

@ -20,6 +20,16 @@ exports[`Soaper handle imdb full metal jacket 1`] = `
]
`;
exports[`Soaper handle lego heroes flash 1`] = `
[
{
"countryCode": "en",
"title": "LEGO DC Comics Super Heroes: The Flash (2018)",
"url": "https://soaper.live/movie_lOGwQVEDV0.html",
},
]
`;
exports[`Soaper handle tmdb black mirror s4e2 1`] = `
[
{