http durum kodu 200, standart bir başarılı HTTP sunucu yanıtıdır. Bu, istemcinin isteğinin (örneğin, bir tarayıcıdan) başarıyla işlendiği ve sunucunun istenen verileri ilettiği anlamına gelir.
Kullanıcı içeriği hatasız alır ve sayfa veya uygulama düzgün çalışır. Kod 200'e veri eşlik ediyorsa, tarayıcı veya program bunu işler ve kullanıcıya görüntüler.
GET / HTTP/1.1 Host: unogs.com Accept: */* User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html> <html lang="en"> <head> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-EN58FES4KJ"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-EN58FES4KJ'); </script> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="title" content=""> <meta description="desciption" content=""> <meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=0"> <META NAME="ROBOTS" CONTENT="INDEX, FOLLOW"> <meta name="keywords" content="Netflix API,Netflix Search,All Netflix Regions"> <link rel="apple-touch-icon" href="apple-touch-icon.png?v=4"> <link rel="shortcut icon" href="/favicon.ico?v=6" /> <title></title> <link rel="stylesheet" type="text/css" href="/css/glyphspin.css" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous" /> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" /> <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/css/bootstrap-multiselect.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.13.12/css/bootstrap-select.min.css" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/10.6.2/css/bootstrap-slider.min.css"/> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ajax-bootstrap-select/1.4.5/css/ajax-bootstrap-select.min.css" /> <link href="/css/unogs.css?v=138" rel="stylesheet" /> <!-- Latest compiled JavaScript --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/js-cookie@beta/dist/js.cookie.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap-select.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-multiselect/0.9.15/js/bootstrap-multiselect.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/10.6.2/bootstrap-slider.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/ajax-bootstrap-select/1.4.5/js/ajax-bootstrap-select.min.js"></script> <script src="/js/kobinds.js?v=30"></script> <script src="/js/humanize-duration.js?v=30"></script> <script async src="/js/justwatch.js"></script> <style> @media screen and (min-width: 768px) { .custom-class { width: 94%; /* either % (e.g. 60%) or px (400px) */ } } #pagelog{ position:fixed; top:55px; right:-2px; z-index:100; max-height:300px; min-width:376px; overflow:auto; } #aowrap { position: relative; } #aobuttondiv { position: absolute; bottom: -13px; right: 0px; font-size: 10px; } .starter-section { padding: 40px 15px; text-align: center; } .slider { margin-top: 0px; margin-right: 10px; margin-left: 10px } .slidetitle { padding-bottom:5px; } .form-inline { margin-bottom:5px; } </style> </head> <body> <div class="scroll-top-wrapper "> <span class="scroll-top-inner"> <i class="glyphicon glyphicon-arrow-up"></i> </span> </div> <div id="pagelog" data-bind='template:{name:"alertmsg",foreach: alertsToShow,afterAdd:showAlerts,beforeRemove:hideAlerts}'></div> <div class="modal fade" id="submitMissing" role="dialog" aria-label="submitMissing"> <div class="modal-dialog custom-class" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <span class="modal-title">Add Missing Titles</span> </div> <div class="modal-body"> <div class="container"> <div class="col-md-5" style="text-align:left"> <span>Why Do We Need This?</span> <p>Over time it has come to our attention that some titles are not getting caught by our scrapers. This is to be expected as Netflix make it harder and harder for us to pull information.</p> <p>In order simplify the effort to get all the latest information, we have created this tool which will allow any user to easily submit titles which our engines will then validate and add if they are indeed missing from a particular country. </p> <p>In addition to the form on this page, POST id's to:<br> <b>https://unogs.com/api/submitmissing</b><br> using the following JSON. <pre>{"netflixID":"<id>","countryCode":"<2 letter country code>","user":"<username>"}</pre> </p> <a href='https://forum.unogs.com/topic/194/allowing-users-to-add-missing-titles' target=_blank class='btn btn-info'>Go to our Forum for more Details</a> </div> <div class="col-md-5"> <div data-bind="visible:smlist().length<1"> <div class="form-group"> <label for="addusername">User Name (optional)</label> <input id="addusername" class="form-control" type="text" data-bind="value:smuser"/> </div> <div class="form-group"> <label for="choosecountry">Select Country</label> <select id="choosecountry" class="form-control" data-bind="value:smcc,options:allCountries,optionsText:'name',optionsValue:'cc'"></select> </div> <div class="form-group"> <label for="comment">Add list of missing titles (link or just netflix id)</label> <textarea class="form-control" rows="5" id="comment" data-bind="value:smlistraw"></textarea> </div> <div data-bind="html:retMessage"></div> </div> <div data-bind="visible:smlist().length>0"> <span>Titles are being added, see below...</span> <div style='height:250px;overflow:auto;border:1px solid #ccc;margin-bottom:5px'> <table class='table table'> <tr><th>User</th><th>Country</th><th>Title ID</th><th>Action</th></tr> <tbody data-bind="foreach:smlist"> <tr data-bind="class:status"> <td data-bind="html:user"></td> <td data-bind="html:cc"></td> <td data-bind="html:id"></td> <td data-bind="html:message"></td> </tr> </tbody> </table> </div> </div> </div> </div> </div> <div class="modal-footer"> <button class="btn btn-primary" data-bind="visible:smlist().length>0,click:resetSM">Reset/Add Additional Titles</button> <button class="btn btn-primary" data-bind="visible:isSMForm,click:submitMissing">Submit Netflix ID's</button> <button type="button" class="btn btn-warning" id=bccancel data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Close</button> </div> </div> </div> </div> <div class="modal fade" id="searchForm" tabindex="-1" role="dialog" aria-labelledby="searchForm"> <div class="modal-dialog custom-class" role="document"> <div class="modal-content" style="background-color:#eee"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <span class="modal-title">Advanced Search</span> </div> <div class="modal-body" style="text-align:center"> <div class="container"> <div id="createSearch" class="col-md-5"> <div> <div class="form-group"> <input id="searchquer" type="text" class="form-control" data-bind="value:searchquerydecoded" placeholder='...Enter Search Query...'/> </div> <div class="asf" style="position:relative;display:inline-block"> <table id="slidetable"> <tr><td colspan="3">IMDB Rating</td></tr> <tr> <td><label id=simdbr data-bind="html:start_rating"></label></td> <td><input id="rating_slider" type="text" class="slider form-control" data-bind="sliderValue: {value: [start_rating, end_rating], min:0, max: 10, step: 1, tooltip: 'hide'}"/></td> <td><label id=eimdbr data-bind="html:end_rating"></label></td> </tr> <tr><td colspan="3">Year</td></tr> <tr> <td><label id=syear data-bind="html:start_year"></label></td> <td><input id="year_slider" type="text" class="slider form-control" data-bind="sliderValue: {value: [start_year, end_year], min:1900, max: 2023, step: 1, tooltip: 'hide'}"/></td> <td><label id=eyear data-bind="html:end_year"></label></td> </tr> </table> </div> <br> <div class="asf" style="position:relative;display:inline-block"> <div style="position:absolute;top:60px;right:-40px;"> <button id="toggleOrAnd" class="btn" data-bind="click:changeASAO"> <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> <span data-bind="html:audiosubtitle_andor"></span> </button> </div> <table> <tr> <td class="advlabel"><label class="hidden-xs" for="typeSelect">Type</label></td> <td class="ainput"><select id="typeSelect" data-style="form-control btn-primary" data-bind="value:type,optionsText: $data, optionsCaption: 'Select Type',options:typeArray,selectPicker:{'value':type,'options':typeArray}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs" for="audioSelect">Audio</label></td> <td class="ainput"><select id="audioSelect" data-style="form-control btn-primary" data-live-search="true" data-bind="value:audio, options:languageArray, optionsText: $data, optionsCaption: 'Select Audio',selectPicker:{'value':audio,'options':languageArray}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs" for="subtitleSelect">Subtitle</label></td> <td class="ainput"><select id="subtitleSelect" data-style="form-control btn-primary" data-live-search="true" data-bind="value:subtitle, options:languageArray, optionsText: $data, optionsCaption: 'Select Subtitle',selectPicker:{'value':subtitle,'options':languageArray}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs"for="filterSelect">Filter</label></td> <td class="ainput"><select id="filterSelect" data-style="form-control btn-primary" data-bind="options:filterArray,value:filterby,optionsText:$data,optionsCaption: 'Select Filter',selectPicker:{'value':filterby,'options':filterArray}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs"for="orderSelect">Order</label></td> <td class="ainput"><select id="orderSelect" data-style="btn-primary" data-bind="value: orderby, options: orderbyArray, optionsText: $data, optionsCaption: 'Select Order',selectPicker:{'value':orderby,'options':orderbyArray}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs" for="personSelect">Person</label></td> <td class="ainput"><select id="personSelect" data-style="btn-primary" class="with-ajax" data-live-search="true" data-bind="options:personArray,value:person,optionsCaption: 'Select Person',selectPicker:{'value':person,'options':personArray,'path':'person'}"></select></td> </tr> <tr> <td class="advlabel"><label class="hidden-xs" for="genreSelect">Genre</label></td> <td class="ainput"><select id="genreSelect" multiple="true" class="with-ajax" title="Select Genre" data-style="btn-primary" data-live-search="true" data-bind="selectedOptions: genrelist, optionsText: 'text', optionsValue: 'value', options:genreArray,selectPicker: {'value':genrelist,'options':genreArray,'path':'genre'}"></select></td> </tr> </table> </div> </div> </div> <div id="chooseCountries" class="col-md-7"> <div id=countrystatus style="padding:5px"><span data-bind="html:countryFilterMessage"></span></div> <div id=cseltop> <div class='ccontrols btn-group' role=group> <button type='button' class='btn btn-primary' data-bind="click:checkCountries"><span class="glyphicon glyphicon-check" aria-hidden="true"></span><span class='hidden-xs'>Check All</span></button> <button type='button' class='btn btn-primary' data-bind="click:unCheckCountries"><span class="glyphicon glyphicon-unchecked" aria-hidden="true"></span><span class='hidden-xs'>UnCheck All</span></button> <div class="btn-group" role="group"> <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <span myval='null'>Select Provider</span> <span class="caret"></span> </button> <ul class="dropdown-menu" data-bind="foreach:vpnarray" role="menu"> <li><a href='#' data-bind="click:$parent.showVPN,html:title"></a></li> </ul> </div> <button type='button' class='btn btn-primary' data-bind="click:changeCAOU"><span class="glyphicon glyphicon-cog" aria-hidden="true"></span><span data-bind="html:country_andorunique"></span></button> </div> </div> <a class="btn btn-info" data-bind="visible:$root.vpnselected,attr:{href:'/ad/'+$root.vpnselected()},html:'Find out more about '+$root.vpntitle()" target=_blank></a> <div id="countrylist" data-bind="foreach:allCountries"> <div data-bind="attr:{title:name,id:cid,style:bgimage},class:cclass,click:selectCountry"> <div class="cmdiv" data-bind="visible:isVisible"> <img alt="redcheck" src="/images/checkmarkred.png"> </div> <span data-bind="html:name"></span> </div> </div> </div> </div> </div> <div class="modal-footer"> <button type=submit class='btn btn-primary' data-bind="click:goAdvancedSearch"><span class="glyphicon glyphicon-search" aria-hidden="true"></span> Search uNoGS</button> <button type="button" class="btn btn-info" data-bind="click:clearAllSearch"><span class="glyphicon glyphicon-retweet" aria-hidden="true"></span> Reset All Variables</button> <button type="button" class="btn btn-info" data-bind="click:saveCountries"><span class="glyphicon glyphicon-floppy-save" aria-hidden="true"></span> Save Countries</button> <button type="button" class="btn btn-warning" id=bccancel data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Close</button> </div> </div> </div> </div> <!--<object data="/title/" width="400" height="300" type="text/html"> Alternative Content </object>--> <nav class='navbar navbar-inverse navbar-fixed-top'> <div class='container'> <div class='navbar-header'> <button type='button' class='navbar-toggle collapsed' data-toggle='collapse' data-target='#navbar' aria-expanded='false' aria-controls='navbar'> <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='/'>uNoGS.com</a> </div> <div id='navbar' class='navbar-collapse collapse'> <ul class='nav navbar-nav'> <li data-bind="attr:{class:cdclass}"><a href="/countrydetail">Country Details</a></li> <li data-bind="attr:{class:srchclass}" class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Search<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li><a class=ddlink href="/search/top250">IMDB Top 250 Movies</a></li> <li><a class=ddlink href="/search/top250tv">IMDB Top 250 TV</a></li> <li><a class=ddlink href="/search/new last 24 hours">What's new Last 24 Hours</a></li> <li><a class=ddlink href="/search/new last 5 days">What's new Last 5 Days</a></li> <li><a class=ddlink href="/search/new last 10 days">What's new Last 10 Days</a></li> <li><a class=ddlink href="/search/new last 1 day?countrylist=46">What's new Last 1 Day (UK)</a></li> </ul> </li> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Contact<span class="caret"></span></a> <ul class="dropdown-menu" role="menu"> <li><a href="mailto:[email protected]" target=_blank>[email protected]</a></li> <li><a href="https://forum.unogs.com" target=_blank>uNoGS Forum</a></li> <li><a href="https://forum.unogs.com/category/4/comments-feedback" target=_blank>Report a Bug!</a></li> </ul> </li> <li> <button class="btn btn-primary navbar-btn" data-toggle="modal" data-target="#searchForm" data-bind="click:updatePicker">Advanced Search</button> <button class="btn btn-warning navbar-btn" data-toggle="modal" data-target="#submitMissing">Add Missing Titles</button> </li> </ul> <form data-bind="submit:goBasicSearch" method=GET class='navbar-form navbar-right' role='search'> <div class='input-group'> <span class='input-group-addon'> <span class='glyphicon glyphicon-search'></span> </span> <input type='text' name=q class='form-control' data-bind="value:searchquerydecoded" placeholder='Quick Search ...'> <span class='input-group-btn'> <input type=submit class='btn btn-default' value='Go' /> </span> </div> </form> </div> </div> </nav> <noscript><div class='bg-warning' style='color:red;font-size:24px;text-align:center;border-bottom:1px solid red;'><br><br><br><b>This Site Relies heavily on javascript, please enable it if you want to continue!!</b></div></noscript> <div id="pagelog" data-bind='template:{name:"alertmsg",foreach: alertsToShow,afterAdd:showAlerts,beforeRemove:hideAlerts}'></div> <script src="/ajax?v=1"></script> <script type="text/javascript"> var komodel var curtime = Math.round(Date.now() / 1000) var vpn_obj=new Array var path='' </script> <!-- ko ifnot:istitlepath --> <div class="modal fade" id="titleDetails" tabindex="-1" role="dialog" aria-labelledby="titleDetails"> <div class="modal-dialog custom-class" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> <h4 class="modal-title" data-bind="html:titledirectpath">Modal title</h4> </div> <div class="modal-body" style="height:400px" data-bind="visible:titleIsLoading"> <div class=lgloader> <h3>Loading Title...</h3> <img alt="loadergif" src='/images/lgloader.gif' /> </div> </div> <div data-bind="template:{name:titletemplate,foreach:titlearray}"></div> <div class="modal-footer"> <button type="button" class="btn btn-primary" id=bccancel data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Close</button> </div> </div> </div> </div> <div> <!-- <div class="alert alert-danger" role="alert" style="text-align:center;margin-bottom:5px;margin-top:5px;font-size:20px"> ATTENTION: If you're a VPN user, Netflix are <b>hiding</b> results from you!!<br> <a href="https://forum.unogs.com/topic/200/a-possible-fix-to-the-netflix-hiding-results-issue" target=_blank class="btn btn-primary btn-sm">Find out more on our forum</a> <br><span style='font-size:12px'><span class="glyphicon glyphicon-arrow-up"></span>This is not an ad, this is a public service announcement!</span> <br><span class="hidden-xs hidden-sm" style='font-size:12px'><span class="glyphicon glyphicon-arrow-down"></span>This is an ad!</span> </div> <div class="alert alert-warning" role="alert" style="text-align:center;margin-bottom:5px;margin-top:5px;"> Ever wish there was a <b>uNoGS</b> for <b>Disney+</b>? <a href="https://dplus.uno.gs" target="_blank" class="btn btn-primary btn-xs">Check out dplus.uno.gs!</a> </div> --> <div data-bind="visible:eucookie" style="display:none"> <div class="alert alert-info" role="alert" style="text-align:center;margin-bottom:5px;margin-top:5px"> By using the site you are implicitly agreeing to the (limited) use of cookies!<br> <button type="button" class="btn btn-warning btn-xs" data-dismiss="alert" aria-label="Close"> Accept and Close </button> <a href="https://forum.unogs.com/topic/195/privacy-policy" target=_blank class="btn btn-primary btn-xs">Show Privacy Policy</a> </div> </div> </div> <!-- ko if:adArray().length --> <div class="listdiv" data-bind="template:{name:'basicAd',data:adArray()[0]}"></div> <!-- /ko --> <h1 style='color: white; text-align: center'></h1> <div class="results"> <div class=listdiv data-bind="template:{name:'titlediv',foreach: titems}"></div> <!--<div data-bind="{visible:isloading}"><img alt="loadergif" src="/images/redloader.gif"> Loading...</div>--> </div> <!-- /ko --> <!-- ko if:istitlepath --> <br> <div class=lgloader style="display:none" data-bind="visible:titleIsLoading"><img alt="loadergif" src='https://unogs.com/images/lgloader.gif' /></div> <div data-bind="template:{name:titletemplate,foreach:titlearray}"></div> <!-- /ko --> <!-- ko if:iscdetailpath --> <div style='display:none' data-bind="visible:iscdetailpath,foreach:allCountries"> <div data-bind="visible:isVisible"> <div class="statsdiv ui-corner-all " data-bind="attr:{style:bgimage+';border:1px solid #333;background-size:120px 128px'}"> <div class="gencsinfo"> <span style="font-size:32px" data-bind="html:name"></span><br> <span class="bigfont greyf" data-bind="html:tvids"></span>videos | <span class="bigfont greyf" data-bind="html:tmovs"></span>movies | <span class="bigfont greyf" data-bind="html:tseries"></span>series </div> <div class="buttoncs"> <button class="btn btn-primary btn-sm" data-bind="click:showNewLast7">New Videos (last 7 days)</button> <button class="btn btn-primary btn-sm" data-bind="click:showExpiring">Videos about to expire</button> </div> <div class="results"> <div class="alert alert-info" style="max-width:900px;margin:auto" data-bind="visible:showtitles"> <span data-bind="attr:{class:icon}" aria-hidden="true"></span> <span data-bind="html:resultmessage"></span> </div> <div data-bind="visible:titleArray().length" style="margin-top:2px"><button style="width:200px" class="btn btn-primary btn-xs" data-bind="click:hideTitles">Hide Titles</button></div> <div class="listdiv" data-bind="visible:titleArray().length,template:{name:'titleitem',foreach:titleArray}">Videos Go Here</div> </div> </div> </div> </div> <!-- /ko --> <script type="text/javascript"> var limit=20 var d = new Date(); var curyear = d.getFullYear(); const shortEnglishHumanizer = humanizeDuration.humanizer({ language: 'shortEn', languages: { shortEn: { y: () => 'y', mo: () => 'mo', w: () => 'w', d: () => 'd', h: () => 'h', m: () => 'm', s: () => 's', ms: () => 'ms', } } }) window.onscroll = function(ev) { if ((window.innerHeight + window.pageYOffset) >= document.body.offsetHeight) { komodel.addTitles() } }; $.fn.changeBgImage = function (myarray,duration) { // Get reference to container, and set initial content //console.log(myarray) var al=Object.keys(myarray).length; var container = $(this[0]); changeImage(container,myarray[0].url); if(al<2){ return; } var i=1; function changeImage(container,myval){ $.when(container.fadeOut()).done(function(){ if(container.get(0).tagName=='IMG'){ //alert(myval); container.attr('src',myval).fadeIn(); }else{ container.css('backgroundImage',"url('"+myval+"')").fadeIn(); } }); } var countdown = setInterval(function () { if (i<al) { changeImage(container,myarray[i].url); i++; }else{ changeImage(container,myarray[0].url); i=1; } }, duration); } $(function () { $('[data-toggle="tooltip"]').tooltip(); var alert=function(atype,amsg,atimeout){ var self=this; self.atype=ko.observable(atype); if(atype=='loading'){ atype='info'; glyphicon='glyphicon glyphicon-plus-sign gly-spin'; }else{ glyphicon='glyphicon glyphicon-exclamation-sign'; } self.aclass=ko.observable('alert alert-'+atype); self.icon=ko.observable(glyphicon); self.amsg=ko.observable(amsg); self.isVisible=ko.observable(true); self.close=function(){ self.isVisible(false); } if(atimeout>0){ setTimeout(function(){self.isVisible(false)},atimeout); } return self; } var missingTitle=function(data){ self=this self.id=data.netflixID self.cc=data.countryCode self.user=data.user self.isadding=ko.observable(true) self.status='alert-'+data.result.status self.message=data.result.message } var adItem=function(data){ var self=this self.itemtemplate=data.template self.itemclass=data.template self.img=data.img self.url=data.url self.status=data.status return self } var seasonItem=function(data){ var self=this self.seasnum=data.season; self.eptarget='s'+data.season; self.episodes=ko.observableArray(data.episodes) } var peopleItem=function(data){ var self=this if(data.type){ self.type = data.type self.people = ko.observableArray(data.arr); }else{ self.type='' self.people=[] } return self } var genreItem=function(data){ var self=this if(data.nfid){ self.url="/genre/"+data.nfid+"/"+data.genre self.genre=data.genre }else{ self.url='' } return self } var cdetItem=function(data){ var self=this self.isshow=ko.observable(false) self.ishide=ko.observable(false) self.title=data.title self.list_arr=data.list.split(',') self.abbr_arr=data.list.split(',') self.diff=ko.observable(0) //console.log('title:'+data.title+' length:'+self.list_arr.length+' max:'+data.max) if(self.list_arr.length > data.max){ self.isshow(true) self.diff(self.list_arr.length-data.max) for(i=0;i<self.diff();i++){ //console.log('popping list') self.abbr_arr.pop() } } self.morehtml=ko.computed(function(){ return self.diff()+' more' }) self.showall=function(){ self.isshow(false) self.ishide(true) } self.hideall=function(){ self.isshow(true) self.ishide(false) } self.list=ko.computed(function(){ if(self.diff()<1){ self.isshow(false) self.ishide(false) return data.list }else if(self.ishide()){ return self.list_arr.join(', ') }else{ return self.abbr_arr.join(', ') } }) return self } var aCountryItem=function(data,parent){ var self=this self.cid=data.id self.name=data.country self.expiring=data.expiring self.nl7=data.nl7 self.tvids=data.tvids self.tmovs=data.tmovs self.tseries=data.tseries self.cc=data.countrycode.toLowerCase() self.bgimage='background-image: url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.7.0/flags/4x3/'+self.cc+'.svg");' //self.lgbgimage='background-image: url("https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.7.0/flags/4x3/gb.svg"' self.isVisible=ko.observable(false) self.cclass=ko.computed(function(){ if(self.isVisible()){ return "flagclass" }else{ return "flagclass notselected" } }) self.updateTemp=ko.computed(function(){ if(self.isVisible()){ parent.countryArray.push(self.cid) }else{ parent.countryArray.remove(self.cid) } }) self.selectCountry=function(){ parent.vpnselected(false) if(self.isVisible()){ self.isVisible(false) }else{ self.isVisible(true) } } self.titleArray=ko.observableArray() self.resultmessage=ko.observable() self.showtitles=ko.observable(false) self.icon=ko.observable('glyphicon glyphicon-exclamation-sign') self.showNewLast7=function(){ //console.log('new ast 7 days') self.loadTitles('new last 7 days&orderby=Date') } self.showExpiring=function(){ //console.log('load all expiring') self.loadTitles('expiring') } self.hideTitles=function(){ self.titleArray([]) self.resultmessage('') self.showtitles(false) } self.loadTitles=function(filter){ self.showtitles(true) self.titleArray([]) self.icon('glyphicon glyphicon-exclamation-sign gly-spin') self.resultmessage('Searching...') var titleget=$.get("/api/search?query="+filter+"&countrylist="+self.cid,function(data){ self.icon('glyphicon glyphicon-exclamation-sign') if(filter=='expiring'){ self.resultmessage("Found "+data.total+" Expiring Titles!") }else{ self.resultmessage("Found "+data.total+" New titles (last 7 days)!") } for(i in data.results){ self.titleArray.push(new tItem(data.results[i])) } }) } } var countryItem=function(data){ var self=this self.cid=data.id self.country=data.country //console.log(self.country) self.flagimg='https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.7.0/flags/4x3/'+data.cc.toLowerCase()+'.svg'; self.cdetlist=ko.observableArray(); //self.cdetlist.push(new cdetItem('other')) //self.titems.push(new tItem(data.results[i])) if(data.seasdet){ self.cdetlist.push(new cdetItem({"title":"Seasons","list":data.seasdet,"max":3})); } self.cdetlist.push(new cdetItem({"title":"Audio","list":data.audio,"max":1})); self.cdetlist.push(new cdetItem({"title":"Subtitles","list":data.subtitle,"max":1})); self.cdetlist.push(new cdetItem({"title":"new","list":data.newdate,"max":5})); if(data.expiredate != '0000-00-00' && data.expiredate){ self.cdetlist.push(new cdetItem({"title":"Expires","list":data.expiredate,"max":5})); } self.isVisible=ko.observable(true) return self } var titleItem=function(data,parent){ var self=this self.netflixid=data.netflixid self.netflixpath='https://www.netflix.com/title/'+data.netflixid self.title=data.title self.slug=data.slug self.synopsis=data.synopsis self.vtype=data.vtype self.nfdate=data.nfdate self.curdate=data.curdate self.maturity=data.matlabel self.imdbrating=data.imdbrating self.year=data.year self.isseries=ko.observable(false) if(self.vtype=='series'){ self.isseries(true) self.jwvtype='show' }else{ self.jwvtype=self.vtype } if(Number(data.runtime)>0){ self.runtime=shortEnglishHumanizer(data.runtime+'000',{ round: true }).replace(/[,\s]+/g,'') }else{ self.runtime='--' } self.imdbplot=data.imdbplot self.imdbid=data.imdbid self.img=ko.computed(function(){ if(data.lgimg){ return data.lgimg.replace(/^http:/, 'https:'); }else if(data.imdblocalimage){ return data.imdblocalimage }else if(data.img){ return data.img.replace(/^http:/, 'https:'); }else if(data.imdbposter){ return data.imdbposter.replace(/^http:/, 'https:'); } }) self.imdbinfo=ko.computed(function(){ if(self.imdbid){ ii='<a href="https://www.imdb.com/title/'+data.imdbid+'" target="_blank">Open Title in IMDB</a>'; ii+="<br>metascore:<b> "+data.imdbmetascore+"</b>"; ii+="<br>votes:<b> "+data.imdbvotes+"</b>"; ii+="<br>genre:<b> "+data.imdbgenre+"</b>"; ii+="<br>awards:<b> "+data.imdbawards+"</b>"; if(self.vtype=='series'){ ii+="<br>Top 250 Rank: <b>"+data.top250tv+"</b>"; }else{ ii+="<br>Top 250 Rank: <b>"+data.top250+"</b>"; } return ii }else{ ii='<a href="https://www.imdb.com/find?ref_=nv_sr_fn&q='+self.title+'+&s=all" target=_blank>Search IMDB for Title</a>'; return ii } }) //handle background images self.addArtWork=function(imgobj){ var html=''; for(mykey in imgobj){ iarray=imgobj[mykey] for (i in iarray){ html+='<div class=artwork style="display:inline-block;border:2px solid #fff;margin:1px;">'; html+='<img alt="artwork" src="'+iarray[i].url+'" width="'+iarray[i].width+'" /></div>'; } } $('#artworkdiv').html(html); $('#artworkdiv').parent().animate({ scrollTop: 0 }, "slow"); } self.addBGImage=function(nfid){ var url='/api/title/bgimages?netflixid='+self.netflixid; //$('.billboardbg').hide(); $.getJSON(url,function(data){ //console.log(data) $('.billboardbg').changeBgImage(data.bg,7000); self.addArtWork(data); }); } self.addBGImage(data.netflixid) self.countries=ko.observableArray() self.people=ko.observableArray() self.genres=ko.observableArray() self.seasons=ko.observableArray() self.addInfo=function(type,item_arr,item_obj){ $.get('/api/title/'+type+'?netflixid='+self.netflixid,function(data){ if(data.length>0){ for(i in data){ //console.log('pushing item:'+type) item_arr.push(new item_obj(data[i])) } }else{ item_arr.push(new item_obj({})) } }) } self.addInfo('genres',self.genres,genreItem) self.addInfo('people',self.people,peopleItem) self.addInfo('countries',self.countries,countryItem) self.addInfo('episodes',self.seasons,seasonItem) return self } var tItem=function(data){ var self=this self.title=data.title self.id=data.id self.img=data.img.replace(/^http:/, 'https:'); self.img=self.img.replace(/art-2/, 'art-s'); self.vtype=data.vtype self.netflixid=data.nfid self.slug=data.slug self.titlepath='/'+data.vtype+'/'+data.nfid+'/'+self.slug self.synopsis=data.synopsis self.avgrating=data.avgrating self.year=data.year self.runtime=data.runtime self.imdbid=data.imdbid self.top250=data.top250 self.top250tv=data.top250tv self.itemtemplate='titleitem' self.itemclass='titleitem' //check if an image exists and logs to console on failure var tmpimg = new Image() tmpimg.src=self.img tmpimg.onerror = function(){ console.log('image not found! '+self.img) data={filmid:self.netflixid} //$.post('/api/fiximage',data) //.done(function(results){ // console.log(results) //}) } if(Number(data.runtime)>0){ self.runtime=shortEnglishHumanizer(data.runtime+'000',{ round: true }).replace(/[,\s]+/g,'') }else{ self.runtime='--' } //console.log(self.clist) self.clist=ko.computed(function(){ var scl=""; if(data.clist){ var cljson=JSON.parse('{'+data.clist+'}') for(cc in cljson){ var cname=cljson[cc] if(cc=='more'){ scl+=cname }else{ scl+="<img width='28' alt='flag' src='https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/2.7.0/flags/4x3/"+cc.toLowerCase()+".svg' title='"+cname+"' />" } } } return scl }) if(data.expires){ self.titledate='expires on '+data.expires }else if(data.cbdate){ self.titledate='new on '+data.cbdate }else{ self.titledate='globally new on '+data.titledate } self.itop=ko.computed(function(){ if(self.top250>0){ return 'movies: '+self.top250+'/250' }else if(self.top250tv>0){ return 'tv: '+self.top250tv+'/250' }else{ return '' } }) return self } var Controller = function () { var self = this; //{ expires: 7 } if(!Cookies.get('eucookie')){ self.eucookie=true Cookies.set('eucookie','stupideulaw',{ expires: 14 }) }else{ self.eucookie=false } self.alerts=ko.observableArray([]); self.parseAlerts=function(ctype){ ko.utils.arrayForEach(self.alerts(), function(alert) { if(ctype=='showalert'){ alert.isVisible(true) }else if(ctype=='hidealert'){ alert.isVisible(false); }else{ if(alert.atype()==ctype){ alert.isVisible(false); } } }); } self.alertsToShow=ko.computed(function(){ //return self.alerts(); if(self.alerts().length>0){ return ko.utils.arrayFilter(self.alerts(),function(alert){ if(alert.isVisible()) return true; }); } },self); this.showAlerts = function(elem) { //console.log('show fired'); if (elem.nodeType === 1) $(elem).hide().fadeIn() } this.hideAlerts = function(elem) { if (elem.nodeType === 1) $(elem).fadeOut(function() { $(elem).remove(); }) } self.atbname=ko.observable('Hide All Alerts'); self.toggleAlerts=function(){ self.atbname('Hide All Alerts'); self.parseAlerts('hidealert') } self.addAlert=function(type,message,timeout){ self.alerts.unshift(new alert(type,message,timeout)); } //self.addAlert('info','welcome','') self.titems=ko.observableArray() //handle variables self.adArray=ko.observableArray() self.country_andorunique=ko.observable('') self.newdate=ko.observable('') self.genrelist=ko.observableArray() self.total=ko.observable(0) self.elapse=ko.observable(0) self.qcount=ko.observable(0) self.isloading=ko.observable(true) self.netflixid=ko.observable('') self.filmid=ko.observable() self.searchquerydecoded=ko.observable("") self.searchqueryencoded=ko.observable("") self.searchquery=ko.computed(function(){ return self.searchquerydecoded() }) self.istitlepath=ko.observable(false) self.iscdetailpath=ko.observable(false) self.countryList=''; self.cookclist=Cookies.get('countrylist') self.countryArray=ko.observableArray([]) self.fullCArray=ko.observableArray([]) self.allCountries=ko.observableArray() self.testval='' self.cfc=ko.observable(0) self.start_year=ko.observable() self.end_year=ko.observable() self.audiosubtitle_andor=ko.observable('') self.start_rating=ko.observable() self.end_rating=ko.observable() self.orderby=ko.observable('') self.type=ko.observable('') self.filterby=ko.observable('') self.person=ko.observable('') self.audio=ko.observable() self.subtitle=ko.observable() self.languageArray=ko.observableArray() self.typeArray=ko.observableArray(['Movie','Series']); self.orderbyArray=ko.observableArray(['Relevance','Date','DateAsc','Rating','RatingAsc','Title','VideoType','FilmYear','FilmYearAsc','Runtime']); self.filterArray=ko.observableArray(['Expiring','New last 24 hours']) self.genreArray=ko.observableArray() self.personArray=ko.observableArray() if(!self.start_rating()){ self.start_rating(0) } if(!self.end_rating()){ self.end_rating(10) } if(!self.start_year()){ self.start_year(1900) } if(!self.end_year()){ self.end_year(curyear) } if(!self.audiosubtitle_andor()){ self.audiosubtitle_andor('or') } if(!self.country_andorunique()){ self.country_andorunique('or') } self.changeASAO=function(){ if(self.audiosubtitle_andor()=='or'){ self.audiosubtitle_andor('and') }else{ self.audiosubtitle_andor('or') } } self.changeCAOU=function(that){ if(self.country_andorunique()=='notin'){ self.country_andorunique('and') }else if(self.country_andorunique()=='and'){ self.country_andorunique('unique') }else if(self.country_andorunique()=='unique'){ self.country_andorunique('or') }else{ self.country_andorunique('notin') } } self.titemscount=ko.computed(function(){ return self.titems().length-1 }) self.offset=ko.computed(function(){ return (limit*self.qcount()) }) self.saveCountries=function(){ //console.log(self.countryArray().join(',')) Cookies.set('countrylist',self.countryArray().join(',')) $('#searchForm').modal('hide') komodel.addAlert('info','Selected Countries Saved!',3000) } self.clearAllSearch=function(){ //console.log('attempting to clear all variables') self.start_year(1900) self.end_year(curyear) self.start_rating(0) self.end_rating(10) self.genrelist([]) self.type('') self.audio('') self.subtitle('') self.audiosubtitle_andor('or') self.country_andorunique('or') self.person('') self.orderby('') self.filterby('') self.searchquerydecoded('') self.checkCountries() self.updatePicker() } self.queryString=ko.computed(function(){ sfieldArray=['country_andorunique','start_year','end_year','start_rating','end_rating','genrelist','type','audio','subtitle','audiosubtitle_andor','person','filterby','orderby'] qsArray=new Array() for(i in sfieldArray){ field=sfieldArray[i] if(self[field]()){ qsArray.push(field+'='+self[field]()) } } if(self.countryArray().length>0){ qsArray.push("countrylist="+self.countryArray().join(',')) } return qsArray.join('&') }) self.opt=ko.observable(0) self.query=ko.computed(function(){ var q='limit='+limit+'&offset='+self.offset() if(path=='search'){ q+="&query="+self.searchquery() q+="&countrylist=" q+='&country_andorunique=' q+='&start_year=' q+='&end_year=' q+='&start_rating=' q+='&end_rating=' q+='&genrelist=' q+='&type=' q+='&audio=' q+='&subtitle=' q+='&audiosubtitle_andor=' q+='&person=' q+='&personid=' q+='&filterby=' q+='&orderby=' return q }else{ fpoptions=['top250tv','top250','new last 10 days'] if(self.offset()==0){ self.opt((Math.floor(Math.random() * fpoptions.length) + 1)-1) } return q+"&query="+fpoptions[self.opt()] } }) self.goBasicSearch=function(){ window.location.replace("/search/"+self.searchquery()+"?countrylist="+self.countryArray().join(',')) } self.goAdvancedSearch=function(){ window.location.replace("/search/"+self.searchquery()+'?'+self.queryString()) } self.titleIsLoading=ko.observable(false) self.titleIsLoaded=ko.computed(function(){ if(self.titleIsLoading()){ return false }else{ return true } }) self.openTitle=function(){ self.titlearray([]) self.titleIsLoading(true) self.path="/api/title/detail?netflixid="+self.netflixid() $.get(self.path,function(retjson){ if(retjson.length==1){ self.titletemplate('titleinfo') self.titlearray.push(new titleItem(retjson[0])) }else{ komodel.addAlert('warning','No Title found for id '+self.netflixid()+'! <a href="/search" class="btn btn-primary btn-xs">Back To Search</a>') } self.titleIsLoading(false) window.JustWatch.reloadWidgets() }) } self.openModalTitle=function(that){ self.netflixid(that.netflixid) $('#titleDetails').modal('show') self.titledirectpath("Direct Path:<a href='/"+that.vtype+"/"+that.netflixid+"/"+that.slug+"'>/"+that.vtype+"/"+that.netflixid+"/"+that.slug+"</a>") if(self.netflixid()){ self.openTitle() } } self.addTitles=function(){ if(!self.isloading() && self.offset()<self.total()){ self.loadTitles() } } self.vpninfo=new Object; self.vpnarray=ko.observableArray() self.buildAds=function(data){ //console.log(data) for(var adname in data){ if(data[adname].countries.length>0){ self.vpninfo[adname]=data[adname] self.vpnarray.push(data[adname]) } for(t in data[adname].templates){ t_obj=data[adname].templates[t] //console.log('pushing object to adArray:'+adname) self.adArray.push({"template":t_obj.ad,"url":'/ad/'+adname+'/banner',"img":t_obj.img}) } } } self.buildCountryArray=function(data){ self.fullCArray(data); if(self.countryList){ Cookies.set('countrylist',self.countryList) }else if(self.cookclist){ self.countryList=self.cookclist; }else{ self.countryList=self.fullCArray().join(',') Cookies.set('countrylist',self.countryList) } self.filterCountries(self.allCountries,JSON.parse('['+self.countryList+']'),self.cfc) } self.loadAllCountries=function(data){ for(i in data['results']){ self.allCountries.push(new aCountryItem(data['results'][i],self)) } } self.updatePicker=function(){ //console.log('refreshing select picker') $('.selectpicker').selectpicker('refresh') } self.buildPage=function(ltfunc){ genrelist='' if(genrelist){ $.get('/api/select/genre?id='+genrelist,function(data){ self.genreArray(data) self.genrelist(genrelist.split(',')) }) } if(self.person()){ self.personArray.push(self.person()) } $.get('/api/static/all',function(data){ //console.log(data.adinfo) self.buildAds(data.adinfo) self.loadAllCountries(data.countries) self.buildCountryArray(data.clist) self.languageArray(data.languages) //console.log(data.persons) //self.personArray(data.persons) self.audio('') self.subtitle('') //need to process these after the arrays have been built ltfunc() }) } self.vpntitle=ko.observable() self.vpnselected=ko.observable() self.vpnFilterMessage=ko.observable() self.countryFilterMessage=ko.computed(function(){ return 'Selected '+self.countryArray().length+'/'+self.fullCArray().length+' Countries' }) self.showVPN=function(that){ self.vpnselected(that.name) self.vpntitle(that.title) self.vpnFilterCountries(self.allCountries,that.countries,self.cfc) } self.checkCountries=function(){ self.vpnselected(false) self.filterCountries(self.allCountries,self.fullCArray(),self.cfc) } self.unCheckCountries=function(){ self.vpnselected(false) self.filterCountries(self.allCountries,[],self.cfc) } self.selectVPN=function(that){ if(self.vpnselected()){ self.vpntitle(self.vpninfo[self.vpnselected()].title) self.vpnFilterCountries(that.countries,self.vpninfo[self.vpnselected()].countries) }else{ self.vpnFilterCountries(that.countries,self.fullCArray()) self.vpntitle('') } }; self.vpnfc=ko.observable(0) self.vpnFilterCountries=function(obsarray,vpnarray){ self.filterCountries(obsarray,vpnarray,self.vpnfc) if(self.vpnselected()){ self.vpnFilterMessage('filtered '+self.vpnfc()+'/'+obsarray().length+' countries for this vpn') }else{ self.vpnFilterMessage('') } } self.filterCountries=function(obsarray,clistarray,fc){ fc(0) ko.utils.arrayForEach(obsarray(),function(item){ if(clistarray.indexOf(item.cid)>=0){ item.isVisible(true) fc(fc()+1) }else{ item.isVisible(false) } }) } self.searchbtntxt=ko.observable('Update Countries') self.toggleSearch=function(){ if(self.searchbtntxt()=='Update Countries'){ self.searchbtntxt('Show Search') $('#countrycollapse').collapse('show') $('#searchwell').collapse('hide') }else{ self.searchbtntxt('Update Countries') $('#countrycollapse').collapse('hide') $('#searchwell').collapse('show') } } //plase holder for submitmissing defaultmsg='Format: nfid,nfid or line break separated list of links' self.isSMForm=ko.observable(true) self.isSMSubmit=ko.observable(false) self.smStatus=ko.observable('info') self.smMessage=ko.observable(defaultmsg) self.smcc=ko.observable() self.smuser=ko.observable() self.smlistraw=ko.observable() self.smlist=ko.observableArray() addTitle=function(data){ self.isSMForm(false) self.smStatus('warning') self.smMessage('Adding Titles...') $.post('/api/submitmissing',data) .done(function(results){ data['result']=results //self.actionmsg("<span class='alert alert-"+results.status+"'>"+results.message+"</span>") self.smlist.push(new missingTitle(data)) }) } self.retMessage=ko.computed(function(){ if(self.smMessage()){ return '<div class="alert alert-'+self.smStatus()+'">'+self.smMessage()+'</div>' }else{ return '' } }) self.submitMissing=function(){ self.smMessage(false) self.smStatus('danger') if(self.smlistraw()){ if(self.smlistraw().match(/^[\d,]+$/)){ ids=self.smlistraw().split(',') for(i in ids){ addTitle({"netflixID":ids[i],"countryCode":self.smcc(),"user":self.smuser()}) } }else if(self.smlistraw().match(/.*[\d]+\n/)){ lines=self.smlistraw().split("\n") for(i in lines){ rxindex=lines[i].match(/.*?([\d]+)$/) if(rxindex[1]){ addTitle({"netflixID":rxindex[1],"countryCode":self.smcc(),"user":self.smuser()}) } } }else{ self.smMessage("Invalid Format! Please enter a valid list e.g. nfid,nfid,nfid") } }else{ self.smMessage('Error: Please specify a valid list e.g. nfid,nfid,nfid') } } self.resetSM=function(){ self.smStatus('info') self.smMessage(defaultmsg) self.isSMForm(true) self.smlistraw('') self.smlist([]) } self.loadTitles=function(){ self.addAlert('loading','Loading Titles...') self.isloading(true) $.get('/api/search?'+self.query(),function(data){ self.parseAlerts('loading') self.isloading(false) if(data.total){ self.total(data.total) }else if(data.status){ self.addAlert('danger',data.status) } //console.log('load complete') //console.log(self.adArray()) //console.log(self.adArray().length) if(self.qcount()==0 && path=='search'){ if(self.total()=='0'){ self.addAlert('danger','No titles found for this search, please try again!') self.titems.push(new adItem({'template':'searchResults','status':Number(self.total())>0 ? 'info' : 'danger'})) //self.titems.push(new adItem(self.adArray[1])) }else{ //console.log('should be adding the alert here!') self.titems.push(new adItem({'template':'searchResults','status':Number(self.total())>0 ? 'info' : 'danger'})) self.addAlert('success',"Found "+self.total()+" titles matching your search!",100000) } }else if(self.adArray()[self.qcount()] && self.qcount()>0){ self.titems.push(new adItem(self.adArray()[self.qcount()])) } self.elapse(data.elapse) for(i in data.results){ self.titems.push(new tItem(data.results[i])) } self.qcount(self.qcount()+1) }) } self.openCountryDetails=function(){ self.isloading(false) } self.cdclass=ko.observable() self.srchclass=ko.observable() self.titletemplate=ko.observable() self.titledirectpath=ko.observable() self.titlearray=ko.observableArray() if(path=='cdetail'){ self.iscdetailpath(true) self.buildPage(self.openCountryDetails) self.cdclass('active') }else if(path=='title'){ self.isloading(false) self.titleIsLoading(true) self.istitlepath(true) self.buildPage(self.openTitle) }else{ self.srchclass('active') self.buildPage(self.loadTitles) } return self }; updateToken=function(){ $.post('/api/user','user_name='+(new Date() / 1000),function(result){ Cookies.set('authtoken',result['token']['access_token']) //console.log(result) window.location.replace(window.location.href) }).fail(function(){ //console.log('failed user get') }); } if(Cookies.get('authtoken')){ $.get('/api/user',function(data){ if(data.user){ komodel = new Controller(); ko.applyBindings(komodel); }else{ updateToken() } }).fail(function(){ updateToken() }) }else{ updateToken() } //if($(window).scrollTop()==0){ // $("html, body").animate({ scrollTop: 500}, 600); //} $(document).on( 'scroll', function(){ if ($(window).scrollTop() > 100) { $('.scroll-top-wrapper').addClass('show'); } else { $('.scroll-top-wrapper').removeClass('show'); } }); $('.scroll-top-wrapper').on('click', scrollToTop); function scrollToTop() { $("html, body").animate({ scrollTop: 0 }, "slow"); } }); </script> <script type="text/html" id="searchResults"> <!-- <div style="display:block" > <div class="alert" data-bind="class:'alert-'+status" role="alert" style="display:block;margin:auto;max-width:900px"> Your search for "<span data-bind="html:$root.searchqueryencoded"></span>" found <strong><span data-bind="html:$root.total"></span></strong> Results! <button class="btn btn-primary btn-xs" data-toggle="modal" data-target="#searchForm" data-bind="click:$root.updatePicker">More Details</button> </div> </div> --> </script> <script type="text/html" id="titlepageobject"> <object data-bind="attr:{data: titleobjectpath}" width="100%" height="100%" type="text/html"></object> </script> <script type='text/html' id='titlediv'> <div data-bind="template:itemtemplate,class:itemclass"></div> </script> <script type='text/html' id='titleitem'> <div class="videodiv img-rounded" data-bind="click:$root.openModalTitle"> <img height="233" width="166" class="img-rounded" alt="boxart" data-bind="attr:{src: img} "src="" /> <div> </div> <div class="itop" data-bind="html:itop"></div> <div style="height:183px;width:189px;margin-top:10px;display:inline-block;overflow:hidden"> <H3 style="font-size: 14px;margin:3px"> <a data-bind="attr:{href: titlepath}" style="color: #000"> <b><span data-bind="html:title"></b></span></a> (<span data-bind="html:vtype"></span>,<span data-bind="html:year"></span>) </h3> <span data-bind="html:synopsis"></span> </div> <br><b><span data-bind="html:titledate"></span></b> <br> <div class="small">Runtime:<b><span data-bind="html:runtime"></span></b></div> <div class="sclist img-rounded" data-bind="html:clist"></div> </div> </script> <script type="text/html" id="country"> <div data-bind="attr:{id:cid},visible:isVisible" class="img-rounded clistdiv"> <img style="float:none" width="32" data-bind="attr:{src:flagimg}" alt="countryimage"> <span class="countryname" data-bind="html:country"></span><br> <div data-bind="foreach:cdetlist"> <div> <span data-bind="html:title"></span>:<span class="strong" data-bind="html:list"></span> <button type=button class='sm btn btn-default btn-xs' data-bind="{visible:isshow,html:morehtml,click:showall}"></button> <button type=button class='sl btn btn-default btn-xs' data-bind="{visible:ishide,click:hideall}"><span class='glyphicon glyphicon glyphicon-chevron-left' aria-hidden='true'></span></button> </div><br> </div> </div> </script> <script type="text/html" id="seasonlist"> <div style="text-align:center" data-bind="visible:isseries"> <!-- ko ifnot:seasons().length --> <br><br> <span><span class='glyphicon glyphicon glyphicon-repeat gly-spin' style="color:#d90d0a;" aria-hidden='true'></span> Loading Seasons...</span> <!-- /ko --> <!-- ko if:seasons().length --> <br> <button class="btn btn-primary btn" data-toggle="collapse" data-target="#seasonlist">Show Season/Episodes Details</button> <div class="collapse" id="seasonlist" data-bind="foreach:seasons"> <div width=100% class='img-rounded' style='padding:2px;border:1px solid #ddd;margin-bottom:2px;background-color:#eee;'> <div style='width:300px;display:inline-block;'> Season <span data-bind="html:seasnum"></span> Contains <span data-bind="html:episodes().length"></span> episodes </div> <div style='display:inline-block'><button class="btn btn-primary btn-xs" data-toggle="collapse" data-bind="attr:{'data-target':'#'+eptarget}">Show Details</button></div> <div class="collapse" class="listdiv" data-bind="attr:{id:eptarget},foreach:episodes"> <div style='text-align:center;width:266px;border:1px solid #999;margin:2px; display:inline-block;vertical-align:top'> <div data-bind="html:'Episode '+epnum"></div> <div><img data-bind="attr:{src:img}"/></div> <div style='display:inline-block;text-align:left;padding:2px'><b><span data-bind="html:title"></span></b><br><span data-bind="html:synopsis"></span></div> </div> </div> </div> </div> <!-- /ko --> </div> </script> <script type="text/html" id="titleinfo"> <div class="modal fade" id="artworkModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog custom-class" role="document"> <div class="modal-content"> <div class="modal-header alert-primary"> <div id=cseltop class="modal-title" style='text-align:center;'> <h2>All Images For <span data-bind="html:title"></span></h2> </div> </div> <div class="modal-body" style='height:calc(100vh - 235px);overflow:auto'> <div id=artworkdiv></div> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary" id=bccancel data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Close</button> </div> </div> </div> </div> <div class='hidden-md hidden-lg vidspacer'></div> <div class='videopage modal-body' data-bind="visible:$parent.titleIsLoaded"> <div class="bbcontainer"> <div class="billboardback"></div> <div class="billboardbg" style="display: block"></div> <div class="billboard img-rounded"> <div class="container"> <div style="position:relative;" class="media-left"> <img id="poster" class="hidden-xs hidden-sm img-rounded media-object" style="max-width:300px" data-bind="attr:{src:img}" alt="" /> <div style="position:absolute;bottom:3px;text-align:center;width:100%"><button data-toggle="modal" data-target="#artworkModal" class="btn btn-primary btn-sm hidden-xs hidden-sm">Show All Images</button></div> </div> <div class="media-body"> <h1 id="vtitle" class="media-heading dropshadowBlack" style="font-size: 24px"><span data-bind="html:title"></span><font size="2"> (<span data-bind="html:year"></span>)</font></h1> <div> <ul class="nav nav-tabs" role="tablist"> <li role="presentation" class="dropshadowWhite active"><a href="#nftab" aria-controls="nftab" role="tab" data-toggle="tab" aria-expanded="false">Netflix</a></li> <li role="presentation" class="dropshadowWhite"><a href="#imdbtab" aria-controls="imdbtab" role="tab" data-toggle="tab" aria-expanded="true">IMDB</a></li> </ul> <div class="tab-content dropshadowBlack"> <div role="tabpanel" class="tab-pane fade active in" id="nftab"> <p id="nfplot" class="" data-bind="html:synopsis"></p> <p id="nfdetails"> maturity:<b> <span data-bind="html:maturity"></span></b><br> type:<b> <span data-bind="html:vtype"></span></b><br> updated:<b> <span data-bind="html:curdate"></span></b><br> new to uNoGS:<b> <span data-bind="html:nfdate"></span></b><br> runtime:<b> <span data-bind="html:runtime"></span></b> </p> </div> <div role="tabpanel" class="tab-pane fade" id="imdbtab"> <input type="hidden" id="imdbid" value="imdbid"> <p id="imdbplot" class="img-rounded"><span data-bind="html:imdbplot"></span></p> <p id="imdbrating"><div>Rating: <span data-bind="html:imdbrating"></span> / 10</div></p> <p id="imdbdetails"> <span data-bind="html:imdbinfo"></span> </p> </div> </div> </div> </div> <div class="container"> <div style="text-align:center"> <a id="wnbutton" data-bind="attr:{href:netflixpath}" target="_blank" class="btn btn-lg btn-primary">Watch Now</a> <button class="btn btn-primary btn-lg" data-toggle="collapse" data-target="#nordvpninfo" id="chvpn">It's Not in my Country!</button> </div> <!-- <div style="text-align: center;"> <div style="width: 340px;display:inline-block;border: 0px solid #ccc"> <span class="dropshadowBlack">Subscribe, Rent or Buy...</span> <div data-bind="attr:{'data-id':imdbid,'data-object-type': jwvtype}" data-jw-widget data-api-key="fz8ooX6Dwu9VW8WIUAOZvelIB5tBiUyd" data-max-offers="5" data-no-offers-message="No offers for on JustWatch at this time!" data-title-not-found-message="No offers on JustWatch at this time!" data-id-type="imdb"> </div> <a target="_blank" data-original="https://www.justwatch.com" href="https://www.justwatch.com"><img alt="JustWatch" height="11px" src="https://widget.justwatch.com/assets/JW_logo_color_10px.svg"></a> </div> </div> --> </div> </div> </div> </div> <div data-bind="template:{name:'nordvpnAd'}"></div> <div class="container"> <div class="well" style="margin-bottom:0px"> <!-- ko ifnot:genres().length --> <div><span class='glyphicon glyphicon glyphicon-repeat gly-spin' style="color:#d90d0a;" aria-hidden='true'></span> Loading Genres...</div> <!-- /ko --> <div data-bind="foreach:genres"> <span data-bind="visible:url"> <a data-bind="attr:{href:url}">#<span data-bind="html:genre"></span></a> </span> </div> <!-- ko ifnot:people().length --> <div><span class='glyphicon glyphicon glyphicon-repeat gly-spin' style="color:#d90d0a;" aria-hidden='true'></span> Loading People...</div> <!-- /ko --> <div data-bind="foreach:people"> <div data-bind="visible:type"> <span data-bind="html:type"></span>: <span data-bind="foreach:people"> <a data-bind="attr:{href:'/person/'+fullname}"> <span data-bind="html:fullname"></span></a> | </span><br> </div> </div> </div> </div> <div data-bind="template:{name:'seasonlist'}"></div> <div class="container"> <!-- ko ifnot:countries().length --> <br><br> <span><span class='glyphicon glyphicon glyphicon-repeat gly-spin' style="color:#d90d0a;" aria-hidden='true'></span> Loading Countries...</span> <!-- /ko --> <!-- ko if:countries().length --> <h4>This Title is found in <span data-bind="html:countries().length"></span> Countries</h4> <select data-style="btn-primary" data-bind="value:$root.vpnselected,options:$parent.vpnarray,optionsText:'title',optionsValue:'name',optionsCaption: 'Filter by VPN',selectPicker:{},event:{change:$root.selectVPN}"></select> <a class="btn btn-info" data-bind="visible:$root.vpnselected,attr:{href:'/ad/'+$root.vpnselected()+'/select'},html:'Find out more about '+$root.vpntitle()" target=_blank></a> <br><div data-bind="visible:$root.vpnFilterMessage,html:$root.vpnFilterMessage"></div> <div class="listdiv" data-bind="template:{name:'country',foreach:countries}"></div> <!-- /ko --> <br><br> </div> </div> </script> <script type='text/html' id='alertmsg'> <div data-bind="attr:{class:aclass}" style="margin-bottom:2px" role="alert"> <button class="close" data-bind="click:close" aria-label="close"><span aria-hidden="true">×</span></button> <span data-bind="attr:{class:icon}" aria-hidden="true"></span> <span class="sr-only">Error:</span> <span data-bind="html:amsg"></span> </div> </script> <script type="text/html" id='basicAd'> <div style="display:block" class="hidden-xs hidden-sm"> <div style="display:block;margin:auto;width:728px"> <a data-bind="attr:{href:url}" target="_blank"><img alt="ad" class="" style="border:0px" data-bind="attr:{src:img}" width="728" height="90" alt=""></a> </div> </div> </script> <script type="text/html" id="nordvpnAd"> <style> .d-flex { align-items: center; display: flex; } .sub-hdg { font-size: 35px; } .univ-btn { background-color: #ff0024; } .btn-container .univ-btn { font-size: 20px; color: #fff; border: 0; line-height: 70px; height: 70px; display: inline-block; max-width: 300px; min-width: 300px; width: 100%; box-shadow: 0 5px 15px 2px rgb(0 0 0/10%); border-radius: 50px; font-family: avenir-heavy,Times,serif; transition: all .3s ease; text-decoration: none; text-align: center; text-shadow: 0 1px 3px rgb(0 0 0/40%); } </style> <div id=nordvpninfo class="collapse" style='margin-bottom:10px;border-bottom: 1px solid #ccc;background-color:#EDF3FF;text-align:center'> <div class="container"></div> <div class="container"> <div class="row"> <div class="col-md-6"> <div class="sec-img-box"><img loading="lazy" alt="alt2" class="img-responsive img-center" src="https://s1.nordcdn.com/nordvpn/media/1.1329.0/images/features-hub/child/streaming/hero-male-female-stream-isp-beanbag.svg"></div> </div> <div class="col-md-4" style="padding-top:50px"> <span class="sub-hdg">Best VPN for streaming movies and other content</span> <p class="para">Watch your favorite shows without any slowdown.</p> <div class="btn-container mt-35"> <a href="/ad/nord/main" class="univ-btn scrollCart.red">Get NordVPN<span class="btn-arrow"></span> </a> </div> <br><small>Get more than just a VPN</small> </div> </div> </div> </div> </script> <script type="text/html" id="purevpnAd"> <style> .d-flex { align-items: center; display: flex; } .sub-hdg { font-size: 35px; } .univ-btn { background-color: #ff0024; } .btn-container .univ-btn { font-size: 20px; color: #fff; border: 0; line-height: 70px; height: 70px; display: inline-block; max-width: 300px; min-width: 300px; width: 100%; box-shadow: 0 5px 15px 2px rgb(0 0 0/10%); border-radius: 50px; font-family: avenir-heavy,Times,serif; transition: all .3s ease; text-decoration: none; text-align: center; text-shadow: 0 1px 3px rgb(0 0 0/40%); } </style> <div id=purevpninfo class="collapse" style='margin-bottom:10px;border-bottom: 1px solid #ccc;'> <div class="container"> <div class="row"> <div class="col-md-6"> <div class="sec-img-box"><img loading="lazy" alt="alt2" class="img-responsive img-center" src="https://images.purevpn-tools.com/public/images/revert-streaming-ppc-image_new.png"></div> </div> <div class="col-md-4" style="padding-top:50px"> <span class="sub-hdg">Say Goodbye to <br>Geo-Restrictions</span> <p class="para">Don’t let regional content blocks keep you from enjoying your favorite online shows, movies and sports in your country.</p> <div class="btn-container mt-35"> <a href="/ad/purevpn" class="univ-btn scrollCart.red">Get PureVPN<span class="btn-arrow"></span> </a> </div> <br><small>31-Day Money Back Guarantee</small> </div> </div> </div> </div> </script> <script type="text/html" id="expressAd"> <div id=expressvpninfo class="collapse" style='margin-bottom:10px;border-bottom: 1px solid #ccc;'> <div class="container"> <span>It's not in my country, what can I do?</span> <div style='padding-bottom:10px'> No matter where you currently are, the films or shows you an access are limited. Netflix never gives you access to their full library of content. However, with a VPN, you can go on the internet as if you are in another conuntry and it allows you to access more of the streaming library. uNoGS are now proudly working with <a href='/ad/expressvpn' target=_blank>ExpressVPN</a> to bring you an unrestricted streaming experience! Follow the steps below and start streaming now! </div> </div> <div class="container"> <div class="row"> <div class="col-md-3 evpnsteps"> <span>Step 1</span> <div class='evpnimgdiv'> <img alt="evpnad" style='width:260px;padding-top:30px' src='/images/evpngeneral.png' /> </div> <div class='evpntxtdiv'><a href='https://unogs.com/ad/expressvpn' target=_blank>Sign up for ExpressVPN</a>, with its blazing-fast speeds.</div> </div> <div class="col-md-1"></div> <div class="col-md-3 evpnsteps"> <span>Step 2</span> <div class='evpnimgdiv'> <img alt="computer" src='/images/evpnComputer.png' /> </div> <div class='evpntxtdiv'>Connect to the appropriate Express VPN server location</div> </div> <div class="col-md-1"></div> <div class="col-md-3 evpnsteps"> <span>Step 3</span> <div class='evpnimgdiv'> <img alt="evpnnetflix" style='width:220px' src='/images/evpnnetflix.png' /> </div> <div style='width:180px' class='evpntxtdiv'>Log in to your existing Netflix account</div> </div> </div> </div> <div class='container'> <div style='padding-top:20px;padding-bottom:20px'> <div class="col-md-3"><span class="glyphicon glyphicon glyphicon-ok" style="color:green" aria-hidden="true"></span> Watch Netflix From Anywhere</div> <div class="col-md-3"><span class="glyphicon glyphicon glyphicon-ok" style="color:green" aria-hidden="true"></span> Fastest Speeds</div> <div class="col-md-3"><span class="glyphicon glyphicon glyphicon-ok" style="color:green" aria-hidden="true"></span> Servers in 94 Countries</div> <div class="col-md-2"><span class="glyphicon glyphicon glyphicon-ok" style="color:green" aria-hidden="true"></span> Use Any Device</div> </div> </div> <div class='container'> <div style='text-align:center;padding-top:10px'> <div style='width:350px;display:inline-block'> <span>Watch every Netflix show and movie available<span> <a href='https://unogs.com/ad/expressvpn' target=_blank class='btn btn-lg' style="width:300px;background-color:#c7252c;color:#fff">Get ExpressVPN <span class="glyphicon glyphicon-circle-arrow-right" style="color:#fff" aria-hidden="true"></span></a> <div style='color:#999;font-size:14px;padding:5px'>30-Day Money-Back Guarantee</div> </div> </div> </div> </div><!-- end expressvpninfo--> </script> <!-- FOOTER --> <!-- <div style="width:100%;text-align:center"> <div>=== Interesting Items from Around the Internet ===</div> <div style="display:inline-block;height:204px"> <div id="zergnet-widget-86715"></div> </div> <div style="display:inline-block;height:204px"> <div id="zergnet-widget-86712"></div> </div> <div style="display:inline-block;height:204px"> <div id="zergnet-widget-86713"></div> </div> <div style="display:inline-block;height:204px"> <div id="zergnet-widget-86714"></div> </div> </div> <! <hr> <div style="text-align:center;margin-top:50px;"> <div style="display:inline-block;width:80%;" id="zergnet-widget-86732"></div> </div> <hr> <script language="javascript" type="text/javascript"> (function() { var zergnet = document.createElement('script'); zergnet.type = 'text/javascript'; zergnet.async = true; zergnet.src = (document.location.protocol == "https:" ? "https:" : "http:") + '//www.zergnet.com/zerg.js?id=86732'; var znscr = document.getElementsByTagName('script')[0]; znscr.parentNode.insertBefore(zergnet, znscr); })(); </script> --> <footer class='footer'> <div class='container'> <br> <!-- Three columns of text below the carousel --> <div class='row'> <div class='col-sm-3'> <p>Special Thanks To:<br> <!--<a href='https://www.IconDrawer.com' target=_blank>www.IconDrawer.com</a><br>--> <a href='https://www.omdbapi.com/' target=_blank>www.omdapi.com</a><br> <a href='http://flag-icon-css.lip.is/' target=_blank>flag-icon-css.lip.is</a> </p> </div> <div class='col-sm-3 hidden-xs hidden-sm'> <p>Links:<br> <a href='/'>Home</a><br> <a href='/search/new last 24 hours'>What's New</a><br> <a href='https://forum.unogs.com/topic/170/tos'>Terms of Service</a><br> <a href='https://forum.unogs.com'>uNoGS Forum</a><br> <a href='https://rapidapi.com/unogs/api/unogsng' target=_blank>uNoGS Netflix API</a><br> <a href="/sitemap.xml">Full Site Map</a> </p> </div><!-- /.col-lg-4 --> <div class='col-sm-3 hidden-xs hidden-sm'> <p>VPN Providers:<br> <a target=_blank href='https://unogs.com/ad/nord/banner'>NordVPN</a><br> <a target=_blank href='https://billing.purevpn.com/aff.php?aff=15055'>Pure VPN</a><br> <a target=_blank href='https://unogs.com/ad/expressvpn/banner'>Express VPN</a><br> <a target=_blank href='https://get.surfshark.net/aff_c?offer_id=6&aff_id=1114&url_id=78'>SurfShark</a><br> <a target=_blank href='https://www.getflix.com.au/affiliates//affiliate.php?id=1956_0_1_17'>GETFLIX</a><br> <a target=_blank href='https://billing.ivacy.com/page/22565'>Ivacy VPN</a><br> </div> <div class='col-sm-3 hidden-xs hidden-sm'> <p>Contact:<br> <a title='Send us an email!' href=mailto:[email protected]>[email protected]</a><br> <a href='https://www.reddit.com/message/compose/?to=unogs' title='Contact on reddit!' onclick="window.location = '//www.reddit.com/submit?url=' + encodeURIComponent(window.location); return false"> <img src='//www.redditstatic.com/spreddit5.gif' alt='submit to reddit' border='0' /> </a> <a style='margin-top:3px' class='btn btn-sm btn-primary' href='https://paypal.me/unogs' target=_blank>Donate!</a><br> </p> </div><!-- /.col-lg-4 --> </div><!-- /.row --> <div class='container' style='text-align:center'>unofficial Netflix online Global Search 2025</div> </div> </footer> <!-- advertising nBIWpZddFu-D6SRhxftA0jYP1b-xHDPS4ayQ8ve6eiFyQIHgDyHTyAx-dFKNX77JwTUxEA499FTf3J8lMunZAA==--> <!-- <script data-cfasync="false" id="clevernt" type="text/javascript"> (function (document, window) { var c = document.createElement("script"); c.type = "text/javascript"; c.async = !0; c.id = "CleverNTLoader51333"; c.setAttribute("data-target",window.name); c.setAttribute("data-callback","put-your-callback-macro-here"); c.src = "//clevernt.com/scripts/7b0d12304eb2c2295951611c20d80f5d.min.js?20210615=" + Math.floor((new Date).getTime()); var a = !1; try { a = parent.document.getElementsByTagName("script")[0] || document.getElementsByTagName("script")[0]; } catch (e) { a = !1; } a || ( a = document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]); a.parentNode.insertBefore(c, a); })(document, window); </script> <!-- end advertising --> </body> </html>