diff --git a/src/index.ts b/src/index.ts index 562f237..bfb47aa 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import express, { NextFunction, Request, Response } from 'express'; import { v4 as uuidv4 } from 'uuid'; import winston from 'winston'; -import { CineHDPlus, Frembed, FrenchCloud, Source, KinoGer, MeineCloud, MostraGuarda, Soaper, StreamKiste, VerHdLink, VidSrc } from './source'; +import { CineHDPlus, Eurostreaming, Frembed, FrenchCloud, Source, KinoGer, MeineCloud, MostraGuarda, Soaper, StreamKiste, VerHdLink, VidSrc } from './source'; import { createExtractors, ExtractorRegistry } from './extractor'; import { ConfigureController, ManifestController, StreamController } from './controller'; import { envGet, envIsProd, Fetcher, StreamResolver, tmdbFetch, TmdbId } from './utils'; @@ -34,7 +34,7 @@ const sources: Source[] = [ new Frembed(fetcher), new FrenchCloud(fetcher), // IT - // new Eurostreaming(fetcher), // https://github.com/webstreamr/webstreamr/issues/83 + new Eurostreaming(fetcher), new MostraGuarda(fetcher), ]; diff --git a/src/source/Eurostreaming.test.ts b/src/source/Eurostreaming.test.ts index a7f44ac..e0c38cd 100644 --- a/src/source/Eurostreaming.test.ts +++ b/src/source/Eurostreaming.test.ts @@ -1,5 +1,5 @@ import { Eurostreaming } from './Eurostreaming'; -import { FetcherMock, ImdbId } from '../utils'; +import { FetcherMock, TmdbId } from '../utils'; import { Context } from '../types'; const ctx: Context = { id: 'id', ip: '127.0.0.1', config: { it: 'on' } }; @@ -12,12 +12,22 @@ describe('Eurostreaming', () => { }); test('handles non-existent series gracefully', async () => { - const streams = await handler.handle(ctx, 'series', new ImdbId('tt12345678', 1, 1)); + const streams = await handler.handle(ctx, 'series', new TmdbId(61945, 1, 1)); expect(streams).toHaveLength(0); }); test('handle imdb black mirror s2e4', async () => { - const streams = await handler.handle(ctx, 'series', new ImdbId('tt2085059', 2, 4)); + const streams = await handler.handle(ctx, 'series', new TmdbId(42009, 2, 4)); + expect(streams).toMatchSnapshot(); + }); + + test('handle lost s1e1', async () => { + const streams = await handler.handle(ctx, 'series', new TmdbId(4607, 1, 1)); + expect(streams).toMatchSnapshot(); + }); + + test('last of us s1e1', async () => { + const streams = await handler.handle(ctx, 'series', new TmdbId(100088, 1, 1)); expect(streams).toMatchSnapshot(); }); }); diff --git a/src/source/Eurostreaming.ts b/src/source/Eurostreaming.ts index c1b871c..db0f106 100644 --- a/src/source/Eurostreaming.ts +++ b/src/source/Eurostreaming.ts @@ -1,7 +1,7 @@ import { ContentType } from 'stremio-addon-sdk'; import * as cheerio from 'cheerio'; import { Source, SourceResult } from './types'; -import { Fetcher, getImdbId, Id, ImdbId } from '../utils'; +import { Fetcher, getTmdbId, getTmdbTvDetails, Id } from '../utils'; import { Context, CountryCode } from '../types'; export class Eurostreaming implements Source { @@ -20,9 +20,10 @@ export class Eurostreaming implements Source { } public async handle(ctx: Context, _type: string, id: Id): Promise { - const imdbId = await getImdbId(ctx, this.fetcher, id); + const tmdbId = await getTmdbId(ctx, this.fetcher, id); + const tmdbTvDetails = await getTmdbTvDetails(ctx, this.fetcher, tmdbId, 'it'); - const seriesPageUrl = await this.fetchSeriesPageUrl(ctx, imdbId); + const seriesPageUrl = await this.fetchSeriesPageUrl(ctx, tmdbTvDetails.name); if (!seriesPageUrl) { return []; } @@ -31,44 +32,42 @@ export class Eurostreaming implements Source { const $ = cheerio.load(html); - const mainDataLinkElements = $(`[data-num="${imdbId.season}x${imdbId.episode}"][data-link!="#"]`); - const mirrorDataLinkElements = $(`[data-num="${imdbId.season}x${imdbId.episode}"]`) - .siblings('.mirrors') - .children('[data-link!="#"]'); + const title = `${tmdbTvDetails.name} ${tmdbId.season}x${tmdbId.episode}`; - const title = $('meta[property="og:title"]').attr('content') as string; - - return Promise.all(mainDataLinkElements - .add(mirrorDataLinkElements) - .map((_i, el) => new URL(($(el).attr('data-link') as string).replace(/^(https:)?\/\//, 'https://'))) - .toArray() - .filter(url => !url.host.match(/eurostreaming/)) - .map(url => ({ countryCode: CountryCode.it, referer: seriesPageUrl, title: `${title.trim()} ${imdbId.season}x${imdbId.episode}`, url })), + return Promise.all( + $(`[data-num="${tmdbId.season}x${tmdbId.episode}"]`) + .siblings('.mirrors') + .children('[data-link!="#"]') + .map((_i, el) => new URL($(el).attr('data-link') as string)) + .toArray() + .filter(url => !url.host.match(/eurostreaming/)) + .map(url => ({ countryCode: CountryCode.it, title, url })), ); }; - private fetchSeriesPageUrl = async (ctx: Context, imdbId: ImdbId): Promise => { + private fetchSeriesPageUrl = async (ctx: Context, keyword: string): Promise => { + const postUrl = new URL('https://eurostreaming.my/'); + + const form = new URLSearchParams(); + form.append('do', 'search'); + form.append('subaction', 'search'); + form.append('story', keyword); + const html = await this.fetcher.textPost( ctx, - new URL('https://eurostreaming.my/index.php'), - JSON.stringify({ - do: 'search', - subaction: 'search', - search_start: 0, - full_search: 0, - result_from: 1, - story: imdbId.id, - }), + postUrl, + form.toString(), { headers: { 'Content-Type': 'application/x-www-form-urlencoded', + 'Referer': postUrl.origin, }, }, ); const $ = cheerio.load(html); - const url = $('.post-content a[href]:first') + const url = $(`.post-thumb a[href][title="${keyword}"]:first`) .map((_i, el) => $(el).attr('href')) .get(0); diff --git a/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv100088languageit b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv100088languageit new file mode 100644 index 0000000..e8b85bc --- /dev/null +++ b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv100088languageit @@ -0,0 +1 @@ +{"adult":false,"backdrop_path":"/uQ4lG7E7mlyKsGvbASftQ6Hu2IX.jpg","created_by":[{"id":1295692,"credit_id":"5e84f03598f1f10016a985c0","name":"Neil Druckmann","original_name":"Neil Druckmann","gender":2,"profile_path":"/bVUsM4aYiHbeSYE1xAw2H5Z1ANU.jpg"},{"id":35796,"credit_id":"5e84f06a3344c600153f6a57","name":"Craig Mazin","original_name":"Craig Mazin","gender":2,"profile_path":"/uEhna6qcMuyU5TP7irpTUZ2ZsZc.jpg"}],"episode_run_time":[],"first_air_date":"2023-01-15","genres":[{"id":18,"name":"Dramma"}],"homepage":"https://www.hbo.com/the-last-of-us","id":100088,"in_production":true,"languages":["en"],"last_air_date":"2025-05-25","last_episode_to_air":{"id":5994273,"name":"Convergenza","overview":"Nel mezzo della battaglia tra le fazioni in guerra di Seattle, la ricerca di Ellie la porta verso uno scontro devastante.","vote_average":6.111,"vote_count":45,"air_date":"2025-05-25","episode_number":7,"episode_type":"finale","production_code":"","runtime":50,"season_number":2,"show_id":100088,"still_path":"/4IZqCZRmBq9LifHFQkYA1QqqE0x.jpg"},"name":"The Last of Us","next_episode_to_air":null,"networks":[{"id":49,"logo_path":"/tuomPhY2UtuPTqqFnKMVHvSb724.png","name":"HBO","origin_country":"US"}],"number_of_episodes":16,"number_of_seasons":2,"origin_country":["US"],"original_language":"en","original_name":"The Last of Us","overview":"Vent’anni dopo la distruzione della civiltà moderna Joel, uno scaltro sopravvissuto, viene incaricato di far uscire Ellie, una ragazza di 14 anni, da una zona di quarantena sotto stretta sorveglianza. Un compito all’apparenza facile che si trasforma presto in un viaggio brutale e straziante, in cui i due si troveranno a dover attraversare gli Stati Uniti insieme e a dipendere l’uno dall’altra per sopravvivere.","popularity":156.0795,"poster_path":"/6WlffOd3bszyndGgsKGcUL6k28n.jpg","production_companies":[{"id":125281,"logo_path":"/3hV8pyxzAJgEjiSYVv1WZ0ZYayp.png","name":"PlayStation Productions","origin_country":"US"},{"id":11073,"logo_path":"/aCbASRcI1MI7DXjPbSW9Fcv9uGR.png","name":"Sony Pictures Television","origin_country":"US"},{"id":23217,"logo_path":"/kXBZdQigEf6QiTLzo6TFLAa7jKD.png","name":"Naughty Dog","origin_country":"US"},{"id":119645,"logo_path":null,"name":"Word Games","origin_country":"US"},{"id":115241,"logo_path":null,"name":"The Mighty Mint","origin_country":"US"},{"id":3268,"logo_path":"/tuomPhY2UtuPTqqFnKMVHvSb724.png","name":"HBO","origin_country":"US"}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"seasons":[{"air_date":"2023-01-14","episode_count":9,"id":144593,"name":"Stagione 1","overview":"Da Boston a Salt Lake City, attraverso un mondo devastato da una piaga apocalittica: un uomo e una ragazza viaggiano per tentare di salvare l'umanità.","poster_path":"/bSWFzaboUFxfxBE1pIWlRsp5TvE.jpg","season_number":1,"vote_average":7.7},{"air_date":"2025-04-13","episode_count":7,"id":405376,"name":"Stagione 2","overview":"Cinque anni dopo gli eventi della prima stagione, Joel ed Ellie saranno trascinati in un conflitto fra di loro e contro un mondo persino più pericoloso e imprevedibile di quello che si erano lasciati alle spalle.","poster_path":"/2IXXPbfqGX6HUHD6HX2z56g2ra.jpg","season_number":2,"vote_average":6.4}],"spoken_languages":[{"english_name":"English","iso_639_1":"en","name":"English"}],"status":"Returning Series","tagline":"Quando ti perdi nell'oscurità, cerca la luce","type":"Scripted","vote_average":8.52,"vote_count":6194} \ No newline at end of file diff --git a/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv42009languageit b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv42009languageit new file mode 100644 index 0000000..0bee582 --- /dev/null +++ b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv42009languageit @@ -0,0 +1 @@ +{"adult":false,"backdrop_path":"/dg3OindVAGZBjlT3xYKqIAdukPL.jpg","created_by":[{"id":211845,"credit_id":"52595fb5760ee346619587b5","name":"Charlie Brooker","original_name":"Charlie Brooker","gender":2,"profile_path":"/dmdLd5I4cnpCZzoITm26NOwu6Rn.jpg"}],"episode_run_time":[],"first_air_date":"2011-12-04","genres":[{"id":10765,"name":"Sci-Fi & Fantasy"},{"id":18,"name":"Dramma"},{"id":9648,"name":"Mistero"}],"homepage":"https://www.netflix.com/title/70264888","id":42009,"in_production":true,"languages":["en"],"last_air_date":"2025-04-10","last_episode_to_air":{"id":6085099,"name":"USS Callister: Infinity","overview":"Nanette Cole e l'equipaggio della USS Callister sono bloccati in un vasto universo virtuale dove lottano per la sopravvivenza contro trenta milioni di giocatori.","vote_average":7.436,"vote_count":39,"air_date":"2025-04-10","episode_number":6,"episode_type":"finale","production_code":"","runtime":91,"season_number":7,"show_id":42009,"still_path":"/6JxoU4B1VMYf2tt8VPpNl8juKwm.jpg"},"name":"Black Mirror","next_episode_to_air":null,"networks":[{"id":26,"logo_path":"/hbifXPpM55B1fL5wPo7t72vzN78.png","name":"Channel 4","origin_country":"GB"},{"id":213,"logo_path":"/wwemzKWzjKYJFfCeiB57q3r4Bcm.png","name":"Netflix","origin_country":""}],"number_of_episodes":32,"number_of_seasons":7,"origin_country":["GB"],"original_language":"en","original_name":"Black Mirror","overview":"Una serie antologica di racconti angosciosi e spiazzanti che rivelano i tratti umani più oscuri, le innovazioni più sensazionali e tanto altro ancora.","popularity":75.9346,"poster_path":"/seN6rRfN0I6n8iDXjlSMk1QjNcq.jpg","production_companies":[{"id":76757,"logo_path":null,"name":"House of Tomorrow","origin_country":"GB"},{"id":18663,"logo_path":"/khiCshsZBdtUUYOr4VLoCtuqCEq.png","name":"Zeppotron","origin_country":"GB"},{"id":133905,"logo_path":"/tEEIQIYHQgPyOBgvoAlqPXfpEPX.png","name":"Broke and Bones","origin_country":"GB"}],"production_countries":[{"iso_3166_1":"GB","name":"United Kingdom"}],"seasons":[{"air_date":"2014-12-16","episode_count":1,"id":76596,"name":"Speciali","overview":"","poster_path":"/zvfw0f35QmfHCPq5qvdHquFjrQC.jpg","season_number":0,"vote_average":0.0},{"air_date":"2011-12-04","episode_count":3,"id":51964,"name":"Stagione 1","overview":"Questa miniserie antologica immagina un futuro fantascientifico dove le persone pedalano per guadagnare \"meriti\" e vengono dotate di un impianto di memoria.","poster_path":"/ztdy1f1cAjwsO0GpVKzNuqZ0PMv.jpg","season_number":1,"vote_average":7.7},{"air_date":"2013-02-11","episode_count":3,"id":51965,"name":"Stagione 2","overview":"Tra i temi della seconda stagione di questa serie antologica spiccano la dipendenza dai social media e le implicazioni dei reality dal vivo.","poster_path":"/y71DeJiAv0dV8H8hiFnuIuyc0Gx.jpg","season_number":2,"vote_average":7.1},{"air_date":"2016-10-21","episode_count":6,"id":63871,"name":"Stagione 3","overview":"Nella terza stagione, un paradiso surreale per gli innamorati, un giovane tormentato da strani messaggi e un'app che esercita un potere inquietante.","poster_path":"/3mKYrlZpFbpFu7CaVxoleO68MFG.jpg","season_number":3,"vote_average":7.7},{"air_date":"2017-12-29","episode_count":6,"id":96276,"name":"Stagione 4","overview":"Una fantasia fuori controllo, oggetti che svelano oscuri segreti e una donna inseguita da un implacabile cacciatore. Tutto questo in nuove storie di tecnologia impazzita.","poster_path":"/rQqrNbXeFsSdL3CF2zBVqymnsHL.jpg","season_number":4,"vote_average":7.3},{"air_date":"2019-06-05","episode_count":3,"id":124320,"name":"Stagione 5","overview":"Un videogioco trasforma una lunga amicizia, una società di social media subisce un sequestro e una ragazza crea un legame con la versione robot del suo idolo pop.","poster_path":"/5xjf5aLeooPYWqH66vB80jMJT9u.jpg","season_number":5,"vote_average":6.5},{"air_date":"2023-06-15","episode_count":5,"id":331809,"name":"Stagione 6","overview":"Cinque nuovi episodi tra antichi misteri, paure del futuro, tecnologia nemica e un'inquietante rappresentazione del mondo.","poster_path":"/kwATNh8JC1IJclnVwk8x7wZb2b4.jpg","season_number":6,"vote_average":6.4},{"air_date":"2025-04-09","episode_count":6,"id":383778,"name":"Stagione 7","overview":"","poster_path":"/aRN9LmPQHe8c1B2eR7MB3tiWFWk.jpg","season_number":7,"vote_average":7.1}],"spoken_languages":[{"english_name":"English","iso_639_1":"en","name":"English"}],"status":"Returning Series","tagline":"","type":"Scripted","vote_average":8.284,"vote_count":5532} \ No newline at end of file diff --git a/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv4607languageit b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv4607languageit new file mode 100644 index 0000000..f710086 --- /dev/null +++ b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv4607languageit @@ -0,0 +1 @@ +{"adult":false,"backdrop_path":"/yUOFocKDW7MCC5isx4FK8A68QFp.jpg","created_by":[{"id":15344,"credit_id":"525775af760ee36aaa51895a","name":"J.J. Abrams","original_name":"J.J. Abrams","gender":2,"profile_path":"/uiEVOx3QclxnN76t8PU6v5IcUUP.jpg"},{"id":28974,"credit_id":"525775af760ee36aaa518960","name":"Damon Lindelof","original_name":"Damon Lindelof","gender":2,"profile_path":"/9V75oRAKiI0chdg1wGh1wPqaXsG.jpg"},{"id":1237491,"credit_id":"525775af760ee36aaa518954","name":"Jeffrey Lieber","original_name":"Jeffrey Lieber","gender":2,"profile_path":null}],"episode_run_time":[],"first_air_date":"2004-09-22","genres":[{"id":9648,"name":"Mistero"},{"id":10759,"name":"Action & Adventure"},{"id":18,"name":"Dramma"}],"homepage":"http://abc.go.com/shows/lost","id":4607,"in_production":false,"languages":["en"],"last_air_date":"2010-05-23","last_episode_to_air":{"id":334042,"name":"La fine","overview":"La serie è giunta alla fine. I fronti si dividono mentre Locke attiva il piano che potrebbe finalmente liberarlo dall'isola.","vote_average":8.1,"vote_count":45,"air_date":"2010-05-23","episode_number":17,"episode_type":"finale","production_code":"617","runtime":105,"season_number":6,"show_id":4607,"still_path":"/eNuO8GqCuRb0fAeQDAh2w5AaXTo.jpg"},"name":"Lost","next_episode_to_air":null,"networks":[{"id":2,"logo_path":"/2uy2ZWcplrSObIyt4x0Y9rkG6qO.png","name":"ABC","origin_country":"US"}],"number_of_episodes":118,"number_of_seasons":6,"origin_country":["US"],"original_language":"en","original_name":"Lost","overview":"48 persone sopravvivono ad un tremendo disastro aereo e si ritrovano dispersi su un'isola dell'Oceano Pacifico che sembra completamente disabitata. Ognuno di loro ha una sua storia, ognuno di loro nasconde dei segreti. Ma tutti quanti sono consapevoli che, se vogliono continuare a vivere, debbono collaborare, superare le avversità e le divisioni personali e sperare in un soccorso che potrebbe anche non arrivare mai. Il gruppo, mentre affronta l'inclemenza del tempo e l'ambiente ostile, scopre, con il passare del tempo, che anche l'isola nasconde dei segreti.","popularity":131.2215,"poster_path":"/og6S0aTZU6YUJAbqxeKjCa3kY1E.jpg","production_companies":[{"id":19366,"logo_path":"/vOH8dyQhLK01pg5fYkgiS31jlFm.png","name":"ABC Studios","origin_country":"US"},{"id":11461,"logo_path":"/p9FoEt5shEKRWRKVIlvFaEmRnun.png","name":"Bad Robot","origin_country":"US"},{"id":1558,"logo_path":"/wwaKUcOENHix2jxLfFBfNkCtOEQ.png","name":"Touchstone Television","origin_country":"US"}],"production_countries":[{"iso_3166_1":"US","name":"United States of America"}],"seasons":[{"air_date":"2005-04-27","episode_count":131,"id":14047,"name":"Speciali","overview":"","poster_path":"/w56HDJnHEG5McJ0IdxZ8hJDSUHa.jpg","season_number":0,"vote_average":0.0},{"air_date":"2004-09-22","episode_count":24,"id":14041,"name":"Stagione 1","overview":"","poster_path":"/fq45wLvW48jNN7Jfv3xnui2t3M9.jpg","season_number":1,"vote_average":8.0},{"air_date":"2005-09-21","episode_count":24,"id":14042,"name":"Stagione 2","overview":"","poster_path":"/rjiasmiRvZN4Sboo9HSiwZXVpGT.jpg","season_number":2,"vote_average":8.1},{"air_date":"2006-10-04","episode_count":23,"id":14043,"name":"Stagione 3","overview":"","poster_path":"/26IrbJQ9xGY4F9wgn9k7Z9hAHUU.jpg","season_number":3,"vote_average":8.1},{"air_date":"2008-01-31","episode_count":13,"id":14044,"name":"Stagione 4","overview":"","poster_path":"/9cTBaVJnbWLhry2Q5qz30vl525t.jpg","season_number":4,"vote_average":8.0},{"air_date":"2009-01-21","episode_count":17,"id":14045,"name":"Stagione 5","overview":"","poster_path":"/tOg1nxCSgmJLxBFU35Q7gD4sYLp.jpg","season_number":5,"vote_average":8.4},{"air_date":"2010-02-02","episode_count":17,"id":14046,"name":"Stagione 6","overview":"","poster_path":"/8wlrRJecPW4sMK37nR71zK4hhhP.jpg","season_number":6,"vote_average":8.3}],"spoken_languages":[{"english_name":"English","iso_639_1":"en","name":"English"}],"status":"Ended","tagline":"","type":"Scripted","vote_average":7.945,"vote_count":4560} \ No newline at end of file diff --git a/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv61945languageit b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv61945languageit new file mode 100644 index 0000000..8150306 --- /dev/null +++ b/src/source/__fixtures__/Eurostreaming/https:api.themoviedb.org3tv61945languageit @@ -0,0 +1 @@ +{"adult":false,"backdrop_path":"/uYgcyrinlFfXTFkflzkOjAmtlpP.jpg","created_by":[{"id":49091,"credit_id":"54c38e099251416e6000effe","name":"Uli Brée","original_name":"Uli Brée","gender":2,"profile_path":"/8qHRQed5idzAlfrjc9j4FyNVttq.jpg"}],"episode_run_time":[45],"first_air_date":"2015-01-12","genres":[{"id":35,"name":"Commedia"},{"id":18,"name":"Dramma"}],"homepage":"https://www.daserste.de/unterhaltung/serie/vorstadtweiber/index.html","id":61945,"in_production":false,"languages":["de"],"last_air_date":"2022-03-14","last_episode_to_air":{"id":3596974,"name":"Episodio 11","overview":"","vote_average":0.0,"vote_count":0,"air_date":"2022-03-14","episode_number":11,"episode_type":"finale","production_code":"","runtime":45,"season_number":6,"show_id":61945,"still_path":"/zsumt4d4TfvFB4QuXu2rp7jsaGl.jpg"},"name":"Vorstadtweiber","next_episode_to_air":null,"networks":[{"id":189,"logo_path":"/k1poBlW9HGDnIyZU67BtH3BXQuz.png","name":"ORF 1","origin_country":"AT"},{"id":308,"logo_path":"/nGl2dDGonksWY4fTzPPdkK3oNyq.png","name":"Das Erste","origin_country":"DE"}],"number_of_episodes":61,"number_of_seasons":6,"origin_country":["AT"],"original_language":"de","original_name":"Vorstadtweiber","overview":"","popularity":18.3913,"poster_path":"/um3A1r8A5Cuco7ldJHKtMhU7zU9.jpg","production_companies":[{"id":2279,"logo_path":null,"name":"MR Filmproduktion","origin_country":"AT"},{"id":6856,"logo_path":null,"name":"MR FILM","origin_country":"AT"}],"production_countries":[{"iso_3166_1":"AT","name":"Austria"}],"seasons":[{"air_date":"2015-03-31","episode_count":4,"id":74332,"name":"Speciali","overview":"","poster_path":"/tFF69cFAsIvWMYFp9NbxvQJAORE.jpg","season_number":0,"vote_average":0.0},{"air_date":"2015-01-12","episode_count":10,"id":64717,"name":"Stagione 1","overview":"","poster_path":"/aswimgrUIaeHPH3B8lPH2YYUZxj.jpg","season_number":1,"vote_average":9.0},{"air_date":"2016-03-14","episode_count":10,"id":74313,"name":"Stagione 2","overview":"","poster_path":"/7fVAfhzCXitqVVvvfMDzoNZ9uY1.jpg","season_number":2,"vote_average":9.0},{"air_date":"2018-01-08","episode_count":10,"id":97704,"name":"Stagione 3","overview":"","poster_path":"/W6kdpyhpYK6bU77OD3k3YXPH4k.jpg","season_number":3,"vote_average":9.0},{"air_date":"2019-09-16","episode_count":10,"id":132439,"name":"Stagione 4","overview":"","poster_path":"/hhQeOEgvbzzOBCybHISHQAPAHk6.jpg","season_number":4,"vote_average":8.0},{"air_date":"2021-01-11","episode_count":10,"id":171866,"name":"Stagione 5","overview":"","poster_path":"/5n93sCEdcSMyXc3WEJjJvENdztY.jpg","season_number":5,"vote_average":0.0},{"air_date":"2022-01-10","episode_count":11,"id":236440,"name":"Stagione 6","overview":"","poster_path":"/9GomC3oI57Tf3Y70WRMrpCs1GPg.jpg","season_number":6,"vote_average":0.0}],"spoken_languages":[{"english_name":"German","iso_639_1":"de","name":"Deutsch"}],"status":"Ended","tagline":"","type":"Scripted","vote_average":8.1,"vote_count":13} \ No newline at end of file diff --git a/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream2605-the-last-of-us-streamingcommunity-streaming.html b/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream2605-the-last-of-us-streamingcommunity-streaming.html new file mode 100644 index 0000000..e16bf4b --- /dev/null +++ b/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream2605-the-last-of-us-streamingcommunity-streaming.html @@ -0,0 +1,1110 @@ + + + + +The Last of Us streaming SERIE TV - euroStreaming + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+ + + +
+ +

The Last of Us streaming

+
The Last of Us streaming ita
+ +
+

Trama serie tv: Joel ed Ellie, una coppia connessa per la durezza del mondo in cui vivono, sono costretti a sopportare circostanze brutali e spietati assassini in un viaggio attraverso l'America dopo la pandemia. + + Continua a leggere +

+
+
+
+
+ Stagione + +
+
+ Episodio +
+
+ +
+
+ +
+ +
+
+
+
+
+ + +
+
+ +

Devi essere loggato per visionare o scaricare l'episodio. L'iscrizione è Gratuita >>

+
+
+ +
+
+

Link disponibili "The Last of Us" per lo Streaming e Download Completo:
+

+
+
STAGIONE 1
+ +
+
+
STAGIONE 2
+ +
+ +
+ + + + + + + + + + +
+
+
+ +
+ + +
+
Lascia un commento:
+ +
+ + +
+
+
+
+
    + +
  • +
    +
    +
  • + +
  • + +
  • + +
  • +
    +
  • + + +
+
+ +
+ +
+
+
+
+
+ + +
+ + + + + + + + + + +
+
+
+ +
+
+
+
+
The Last of Us (2023 - In Lavorazione)
+
+
+
+
+
+ +
+
+ +
+
Email o Password sono errati o innesistenti.
+
+ +
+
+ +
+ +
+
+
+
+ +
+
    +
  • + + +Tutti i film e Serie TV in ITALIANO
  • +
  • + + +Guardare e Scaricare senza limiti
  • +
  • + + +Contenuto in massima qualità Full HD e 4K
  • +
  • + + +Applicazione Mobile per Android e IOS
  • +
  • + + +Ricevere gli avvisi sulle nuove uscite
  • +
  • + + +Player di riserva in caso di problemi con la connessione
  • +
  • + + +0 pubblicità
  • +
  • + + +Collegare fino a 6 dispositivi
  • +
+
+
+
+ + + + + + +
+
+ + + +
+
+ + + +
+ + + + + + + + + + + + + + + + +
+ + + + diff --git a/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html b/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html index 25b62bd..ed546ce 100644 --- a/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html +++ b/src/source/__fixtures__/Eurostreaming/https:eurostreaming.mystream284-black-mirror-streaming-streaming.html @@ -19,17 +19,18 @@ - + - + - - + + - + +
@@ -63,8 +64,9 @@