From 57a59567d5eec2bbff13712f9e6441ef5aa407c2 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 13:42:08 +0300 Subject: [PATCH 1/9] Update init.py --- anime_downloader/sites/init.py | 1 + 1 file changed, 1 insertion(+) diff --git a/anime_downloader/sites/init.py b/anime_downloader/sites/init.py index 054d83b..0f22317 100644 --- a/anime_downloader/sites/init.py +++ b/anime_downloader/sites/init.py @@ -44,6 +44,7 @@ ALL_ANIME_SITES = [ ('vidstream', 'vidstream', 'VidStream'), # ('voiranime', 'voiranime', 'VoirAnime'), ('vostfree', 'vostfree', 'VostFree'), + ('wcostream', 'wcostream', 'WcoStream'), ] From 7c8974fd5dd4a14e84e83f7ce8061a81903cde5c Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 13:42:39 +0300 Subject: [PATCH 2/9] Create wcostream.py --- anime_downloader/sites/wcostream.py | 68 +++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 anime_downloader/sites/wcostream.py diff --git a/anime_downloader/sites/wcostream.py b/anime_downloader/sites/wcostream.py new file mode 100644 index 0000000..d596b93 --- /dev/null +++ b/anime_downloader/sites/wcostream.py @@ -0,0 +1,68 @@ +from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult +from anime_downloader.extractors import get_extractor +from anime_downloader.sites import helpers +import re + + +class WcoStream(Anime, sitename='wcostream'): + + sitename = 'wcostream' + + @classmethod + def search(cls, query): + soup = helpers.soupify(helpers.get( + 'https://wcostream.cc/search', + params={'keyword': query} + )) + results = soup.select('.film_list-wrap > .flw-item') + + return [ + SearchResult( + title=x.find('img')['alt'], + url=x.find('a')['href'], + meta={'year': x.select_one('.fd-infor > .fdi-item').text.strip()}, + meta_info={ + 'version_key_dubbed': '(Dub)' + } + ) + for x in results + ] + + def _scrape_episodes(self): + soup = helpers.soupify(helpers.get(self.url)) + episodes = soup.select_one('#content-episodes').select('ul.nav > li.nav-item') # noqa + return [ + x.find('a')['href'] + for x in episodes + if 'javascript' not in str(x) + ] + + def _scrape_metadata(self): + soup = helpers.soupify(helpers.get(self.url)) + self.title = soup.select_one( + 'meta[property="og:title"]' + )['content'].split('Episode')[0].strip() + + +class WcoStreamEpisode(AnimeEpisode, sitename='wcostream'): + def _get_sources(self): + soup = helpers.soupify(helpers.get(self.url)) + servers = soup.select("#servers-list > ul > li") + servers = [ + { + "name": server.find('span').text.strip(), + "link": server.find('a')['data-embed'] + } + for server in servers + ] + sources = [] + + for server in servers: + ext = get_extractor('wcostream')( + server['link'], + quality=self.quality, + headers={} + ) + sources.extend([('no_extractor', x['stream_url']) for x in ext._get_data()]) # noqa + + return sources From 2add87ff62db26725cb1f9225e9a0e9e09a65231 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 13:43:15 +0300 Subject: [PATCH 3/9] Update init.py --- anime_downloader/extractors/init.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/anime_downloader/extractors/init.py b/anime_downloader/extractors/init.py index 3625c6d..f4ecbc3 100644 --- a/anime_downloader/extractors/init.py +++ b/anime_downloader/extractors/init.py @@ -67,6 +67,12 @@ ALL_EXTRACTORS = [ 'regex': 'yourupload', 'class': 'Yourupload' }, + { + 'sitename': 'wcostream', + 'modulename': 'wcostream', + 'regex': 'wcostream', + 'class': 'WcoStream' + }, { 'sitename': 'vidstream', 'modulename': 'vidstream', From 44dd797b7864be151b81de7ab27a4881a222df11 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 13:43:33 +0300 Subject: [PATCH 4/9] Create wcostream.py --- anime_downloader/extractors/wcostream.py | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 anime_downloader/extractors/wcostream.py diff --git a/anime_downloader/extractors/wcostream.py b/anime_downloader/extractors/wcostream.py new file mode 100644 index 0000000..0b65fee --- /dev/null +++ b/anime_downloader/extractors/wcostream.py @@ -0,0 +1,37 @@ +from anime_downloader.extractors.base_extractor import BaseExtractor +from anime_downloader.sites import helpers +import re + + +class WcoStream(BaseExtractor): + def _get_data(self): + try: + if self.url.startswith('https://vidstream.pro/e'): + base_url = 'https://vidstream.pro' + elif self.url.startswith('https://mcloud.to/e/'): + base_url = 'https://mcloud.to' + else: + return [] + + html = helpers.get(self.url, referer='https://wcostream.cc/') + id_ = re.findall(r"/e/(.*?)\?domain", self.url)[0] + skey = re.findall(r"skey\s=\s['\"](.*?)['\"];", html.text)[0] + + apiLink = f"{base_url}/info/{id_}?domain=wcostream.cc&skey={skey}" + referer = f"{base_url}/e/{id_}?domain=wcostream.cc" + + response = helpers.get(apiLink, referer=referer).json() + + if response['success'] is True: + sources = [ + { + 'stream_url': x['file'] + } + for x in response['media']['sources'] + ] + return sources + else: + return [] + + except Exception: + return {"stream_url": ''} From d88e6fef720fec446d48f9fc87c3250773779367 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 15:09:39 +0300 Subject: [PATCH 5/9] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ef45059..4e0d2b5 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,7 @@ Yeah. Me too! That's why this tool exists. - Vidstream - Voiranime - Vostfree +- Wcostream Sites that require Selenium **DO NOT** and **WILL NOT** work on mobile operating systems From 4205ea44173ee2c480195d5c1abc7ec705be714d Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 15:10:22 +0300 Subject: [PATCH 6/9] Update config.py --- anime_downloader/config.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/anime_downloader/config.py b/anime_downloader/config.py index 141bfd6..71a6f73 100644 --- a/anime_downloader/config.py +++ b/anime_downloader/config.py @@ -133,6 +133,10 @@ DEFAULT_CONFIG = { 'servers': ['vidstream', 'gcloud', 'yourupload', 'hydrax'], 'version': 'subbed', }, + 'wcostream': { + 'servers': ['vidstreampro', 'mcloud'], + 'version': 'subbed', + }, 'animeflix': { 'server': 'AUEngine', 'fallback_servers': ['FastStream'], From 0dbdfb86dc919788b6bece15a003182f02116a0c Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 15:20:08 +0300 Subject: [PATCH 7/9] Update wcostream.py --- anime_downloader/sites/wcostream.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/anime_downloader/sites/wcostream.py b/anime_downloader/sites/wcostream.py index d596b93..8c7b65b 100644 --- a/anime_downloader/sites/wcostream.py +++ b/anime_downloader/sites/wcostream.py @@ -1,6 +1,8 @@ from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult from anime_downloader.extractors import get_extractor +from anime_downloader.config import Config from anime_downloader.sites import helpers + import re @@ -46,6 +48,7 @@ class WcoStream(Anime, sitename='wcostream'): class WcoStreamEpisode(AnimeEpisode, sitename='wcostream'): def _get_sources(self): + config = Config._read_config()['siteconfig']['wcostream'] soup = helpers.soupify(helpers.get(self.url)) servers = soup.select("#servers-list > ul > li") servers = [ @@ -55,6 +58,8 @@ class WcoStreamEpisode(AnimeEpisode, sitename='wcostream'): } for server in servers ] + + servers = sorted(servers, key=lambda x: x['name'].lower() in config['servers'][0].lower())[::-1] # noqa sources = [] for server in servers: From 7fb7020fb91fa6429050b71f57b51bf96c1148a6 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Sun, 23 May 2021 16:33:48 +0300 Subject: [PATCH 8/9] Update wcostream.py --- anime_downloader/sites/wcostream.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/anime_downloader/sites/wcostream.py b/anime_downloader/sites/wcostream.py index 8c7b65b..44ead83 100644 --- a/anime_downloader/sites/wcostream.py +++ b/anime_downloader/sites/wcostream.py @@ -1,6 +1,5 @@ from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult from anime_downloader.extractors import get_extractor -from anime_downloader.config import Config from anime_downloader.sites import helpers import re @@ -48,7 +47,6 @@ class WcoStream(Anime, sitename='wcostream'): class WcoStreamEpisode(AnimeEpisode, sitename='wcostream'): def _get_sources(self): - config = Config._read_config()['siteconfig']['wcostream'] soup = helpers.soupify(helpers.get(self.url)) servers = soup.select("#servers-list > ul > li") servers = [ @@ -59,7 +57,7 @@ class WcoStreamEpisode(AnimeEpisode, sitename='wcostream'): for server in servers ] - servers = sorted(servers, key=lambda x: x['name'].lower() in config['servers'][0].lower())[::-1] # noqa + servers = sorted(servers, key=lambda x: x['name'].lower() in self.config['servers'][0].lower())[::-1] # noqa sources = [] for server in servers: From 08c51d4d692aaad296deaad594a671cc4671e244 Mon Sep 17 00:00:00 2001 From: Arjix <53124886+ArjixWasTaken@users.noreply.github.com> Date: Mon, 24 May 2021 01:19:14 +0300 Subject: [PATCH 9/9] small fix --- anime_downloader/sites/wcostream.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/anime_downloader/sites/wcostream.py b/anime_downloader/sites/wcostream.py index 44ead83..978ee93 100644 --- a/anime_downloader/sites/wcostream.py +++ b/anime_downloader/sites/wcostream.py @@ -35,7 +35,7 @@ class WcoStream(Anime, sitename='wcostream'): return [ x.find('a')['href'] for x in episodes - if 'javascript' not in str(x) + if 'https://wcostream.cc/watch' in x.find('a')['href'] ] def _scrape_metadata(self):