feat(extractor): add YouTube extractor
This commit is contained in:
parent
f58c30299a
commit
5e6c71f4ad
20 changed files with 2605 additions and 3 deletions
21
src/extractor/YouTube.test.ts
Normal file
21
src/extractor/YouTube.test.ts
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
import winston from 'winston';
|
||||
import { createTestContext } from '../test';
|
||||
import { CountryCode } from '../types';
|
||||
import { FetcherMock } from '../utils';
|
||||
import { ExtractorRegistry } from './ExtractorRegistry';
|
||||
import { YouTube } from './YouTube';
|
||||
|
||||
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'nope' })] });
|
||||
const extractorRegistry = new ExtractorRegistry(logger, [new YouTube(new FetcherMock(`${__dirname}/__fixtures__/YouTube`))]);
|
||||
|
||||
const ctx = createTestContext();
|
||||
|
||||
describe('YouTube', () => {
|
||||
test('Solaris', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://www.youtube.com/watch?v=Z8ZhQPaw4rE'), CountryCode.en)).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('unsupported format', async () => {
|
||||
expect(await extractorRegistry.handle(ctx, new URL('https://youtu.be/Z8ZhQPaw4rE?feature=shared'), CountryCode.en)).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
42
src/extractor/YouTube.ts
Normal file
42
src/extractor/YouTube.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import { Context, CountryCode, Format, UrlResult } from '../types';
|
||||
import { Fetcher } from '../utils';
|
||||
import { Extractor } from './Extractor';
|
||||
|
||||
export class YouTube extends Extractor {
|
||||
public readonly id = 'youtube';
|
||||
|
||||
public readonly label = 'YouTube';
|
||||
|
||||
private readonly fetcher: Fetcher;
|
||||
|
||||
public constructor(fetcher: Fetcher) {
|
||||
super();
|
||||
|
||||
this.fetcher = fetcher;
|
||||
}
|
||||
|
||||
public supports(_ctx: Context, url: URL): boolean {
|
||||
return null !== url.host.match(/youtube/) && url.searchParams.has('v');
|
||||
}
|
||||
|
||||
protected async extractInternal(ctx: Context, url: URL, countryCode: CountryCode): Promise<UrlResult[]> {
|
||||
const html = await this.fetcher.text(ctx, url);
|
||||
|
||||
const titleMatch = html.match(/"title":{"runs":\[{"text":"(.*?)"/) as string[];
|
||||
|
||||
return [
|
||||
{
|
||||
url,
|
||||
format: Format.unknown,
|
||||
ytId: url.searchParams.get('v') as string,
|
||||
label: this.label,
|
||||
sourceId: `${this.id}_${countryCode}`,
|
||||
ttl: this.ttl,
|
||||
meta: {
|
||||
countryCodes: [countryCode],
|
||||
title: titleMatch[1] as string,
|
||||
},
|
||||
},
|
||||
];
|
||||
};
|
||||
}
|
||||
84
src/extractor/__fixtures__/YouTube/https:www.youtube.comwatchvZ8ZhQPaw4rE
generated
Normal file
84
src/extractor/__fixtures__/YouTube/https:www.youtube.comwatchvZ8ZhQPaw4rE
generated
Normal file
File diff suppressed because one or more lines are too long
23
src/extractor/__snapshots__/YouTube.test.ts.snap
Normal file
23
src/extractor/__snapshots__/YouTube.test.ts.snap
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing
|
||||
|
||||
exports[`YouTube Solaris 1`] = `
|
||||
[
|
||||
{
|
||||
"format": "unknown",
|
||||
"label": "YouTube",
|
||||
"meta": {
|
||||
"countryCodes": [
|
||||
"en",
|
||||
],
|
||||
"height": undefined,
|
||||
"title": "Solaris | SCIENCE FICTION | FULL MOVIE | directed by Tarkovsky",
|
||||
},
|
||||
"sourceId": "youtube_en",
|
||||
"ttl": 900000,
|
||||
"url": "https://www.youtube.com/watch?v=Z8ZhQPaw4rE",
|
||||
"ytId": "Z8ZhQPaw4rE",
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
||||
exports[`YouTube unsupported format 1`] = `[]`;
|
||||
|
|
@ -15,6 +15,7 @@ import { Uqload } from './Uqload';
|
|||
import { VidSrc } from './VidSrc';
|
||||
import { VixSrc } from './VixSrc';
|
||||
import { XPrime } from './XPrime';
|
||||
import { YouTube } from './YouTube';
|
||||
|
||||
export * from './Extractor';
|
||||
export * from './ExtractorRegistry';
|
||||
|
|
@ -34,5 +35,6 @@ export const createExtractors = (fetcher: Fetcher): Extractor[] => [
|
|||
new VidSrc(fetcher, ['in', 'pm', 'net', 'xyz', 'io', 'vc']), // https://vidsrc.domains/
|
||||
new VixSrc(fetcher),
|
||||
new XPrime(fetcher),
|
||||
new YouTube(fetcher),
|
||||
new ExternalUrl(fetcher), // fallback extractor which must come last
|
||||
];
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ export interface UrlResult {
|
|||
url: URL;
|
||||
format: Format;
|
||||
isExternal?: boolean;
|
||||
ytId?: string;
|
||||
error?: unknown;
|
||||
label: string;
|
||||
sourceId: string;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import { createExtractors, Extractor, ExtractorRegistry } from '../extractor';
|
|||
import { Source, SourceResult } from '../source';
|
||||
import { MeineCloud } from '../source/MeineCloud';
|
||||
import { MostraGuarda } from '../source/MostraGuarda';
|
||||
import { PrimeWire } from '../source/PrimeWire';
|
||||
import { createTestContext } from '../test';
|
||||
import { BlockedReason, CountryCode, Format, UrlResult } from '../types';
|
||||
import { FetcherMock } from './FetcherMock';
|
||||
|
|
@ -17,6 +18,7 @@ const ctx = createTestContext({ de: 'on', it: 'on' });
|
|||
|
||||
const meineCloud = new MeineCloud(fetcher);
|
||||
const mostraGuarda = new MostraGuarda(fetcher);
|
||||
const primeWire = new PrimeWire(fetcher);
|
||||
|
||||
describe('resolve', () => {
|
||||
test('returns info as stream if no sources were configured', async () => {
|
||||
|
|
@ -68,6 +70,14 @@ describe('resolve', () => {
|
|||
expect(streamsWithExternalUrls.streams).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('returns ytId instead of url for YouTube video', async () => {
|
||||
const streamResolver = new StreamResolver(logger, new ExtractorRegistry(logger, createExtractors(fetcher)));
|
||||
|
||||
const streams = await streamResolver.resolve(ctx, [primeWire], 'movie', new ImdbId('tt0069293', undefined, undefined));
|
||||
expect(streams.ttl).not.toBeUndefined();
|
||||
expect(streams.streams).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('adds error info', async () => {
|
||||
class MockSource implements Source {
|
||||
public readonly id = 'mocksource';
|
||||
|
|
@ -248,7 +258,7 @@ describe('resolve', () => {
|
|||
});
|
||||
|
||||
test('ignores not found errors', async () => {
|
||||
const mockSource: Source = {
|
||||
const mockHandler: Source = {
|
||||
id: 'mocksource',
|
||||
label: 'MockSource',
|
||||
contentTypes: ['movie'],
|
||||
|
|
@ -258,7 +268,7 @@ describe('resolve', () => {
|
|||
};
|
||||
const streamResolver = new StreamResolver(logger, new ExtractorRegistry(logger, createExtractors(fetcher)));
|
||||
|
||||
const streams = await streamResolver.resolve(ctx, [mockSource], 'movie', new ImdbId('tt12345678', undefined, undefined));
|
||||
const streams = await streamResolver.resolve(ctx, [mockHandler], 'movie', new ImdbId('tt12345678', undefined, undefined));
|
||||
|
||||
expect(streams).toMatchSnapshot();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -135,7 +135,11 @@ export class StreamResolver {
|
|||
return Math.min(...urlResults.map(urlResult => urlResult.ttl as number));
|
||||
};
|
||||
|
||||
private buildUrl(urlResult: UrlResult): { externalUrl: string } | { url: string } {
|
||||
private buildUrl(urlResult: UrlResult): { externalUrl: string } | { url: string } | { ytId: string } {
|
||||
if (urlResult.ytId) {
|
||||
return { ytId: urlResult.ytId };
|
||||
}
|
||||
|
||||
if (!urlResult.isExternal) {
|
||||
return { url: urlResult.url.href };
|
||||
}
|
||||
|
|
|
|||
1
src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz
generated
Normal file
1
src/utils/__fixtures__/StreamResolver/http:dood.toe1srct94x5yfz
generated
Normal file
|
|
@ -0,0 +1 @@
|
|||
<html><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 - DoodStream.com</title> <link href="//i.doodcdn.io" rel="dns-prefetch" crossorigin><link href="" rel="dns-prefetch" crossorigin><link href="//cdnjs.cloudflare.com" rel="dns-prefetch" crossorigin><link href="//challenges.cloudflare.com" rel="dns-prefetch" crossorigin> <meta name="description" content="Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 | DoodStream.com"> <meta name="og:title" content="Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293"> <meta name="og:description" content="Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 | DoodStream.com"> <meta name="og:type" content="video.movie"> <meta name="og:sitename" content="DoodStream.com"> <meta name="og:image" content="https://postercdn.com/splash/imrtvtw9l3s7a5eq.jpg"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293"> <meta name="twitter:description" content="Solaris 1972 PROPER 1080p BluRay x264-SADPANDA - ENG SUBS - tt0069293 | DoodStream.com"> <meta name="twitter:image" content="https://postercdn.com/splash/imrtvtw9l3s7a5eq.jpg"> <meta name="robots" content="nofollow, noindex"> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//i.doodcdn.io/css/embed.css"/> <script src="//challenges.cloudflare.com/turnstile/v0/api.js" async defer></script> <style type="text/css"> .captcha-player{background:rgba(0,0,0,0.4);padding:12px 17px;border-radius:5px;position:absolute;z-index:100000;top:50%;transform:translateY(-50%);display:block;margin:auto;max-width:336px;left:0;right:0;display:none} </style> <body topmargin="0" leftmargin="0" style="background:transparent;" id="videoPlayerWrap"> <div style="width:100%;height:100%;text-align:center;"> <div class="video-js vjs-big-play-centered" id="video_player" tabindex="-1" lang="en-us" role="region" aria-label="Video Player" style="outline:none;"> <div class="vjs-poster" aria-disabled="false" style="background-image:url('https://postercdn.com/splash/imrtvtw9l3s7a5eq.jpg');"></div> <button class="vjs-big-play-button captcha_l" type="button" title="Play Video" aria-disabled="false"> <span aria-hidden="true" class="vjs-icon-placeholder"></span> </button> <div class="captcha-player"> <div class="g-recaptcha" id="v_validate"></div> </div> </div> </div> <script type="text/javascript"> $(document).ready(function() { $(".captcha_l").click(function(){ $(this).css('display', 'block'); $(this).html('<span aria-hidden="true" class="vjs-loading-spinner"></span>'); $('#video_player').addClass('vjs-waiting'); turnstile.render("#v_validate",{ "sitekey": "", "callback":function(response) { $.get("/dood?op=validate&gc_response="+response, function(data){ setTimeout(function(){ location.reload(); }, 500); }); } }); }); }); var tryCount = 0;var minimalUserResponseInMiliseconds = 200; function check(){console.clear();before = new Date().getTime();debugger;after = new Date().getTime(); if(after - before > minimalUserResponseInMiliseconds){document.write(" Dont open Developer Tools. ");self.location.replace(window.location.protocol + window.location.href.substring(window.location.protocol.length)); }else{before = null;after = null;delete before;delete after;}setTimeout(check, 100);}check(); window.onload = function(){document.addEventListener("contextmenu", function(e){e.preventDefault();}, false);document.addEventListener("keydown", function(e) { if(e.ctrlKey && e.shiftKey && e.keyCode == 73){disabledEvent(e);} if(e.ctrlKey && e.shiftKey && e.keyCode == 74){disabledEvent(e);} if(e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {disabledEvent(e);} if(e.ctrlKey && e.keyCode == 85) {disabledEvent(e);} if(event.keyCode == 123) {disabledEvent(e);} }, false);function disabledEvent(e){if(e.stopPropagation){e.stopPropagation();} else if(window.event){window.event.cancelBubble = true;}e.preventDefault();return false;}}; </script></body></html>
|
||||
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-1b2798be307699e7fe8f91c4f4e3d391
generated
Normal file
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-1b2798be307699e7fe8f91c4f4e3d391
generated
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"link": "https://mixdrop.ag/f/gn1d6nkjiwdp8x4",
|
||||
"host_id": 29,
|
||||
"host": "mixdrop.ag"
|
||||
}
|
||||
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-2aa3f14f9d8fa7a629fdb5a19273ff36
generated
Normal file
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-2aa3f14f9d8fa7a629fdb5a19273ff36
generated
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"link": "https://www.youtube.com/watch?v=Z8ZhQPaw4rE",
|
||||
"host_id": 19,
|
||||
"host": "youtube.com"
|
||||
}
|
||||
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-49cd5151dbf0ce401486d38d337262d4
generated
Normal file
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-49cd5151dbf0ce401486d38d337262d4
generated
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"link": "https://dood.watch/d/1srct94x5yfz",
|
||||
"host_id": 42,
|
||||
"host": "dood.watch"
|
||||
}
|
||||
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-cd3d483e90507fe23e7eb380c65ca19c
generated
Normal file
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-cd3d483e90507fe23e7eb380c65ca19c
generated
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"link": "https://www.dailymotion.com/video/x4tjxgv",
|
||||
"host_id": 40,
|
||||
"host": "dailymotion.com"
|
||||
}
|
||||
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-dda29c6cbb633e9746ed5c5a1ca1061e
generated
Normal file
5
src/utils/__fixtures__/StreamResolver/https:www.primewire.tf-dda29c6cbb633e9746ed5c5a1ca1061e
generated
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"link": "https://mixdrop.ag/f/0vo8vlkqfpvopx",
|
||||
"host_id": 29,
|
||||
"host": "mixdrop.ag"
|
||||
}
|
||||
631
src/utils/__fixtures__/StreamResolver/https:www.primewire.tffilterstt0069293anddsd53eb5c07a
generated
Normal file
631
src/utils/__fixtures__/StreamResolver/https:www.primewire.tffilterstt0069293anddsd53eb5c07a
generated
Normal file
|
|
@ -0,0 +1,631 @@
|
|||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en-US" itemscope itemtype="http://schema.org/WebPage">
|
||||
<head>
|
||||
<script>
|
||||
window.appTrigger = document.createEvent("Event");
|
||||
window.appTrigger.initEvent("appTrigger", true, true);
|
||||
</script>
|
||||
<script async type="text/javascript" src="/js/app-21ed8068b7ca664627b94721e1176d90.js?vsn=d"></script>
|
||||
|
||||
<title>
|
||||
Movies and TV Shows matching "tt0069293" | PrimeWire
|
||||
</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="robots" content="ALL,INDEX,FOLLOW">
|
||||
<meta name="revisit-after" content="1 days">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script>
|
||||
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
|
||||
var scale = width/(670.0)
|
||||
document.querySelector('meta[name=viewport]').setAttribute('content', 'width=670,initial-scale='+scale);
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="primewire, 1channel, letmewatchthis, movies, tv shows, cast, crew, discover movies">
|
||||
<meta name="description" content="PrimeWire is a social movie and TV show site which lets you find new movies and TV shows, share them with friends, and find streaming services to watch them on.">
|
||||
<meta name="classification" content="Movies">
|
||||
<meta name="distribution" content="Global">
|
||||
<meta name="rating" content="General">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta http-equiv="content-language" content="en"/>
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="revisit-after" content="1 days">
|
||||
<meta property="og:title" content="PrimeWire">
|
||||
<meta property="og:description" content="PrimeWire is a social movie and TV show site which lets you find new movies and TV shows, share them with friends, and find streaming services to watch them on.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="/images/circle_logo.jpg">
|
||||
<meta property="og:image:width" content="300">
|
||||
<meta property="og:image:height" content="300">
|
||||
<meta property="og:image:type" content="image/jpg">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/css/app-d9a4ac98a016dee0bfe32443cfb9e57e.css?vsn=d" type="text/css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w==" crossorigin="anonymous" />
|
||||
|
||||
<script>
|
||||
window.series = {}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body class="">
|
||||
|
||||
<div class="header-bar"></div>
|
||||
<div class="container">
|
||||
<div class="col1">
|
||||
|
||||
<div class="menu">
|
||||
<h1 id="a_header"><a href="/home" title="PrimeWire"><span>PrimeWire</span></a></h1>
|
||||
<div class="header ">
|
||||
<div class="header_search">
|
||||
<form method="get" action="/filter" id="searchform">
|
||||
<fieldset class="search_container">
|
||||
<input id="search_term" name="s" class="box" placeholder="Search Title or IMDb ID" type="text" value="tt0069293">
|
||||
<button class="btn" title="Submit Search" type="submit"></button>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="nav_tabs"><ul>
|
||||
<li class="unpressed"><a href="/movies" title="Movies">Movies</a></li>
|
||||
<li class="unpressed"><a href="/tv" title="TV Shows">TV Shows</a></li>
|
||||
<li class="unpressed"><a href="/schedule" title="TV Schedule">Schedule</a></li>
|
||||
<li class="unpressed"><a href="/playlists" title="Playlists">Playlists</a></li>
|
||||
<li class="unpressed"><a href="/forum" title="Forums">Forum</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-body">
|
||||
<div id="messages">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="info_message">Try our new domain, <a href="https://www.primewire.mov">PrimeWire.mov</a></div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="index_container">
|
||||
|
||||
<h1 class="titles">
|
||||
<span>Movies and TV Shows matching "tt0069293" </span>
|
||||
</h1>
|
||||
<form action="/filter" id="main-filter" method="get">
|
||||
<div id="filter-bar">
|
||||
|
||||
|
||||
<div>
|
||||
<button class="btn btn-green" type="asdf">Filter</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<a href="/filter" class="btn btn-red">Reset</a>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">More <i class="arrow-down"></i></span>
|
||||
<div class="more-filters">
|
||||
<span class="more-filter"><span class="more-filter-tag">Search Term:</span> <span><input id="s" name="s" type="text" value="tt0069293"></span></span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Year:</span>
|
||||
<span class="range-select">
|
||||
<input id="released_after" name="released_after" placeholder="1800" type="text">
|
||||
to
|
||||
<input id="released_before" name="released_before" placeholder="2050" type="text">
|
||||
</span>
|
||||
</span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Rating:</span>
|
||||
<span class="range-select">
|
||||
<input id="rating_above" name="rating_above" placeholder="0" type="text">
|
||||
to
|
||||
<input id="rating_below" name="rating_below" placeholder="5" type="text">
|
||||
</span>
|
||||
</span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Cast:</span> <select class="person-select2" id="cast" name="cast"></select></span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Crew:</span> <select class="person-select2" id="crew" name="crew"></select></span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Company:</span> <select class="company-select2" id="company" name="company"></select></span>
|
||||
<span class="more-filter"><span class="more-filter-tag">Country:</span> <select class="country-select2" id="country" name="country" style="width: 205px"></select></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">Direction <i class="arrow-down"></i></span>
|
||||
<div>
|
||||
<ul class="menu-section-list">
|
||||
<li><label><input id="direction_asc" name="direction" type="radio" value="asc"> Ascending</label></li>
|
||||
<li><label><input id="direction_desc" name="direction" type="radio" value="desc"> Descending</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">Sort <i class="arrow-down"></i></span>
|
||||
<div style="width: 160px;">
|
||||
<ul class="menu-sort-list">
|
||||
<li><label><input id="sort_Featured" name="sort" type="radio" value="Featured"> Featured</label></li>
|
||||
<li><label><input id="sort_Just_Added" name="sort" type="radio" value="Just Added"> Just Added</label></li>
|
||||
<li><label><input id="sort_Popular" name="sort" type="radio" value="Popular"> Popular</label></li>
|
||||
<li><label><input id="sort_Trending_Today" name="sort" type="radio" value="Trending Today"> Trending Today</label></li>
|
||||
<li><label><input id="sort_Trending_this_Week" name="sort" type="radio" value="Trending this Week"> Trending this Week</label></li>
|
||||
<li><label><input id="sort_Trending_this_Month" name="sort" type="radio" value="Trending this Month"> Trending this Month</label></li>
|
||||
<li><label><input id="sort_External_Rating" name="sort" type="radio" value="External Rating"> External Rating</label></li>
|
||||
<li><label><input id="sort_Primewire_Rating" name="sort" type="radio" value="Primewire Rating"> Primewire Rating</label></li>
|
||||
<li><label><input id="sort_Favorites" name="sort" type="radio" value="Favorites"> Favorites</label></li>
|
||||
<li><label><input id="sort_Favorites_per_view" name="sort" type="radio" value="Favorites per view"> Favorites per View</label></li>
|
||||
<li><label><input id="sort_Views" name="sort" type="radio" value="Views"> Views</label></li>
|
||||
<li><label><input id="sort_Release" name="sort" type="radio" value="Release"> Release Date</label></li>
|
||||
<li><label><input id="sort_Alphabet" name="sort" type="radio" value="Alphabet"> Alphabet</label></li>
|
||||
<li><label><input id="sort_Series_Premiere" name="sort" type="radio" value="Series Premiere"> Series Premiere Date</label></li>
|
||||
<li><label><input id="sort_Season_Premiere" name="sort" type="radio" value="Season Premiere"> Season Premiere Date</label></li>
|
||||
<li style="display: none"><label><input id="sort_In_Theaters" name="sort" type="radio" value="In Theaters"> In Theaters</label></li>
|
||||
<li style="display: none"><label><input id="sort_Streaming_Release" name="sort" type="radio" value="Streaming Release"> In Theaters</label></li>
|
||||
<li style="display: none"><label><input id="sort_New" name="sort" type="radio" value="New"> New</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">Genre <i class="arrow-down"></i></span>
|
||||
<div style="width: 370px; left: -70px;">
|
||||
Mode: <label><input id="genre_mode_and" name="genre_mode" type="radio" value="and"> And</label> <label><input id="genre_mode_" name="genre_mode" type="radio" value="" checked> Or</label>
|
||||
<ul class="menu-genre-list">
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Action"> Action</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Adventure"> Adventure</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Animation"> Animation</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Anime"> Anime</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Biography"> Biography</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Children"> Children</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Comedy"> Comedy</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Crime"> Crime</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="DIY"> DIY</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Documentary"> Documentary</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Drama"> Drama</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Espionage"> Espionage</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Family"> Family</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Fantasy"> Fantasy</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Film-Noir"> Film-Noir</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Food"> Food</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Game-Show"> Game-Show</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="History"> History</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Horror"> Horror</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Legal"> Legal</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Medical"> Medical</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Music"> Music</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Musical"> Musical</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Mystery"> Mystery</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Nature"> Nature</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="News"> News</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Reality-TV"> Reality-TV</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Romance"> Romance</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Sci-Fi"> Sci-Fi</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Short"> Short</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Sport"> Sport</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Sports"> Sports</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Supernatural"> Supernatural</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Talk-Show"> Talk-Show</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Thriller"> Thriller</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Travel"> Travel</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="War"> War</label></li>
|
||||
|
||||
<li class="genre-filter-bar"><label><input id="genre[]" name="genre[]" type="checkbox" value="Western"> Western</label></li>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">Streaming <i class="arrow-down"></i></span>
|
||||
<div id="subscription-selector">
|
||||
<ul class="menu-section-list">
|
||||
<li><label><input name="my_subscriptions" type="hidden" value=""><input id="my_subscriptions" name="my_subscriptions" type="checkbox" value="true"> My Subscriptions</label> (<a href="/registrations/edit">Add</a>)</li>
|
||||
<li><label><input name="free_links" type="hidden" value=""><input id="free_links" name="free_links" type="checkbox" value="true"> Free Links</label></li>
|
||||
<li><label><input name="missing_links" type="hidden" value=""><input id="missing_links" name="missing_links" type="checkbox" value="true"> No Free Links</label></li>
|
||||
|
||||
<li>
|
||||
<input name="subscription" type="hidden" value=""><input id="subscription" name="subscription" type="checkbox" value="true">
|
||||
<select class="services-select2" id="service" name="service"></select>
|
||||
in
|
||||
<select class="country-select2" id="service_country" name="service_country"><option value="US">United States</option></select>
|
||||
</li>
|
||||
<li>
|
||||
<label>
|
||||
<input name="buy_rent" type="hidden" value=""><input id="buy_rent" name="buy_rent" type="checkbox" value="true">
|
||||
Buy/Rent in
|
||||
</label>
|
||||
<select class="country-select2" id="buy_rent_country" name="buy_rent_country"><option value="US">United States</option></select>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<span class="btn btn-blue">Type <i class="arrow-down"></i></span>
|
||||
<div>
|
||||
<ul class="menu-section-list">
|
||||
<li><label><input id="type_movie" name="type" type="radio" value="movie"> Movie</label></li>
|
||||
<li><label><input id="type_tv" name="type" type="radio" value="tv"> TV</label></li>
|
||||
<li><label><input id="type_" name="type" type="radio" value="" checked> Both</label></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</form>
|
||||
<div class="clearer"></div>
|
||||
|
||||
|
||||
<div class="index_item index_item_ie">
|
||||
<a href="/movie/151849-solaris" title="Solaris (1972)">
|
||||
<img src="/poster/small/151849-solaris-dMQ0-.jpg" border="0" width="150" height="225" alt="Watch Solaris">
|
||||
<h2><div class="title-cutoff">Solaris</div> (1972)</h2>
|
||||
</a>
|
||||
|
||||
<div class="index_ratings">
|
||||
<div id="unit_long2792883">
|
||||
<ul style="width: 100px;" class="unit-rating">
|
||||
<li style="width: 75.38461538461539px;" class="current-rating">Current rating.</li><li class="r1-unit">
|
||||
</li><li class="r2-unit"></li><li class="r3-unit"></li><li class="r4-unit"></li><li class="r5-unit"></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="floating-btn preview-btn" data-id="151849" data-series="">
|
||||
info
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div class="clearer"></div>
|
||||
<div class="clearer"></div>
|
||||
<div class="clearer"></div>
|
||||
|
||||
|
||||
<div class="pagination">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<span class="current">1</span>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
window.preview_list = [151849, ]
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer footer_left">
|
||||
PrimeWire | 1Channel | Formerly LetMeWatchThis - <a href="/" title="PrimeWire | 1Channel">PrimeWire | 1Channel</a>! - <a href="/sitemaps/sitemap.xml.gz">Sitemap</a> - <a href="/legal">Legal</a>
|
||||
<label><input type="checkbox" id="darkmode-toggle" >Dark Mode</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col2">
|
||||
<a href="/home"><div class="logo"></div></a>
|
||||
|
||||
<div class="sidebar">
|
||||
|
||||
<div class="loginform" style="width: 280px;">
|
||||
<form action="/sessions" class="secure" method="post"><input name="_csrf_token" type="hidden" value="cnIXD3tGERAjfQRjMBhXNAMuHQALM2N67EDI34NuKOQPWV6ZAIlTyx50">
|
||||
<div class="form-group">
|
||||
<label for="session_email">Email</label>
|
||||
<input id="session_email" name="session[email]" type="text">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="session_password">Password</label>
|
||||
<input id="session_password" name="session[password]" type="password">
|
||||
|
||||
</div>
|
||||
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin:10px 0px 10px 0px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="form-group">
|
||||
<input checked type="checkbox" class="loginform_checkbox" name="remember" id="remmeber" style="float:left; width:20px;">
|
||||
<span style="float:left; font-size: 12px; padding:2px 0px 0px 0px; font-weight:bold;">Remember Me</span>
|
||||
</div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
</td>
|
||||
<td width="120"><input type="submit" name="login_submit" value="Login" class="login_button" style="width: 120px;"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<span class="forgot_link"><a href="/passwords/new" class="homing">Forgot Login </a></span> | <span class="register_link"><a href="/registrations/new" class="homing">Make a Free Account</a></span>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h2>Information</h2>
|
||||
|
||||
|
||||
<a href="/faq"><img src="/images/guide_link.gif" alt="LetMeWatchThis Guide" border="0"></a>
|
||||
<div style="height: 4px;"></div>
|
||||
<a href="/schedule"><img src="/images/tvschedule_button.jpg" alt="TV Schedule" border="0"></a>
|
||||
<div style="height: 4px;"></div>
|
||||
|
||||
<div style="padding: 0 5px;">
|
||||
PrimeWire is a social site for discovering, sharing and watching movies and TV shows. <a href="/start" style="text-decoration: underline;">more info</a>
|
||||
</div>
|
||||
<div style="padding: 0 5px;">
|
||||
<a href="https://www.primewire.tf">PrimeWire.tf</a> and <a href="https://www.primewire.mov">PrimeWire.mov</a> are the official domain for PrimeWire
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script async data-cfasync="false" src="https://platform.pubadx.one/pubadx-ad.js" type="text/javascript"></script>
|
||||
<div id="bg-ssp-6816">
|
||||
<script data-cfasync="false" data-no-optimize="1">
|
||||
var adx_id_6816 = document.getElementById('bg-ssp-6816');
|
||||
adx_id_6816.id = 'bg-ssp-6816-' + Math.floor(Math.random() * Date.now());
|
||||
window.pubadxtag = window.pubadxtag || [];
|
||||
window.pubadxtag.push({zoneid: 6816, id: adx_id_6816.id, wu: window.location.href})
|
||||
</script>
|
||||
</div>
|
||||
|
||||
|
||||
<h2>Latest Comments</h2>
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/25971/ufc-ppv-events-season-2025-episode-9">UFC PPV Events S2025 E9</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Wilsson02">Wilsson02</a> :
|
||||
|
||||
</span>
|
||||
|
||||
Slimy hug fest
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1365175/peacemaker-season-2-episode-1">Peacemaker S2 E1</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Farmboy41">Farmboy41</a> :
|
||||
|
||||
</span>
|
||||
|
||||
Glad to see this returned. I could use some laughs.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/515712-metamorphosis">Metamorphosis</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Marsh-mellow65">Marsh-mellow65</a> :
|
||||
|
||||
</span>
|
||||
|
||||
This link keeps saying technical error and I can't request any links once a link is added.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/93424/australian-survivor-season-13-episode-1">Australian Survivor S13 E1</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/dampyiel2200">dampyiel2200</a> :
|
||||
|
||||
</span>
|
||||
|
||||
So many great players and a quick season. Let's all hope for exciting game play!
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1376712-the-summer-i-turned-pretty">The Summer I Turned Pretty</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/chugga">chugga</a> :
|
||||
|
||||
</span>
|
||||
|
||||
is this show basically we were liars if not for the ghoulish reveal?
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="text-align:right; padding:5px; font-size: 11px;"><a href="/comments?sort=latest">More Comments</a></div>
|
||||
|
||||
<h2>Top Comments</h2>
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1516925/the-institute-season-1-episode-7">The Institute S1 E7</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/mkmikas">mkmikas</a> :
|
||||
</span>
|
||||
|
||||
|
||||
<span class="toggler hide" togglee-id="bPPQB">Contains spoilers. Click to show.</span>
|
||||
<span class="togglee" id="bPPQB">
|
||||
mm lets throw in a little time crises from 12 monkeys series... ooh and the weird smoking ...
|
||||
</span>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/6386/the-librarians-season-1-episode-6">The Librarians S1 E6</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/chonkychunk">chonkychunk</a> :
|
||||
</span>
|
||||
|
||||
|
||||
<span class="toggler hide" togglee-id="GMLZz">Contains spoilers. Click to show.</span>
|
||||
<span class="togglee" id="GMLZz">
|
||||
"There's a bird on you"
|
||||
"Mhmhm, yeah"
|
||||
|
||||
Love this episode and the subtle foreshadowing for ...
|
||||
</span>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1363/south-park-season-27-episode-3">South Park S27 E3</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/Jirido">Jirido</a> :
|
||||
</span>
|
||||
|
||||
I bet it is Patel and Gambiano that is gonna get it this time.. Patel looks like his dad h...
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/1513114-caught-stealing">Caught Stealing</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/simones">simones</a> :
|
||||
</span>
|
||||
|
||||
Darren Aronfsky.Wild ride."Mother" was one messed up movie from a crazy imagination.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/579676-blood-the-last-vampire">Blood: The Last Vampire</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/ackman83">ackman83</a> :
|
||||
</span>
|
||||
|
||||
great animation
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="text-align:right; padding:5px; font-size: 11px;"><a href="/comments?sort=best-recent">More Comments</a></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer footer_right">
|
||||
<a href="#" title=" unregistered">742 users online</a> -
|
||||
<a href="/contact">Contacts</a> -
|
||||
<a href="/faq">FAQ</a> -
|
||||
<a href="/dmca">DMCA</a> -
|
||||
<a href="/api">API</a> -
|
||||
<a href="/embed">Embed</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
window.csrf_token = "cnIXD3tGERAjfQRjMBhXNAMuHQALM2N67EDI34NuKOQPWV6ZAIlTyx50";
|
||||
window.subs = false
|
||||
window.tsr = false
|
||||
document.dispatchEvent(window.appTrigger);
|
||||
window.appTriggered = true;
|
||||
</script>
|
||||
|
||||
<div id="previewer-el"></div>
|
||||
|
||||
<script type="text/javascript" src="/a/aclib.js"></script>
|
||||
<script>
|
||||
aclib.runPop({zoneId: '10289334'});
|
||||
</script>
|
||||
|
||||
</body></html>
|
||||
File diff suppressed because one or more lines are too long
411
src/utils/__fixtures__/StreamResolver/https:www.primewire.tflegal
generated
Normal file
411
src/utils/__fixtures__/StreamResolver/https:www.primewire.tflegal
generated
Normal file
|
|
@ -0,0 +1,411 @@
|
|||
|
||||
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="en-US" itemscope itemtype="http://schema.org/WebPage">
|
||||
<head>
|
||||
<script>
|
||||
window.appTrigger = document.createEvent("Event");
|
||||
window.appTrigger.initEvent("appTrigger", true, true);
|
||||
</script>
|
||||
<script async type="text/javascript" src="/js/app-21ed8068b7ca664627b94721e1176d90.js?vsn=d"></script>
|
||||
|
||||
<title>
|
||||
|
||||
PrimeWire - Social Movie & TV Tracker
|
||||
|
||||
</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="robots" content="ALL,INDEX,FOLLOW">
|
||||
<meta name="revisit-after" content="1 days">
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script>
|
||||
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
|
||||
var scale = width/(670.0)
|
||||
document.querySelector('meta[name=viewport]').setAttribute('content', 'width=670,initial-scale='+scale);
|
||||
</script>
|
||||
|
||||
<meta name="keywords" content="primewire, 1channel, letmewatchthis, movies, tv shows, cast, crew, discover movies">
|
||||
<meta name="description" content="PrimeWire is a social movie and TV show site which lets you find new movies and TV shows, share them with friends, and find streaming services to watch them on.">
|
||||
<meta name="classification" content="Movies">
|
||||
<meta name="distribution" content="Global">
|
||||
<meta name="rating" content="General">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<meta http-equiv="content-language" content="en"/>
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="revisit-after" content="1 days">
|
||||
<meta property="og:title" content="PrimeWire">
|
||||
<meta property="og:description" content="PrimeWire is a social movie and TV show site which lets you find new movies and TV shows, share them with friends, and find streaming services to watch them on.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:image" content="/images/circle_logo.jpg">
|
||||
<meta property="og:image:width" content="300">
|
||||
<meta property="og:image:height" content="300">
|
||||
<meta property="og:image:type" content="image/jpg">
|
||||
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
|
||||
|
||||
<link rel="icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
|
||||
<link rel="stylesheet" href="/css/app-d9a4ac98a016dee0bfe32443cfb9e57e.css?vsn=d" type="text/css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.2/css/all.min.css" integrity="sha512-HK5fgLBL+xu6dm/Ii3z4xhlSUyZgTT9tuc/hSrtw6uzJOvgRr2a9jyxxT1ely+B+xFAmJKVSTbpM/CuL7qxO8w==" crossorigin="anonymous" />
|
||||
|
||||
<script>
|
||||
window.series = {}
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body class="">
|
||||
|
||||
<div class="header-bar"></div>
|
||||
<div class="container">
|
||||
<div class="col1">
|
||||
|
||||
<div class="menu">
|
||||
<h1 id="a_header"><a href="/home" title="PrimeWire"><span>PrimeWire</span></a></h1>
|
||||
<div class="header ">
|
||||
<div class="header_search">
|
||||
<form method="get" action="/filter" id="searchform">
|
||||
<fieldset class="search_container">
|
||||
<input id="search_term" name="s" class="box" placeholder="Search Title or IMDb ID" type="text" value="">
|
||||
<button class="btn" title="Submit Search" type="submit"></button>
|
||||
</fieldset>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="nav_tabs"><ul>
|
||||
<li class="unpressed"><a href="/movies" title="Movies">Movies</a></li>
|
||||
<li class="unpressed"><a href="/tv" title="TV Shows">TV Shows</a></li>
|
||||
<li class="unpressed"><a href="/schedule" title="TV Schedule">Schedule</a></li>
|
||||
<li class="unpressed"><a href="/playlists" title="Playlists">Playlists</a></li>
|
||||
<li class="unpressed"><a href="/forum" title="Forums">Forum</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-body">
|
||||
<div id="messages">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="info_message">Try our new domain, <a href="https://www.primewire.mov">PrimeWire.mov</a></div>
|
||||
</div>
|
||||
|
||||
<div class="some_padding">
|
||||
<h1 class="titles">
|
||||
<span>Legal Stuff</span>
|
||||
</h1>
|
||||
|
||||
<p><strong>General</strong></p>
|
||||
<p>Our terms of service are to be taken into consideration and adhered to at all times whilst using the site. All users are advised that access to this site and the use of the services detailed therein are strictly conditional upon your confirmation that you comply fully with our terms of use. By proceeding to surf primewire.ag or otherwise using this site, you signify your unequivocal acceptance of these and any other terms prevailing at this or at any future time.</p>
|
||||
<p><strong>Governing Law</strong></p>
|
||||
<p>The governing law imposed will be that of the Klingon Empire, the country in which primewire.ag is based and from which all services are provided.</p>
|
||||
<p><strong>Relationship</strong></p>
|
||||
<p>The relationship between you (the user) and us (primewire.ag, our agents and partners) is that we provide you with access to the referencing material and media contained within our site, which is provided to you on a purely non commercial basis and is, therefore, not that of customer and supplier.</p>
|
||||
<p><strong>Content</strong></p>
|
||||
<p>primewire.ag does not host, provide, archive, store, or distribute media of any kind, and acts merely as an index (or directory) of media posted by other webmasters on the internet, which is completely outside of our control.</p>
|
||||
<p>Whereas we do not filter such references, we cannot and do not attempt to control, censor, or block any indexed material that may be considered offensive, abusive, libellous, obnoxious, inaccurate, deceptive, unlawful or otherwise distressing neither do we accept responsibility for this content or the consequences of such content being made available.</p>
|
||||
<p>Material may be inappropriately described or subject to restrictions such as copyright, licensing and other limitations and it is the sole responsibility of those having access to such material to comply with any or all lawful obligations arising from such material coming into their possession and, thus mitigate any alleged transgression.</p>
|
||||
<p>All users warrant that they are 18 years of age or older, and, therefore, qualified to enter into this agreement either as an individual or as a corporate entity.</p>
|
||||
<p>All users undertake to comply with the national laws applicable to the country they reside in and observe the rights inherent in any copyright material whilst upholding the rights of any copyright owner.</p>
|
||||
<p>All users are advised to use caution, discretion, common sense and personal judgment when using primewire.ag or any references detailed within the directory and to respect the wishes of others who may value freedom from censorship, as consenting adults equal to (or possibly superior to) your own personal preferences.</p>
|
||||
<p><strong>Quality Of Service</strong></p>
|
||||
<p>primewire.ag does not provide commercial services and there are no actual or implied guarantees as to the availability of service or the speed, operation or function of this site, which is offered on a basis to those who choose to comply with the terms detailed within and access the <20>free<65> contents of this site.</p>
|
||||
<p>Privacy, Spam & Unsolicited Contact</p>
|
||||
<p>This site will comply with the requirements of any law enforcement or other officials, Courts, Police or others with a legitimate interest in the official investigation or enforcement of law applicable to the country in which our service is provided, United Kingdom.</p>
|
||||
<p>The protection of the rights of others is of paramount importance to primewire.ag, and this extends to your adherence to intellectual property law, the laws prevailing in your country or residence (or any temporary residence), the rights of others to enjoy freedom from slander, libel, defamation, provocation, harassment, discrimination of any kind or any other action that may be deemed offensive by the individual concerned or the management of this site.</p>
|
||||
<p>Users may not use the primewire.ag site or any facilities provided by us to spam, market or promote any goods, services, membership or other websites.</p>
|
||||
<p><strong>Intellectual Property - General</strong></p>
|
||||
<p>primewire.ag respects the rights of others, and prohibits the use of referenced material for any purpose other than that for which it is intended (where such use is lawful and free of civil liability or other constraint) and in such circumstances where possession of such material may have any adverse financial, prejudicial or any other effect on any other third party.</p>
|
||||
<p>primewire.ag is copyrighted, and all rights are reserved, as those are of the proprietors and those of the partners websites material referenced within. Anyone found imitating the site or stealing content from the site will be liable to prosecution.</p>
|
||||
<p><strong>Definitions</strong></p>
|
||||
<p>The term <20>the site<74> applies to the site (primewire.ag), its staff, administration, owners, agents, representatives, suppliers and partners. The term <20>the user<65> applies to any site visitor who wishes to proceed surfing the site once arriving at primewire.ag.</p>
|
||||
<p><strong>Agreement</strong></p>
|
||||
<p>In usage of this site, or by otherwise using this site, you (the user), hereby undertake to adhere to the terms of use detailed herein and any others appended hereto, without evasion, equivocation or reservation of any kind, in the knowledge that failure to comply with the terms will result in suspension or denial of your access to the site and potential legal and civil penalties, together with the right to make the full circumstances publicly known.</p>
|
||||
<p><strong>Your Privacy</strong></p>
|
||||
<p>primewire.ag is committed to protecting your privacy. primewire.ag does not sell, trade or rent your personal information to any other companies. primewire.ag will not collect any personal information about you except when you specifically and knowingly provide such information when registering for the site.</p>
|
||||
<p>By using our Website, you consent to the collection and use of this information by primewire.ag. If we decide to change our privacy policy, we will post any changes to this page so that you are always aware of which information we collect, how we use it, and under which circumstances we disclose it.</p>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer footer_left">
|
||||
PrimeWire | 1Channel | Formerly LetMeWatchThis - <a href="/" title="PrimeWire | 1Channel">PrimeWire | 1Channel</a>! - <a href="/sitemaps/sitemap.xml.gz">Sitemap</a> - <a href="/legal">Legal</a>
|
||||
<label><input type="checkbox" id="darkmode-toggle" >Dark Mode</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col2">
|
||||
<a href="/home"><div class="logo"></div></a>
|
||||
|
||||
<div class="sidebar">
|
||||
|
||||
<div class="loginform" style="width: 280px;">
|
||||
<form action="/sessions" class="secure" method="post"><input name="_csrf_token" type="hidden" value="djYpIGszXQIwXCAeG0Y-NQIGPjsBYHhD9qGMZdnduqvFA1SaHtaujMLu">
|
||||
<div class="form-group">
|
||||
<label for="session_email">Email</label>
|
||||
<input id="session_email" name="session[email]" type="text">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="session_password">Password</label>
|
||||
<input id="session_password" name="session[password]" type="password">
|
||||
|
||||
</div>
|
||||
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="margin:10px 0px 10px 0px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<div class="form-group">
|
||||
<input checked type="checkbox" class="loginform_checkbox" name="remember" id="remmeber" style="float:left; width:20px;">
|
||||
<span style="float:left; font-size: 12px; padding:2px 0px 0px 0px; font-weight:bold;">Remember Me</span>
|
||||
</div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
</td>
|
||||
<td width="120"><input type="submit" name="login_submit" value="Login" class="login_button" style="width: 120px;"> </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<span class="forgot_link"><a href="/passwords/new" class="homing">Forgot Login </a></span> | <span class="register_link"><a href="/registrations/new" class="homing">Make a Free Account</a></span>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h2>Information</h2>
|
||||
|
||||
|
||||
<a href="/faq"><img src="/images/guide_link.gif" alt="LetMeWatchThis Guide" border="0"></a>
|
||||
<div style="height: 4px;"></div>
|
||||
<a href="/schedule"><img src="/images/tvschedule_button.jpg" alt="TV Schedule" border="0"></a>
|
||||
<div style="height: 4px;"></div>
|
||||
|
||||
<div style="padding: 0 5px;">
|
||||
PrimeWire is a social site for discovering, sharing and watching movies and TV shows. <a href="/start" style="text-decoration: underline;">more info</a>
|
||||
</div>
|
||||
<div style="padding: 0 5px;">
|
||||
<a href="https://www.primewire.tf">PrimeWire.tf</a> and <a href="https://www.primewire.mov">PrimeWire.mov</a> are the official domain for PrimeWire
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script async data-cfasync="false" src="https://platform.pubadx.one/pubadx-ad.js" type="text/javascript"></script>
|
||||
<div id="bg-ssp-6816">
|
||||
<script data-cfasync="false" data-no-optimize="1">
|
||||
var adx_id_6816 = document.getElementById('bg-ssp-6816');
|
||||
adx_id_6816.id = 'bg-ssp-6816-' + Math.floor(Math.random() * Date.now());
|
||||
window.pubadxtag = window.pubadxtag || [];
|
||||
window.pubadxtag.push({zoneid: 6816, id: adx_id_6816.id, wu: window.location.href})
|
||||
</script>
|
||||
</div>
|
||||
|
||||
|
||||
<h2>Latest Comments</h2>
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/25971/ufc-ppv-events-season-2025-episode-9">UFC PPV Events S2025 E9</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Wilsson02">Wilsson02</a> :
|
||||
|
||||
</span>
|
||||
|
||||
Slimy hug fest
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1365175/peacemaker-season-2-episode-1">Peacemaker S2 E1</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Farmboy41">Farmboy41</a> :
|
||||
|
||||
</span>
|
||||
|
||||
Glad to see this returned. I could use some laughs.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/515712-metamorphosis">Metamorphosis</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/Marsh-mellow65">Marsh-mellow65</a> :
|
||||
|
||||
</span>
|
||||
|
||||
This link keeps saying technical error and I can't request any links once a link is added.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/93424/australian-survivor-season-13-episode-1">Australian Survivor S13 E1</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/dampyiel2200">dampyiel2200</a> :
|
||||
|
||||
</span>
|
||||
|
||||
So many great players and a quick season. Let's all hope for exciting game play!
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1376712-the-summer-i-turned-pretty">The Summer I Turned Pretty</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
|
||||
<a href="/user/chugga">chugga</a> :
|
||||
|
||||
</span>
|
||||
|
||||
is this show basically we were liars if not for the ghoulish reveal?
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="text-align:right; padding:5px; font-size: 11px;"><a href="/comments?sort=latest">More Comments</a></div>
|
||||
|
||||
<h2>Top Comments</h2>
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1516925/the-institute-season-1-episode-7">The Institute S1 E7</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/mkmikas">mkmikas</a> :
|
||||
</span>
|
||||
|
||||
|
||||
<span class="toggler hide" togglee-id="-NH9A">Contains spoilers. Click to show.</span>
|
||||
<span class="togglee" id="-NH9A">
|
||||
mm lets throw in a little time crises from 12 monkeys series... ooh and the weird smoking ...
|
||||
</span>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/6386/the-librarians-season-1-episode-6">The Librarians S1 E6</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/chonkychunk">chonkychunk</a> :
|
||||
</span>
|
||||
|
||||
|
||||
<span class="toggler hide" togglee-id="75eZ4">Contains spoilers. Click to show.</span>
|
||||
<span class="togglee" id="75eZ4">
|
||||
"There's a bird on you"
|
||||
"Mhmhm, yeah"
|
||||
|
||||
Love this episode and the subtle foreshadowing for ...
|
||||
</span>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_tv">
|
||||
<a href="/tv/1363/south-park-season-27-episode-3">South Park S27 E3</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/Jirido">Jirido</a> :
|
||||
</span>
|
||||
|
||||
I bet it is Patel and Gambiano that is gonna get it this time.. Patel looks like his dad h...
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/1513114-caught-stealing">Caught Stealing</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/simones">simones</a> :
|
||||
</span>
|
||||
|
||||
Darren Aronfsky.Wild ride."Mother" was one messed up movie from a crazy imagination.
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="latest_comments com_class_mov">
|
||||
<a href="/movie/579676-blood-the-last-vampire">Blood: The Last Vampire</a>
|
||||
<p>
|
||||
<span class="latest_comments_poster">
|
||||
<a href="/user/ackman83">ackman83</a> :
|
||||
</span>
|
||||
|
||||
great animation
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div style="text-align:right; padding:5px; font-size: 11px;"><a href="/comments?sort=best-recent">More Comments</a></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="footer footer_right">
|
||||
<a href="#" title=" unregistered">740 users online</a> -
|
||||
<a href="/contact">Contacts</a> -
|
||||
<a href="/faq">FAQ</a> -
|
||||
<a href="/dmca">DMCA</a> -
|
||||
<a href="/api">API</a> -
|
||||
<a href="/embed">Embed</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
window.csrf_token = "djYpIGszXQIwXCAeG0Y-NQIGPjsBYHhD9qGMZdnduqvFA1SaHtaujMLu";
|
||||
window.subs = false
|
||||
window.tsr = false
|
||||
document.dispatchEvent(window.appTrigger);
|
||||
window.appTriggered = true;
|
||||
</script>
|
||||
|
||||
<div id="previewer-el"></div>
|
||||
|
||||
<script type="text/javascript" src="/a/aclib.js"></script>
|
||||
<script>
|
||||
aclib.runPop({zoneId: '10289334'});
|
||||
</script>
|
||||
|
||||
</body></html>
|
||||
1246
src/utils/__fixtures__/StreamResolver/https:www.primewire.tfmovie151849-solaris
generated
Normal file
1246
src/utils/__fixtures__/StreamResolver/https:www.primewire.tfmovie151849-solaris
generated
Normal file
File diff suppressed because it is too large
Load diff
84
src/utils/__fixtures__/StreamResolver/https:www.youtube.comwatchvZ8ZhQPaw4rE
generated
Normal file
84
src/utils/__fixtures__/StreamResolver/https:www.youtube.comwatchvZ8ZhQPaw4rE
generated
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -378,3 +378,18 @@ exports[`resolve returns source errors as stream 2`] = `
|
|||
],
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`resolve returns ytId instead of url for YouTube video 1`] = `
|
||||
[
|
||||
{
|
||||
"behaviorHints": {
|
||||
"bingeGroup": "webstreamr-youtube_en",
|
||||
"notWebReady": true,
|
||||
},
|
||||
"name": "WebStreamr 🇺🇸",
|
||||
"title": "Solaris | SCIENCE FICTION | FULL MOVIE | directed by Tarkovsky
|
||||
🔗 YouTube",
|
||||
"ytId": "Z8ZhQPaw4rE",
|
||||
},
|
||||
]
|
||||
`;
|
||||
|
|
|
|||
Loading…
Reference in a new issue