From a3414a1bec08c8802df4d0d74e62a572f6677b58 Mon Sep 17 00:00:00 2001 From: Gomile <39145128+ngomile@users.noreply.github.com> Date: Sat, 28 Sep 2019 14:27:48 +0200 Subject: [PATCH] Added animefreak.tv (#228) * Added animefreak * Add useful comment for animefreak * Added animefreak to README.md * Use json method in helpers.get --- README.md | 1 + anime_downloader/sites/animefreak.py | 43 ++++++++++++++++++++++++++++ anime_downloader/sites/init.py | 1 + 3 files changed, 45 insertions(+) create mode 100644 anime_downloader/sites/animefreak.py diff --git a/README.md b/README.md index 7c83836..9a8e81a 100644 --- a/README.md +++ b/README.md @@ -55,6 +55,7 @@ Yeah. Me too! That's why this tool exists. - Anistream - Animeflv (Latin) - itsaturday.com +- Animefreak - Masterani.me [cloudlfare] (site shut down** ## Installation diff --git a/anime_downloader/sites/animefreak.py b/anime_downloader/sites/animefreak.py new file mode 100644 index 0000000..8284e3f --- /dev/null +++ b/anime_downloader/sites/animefreak.py @@ -0,0 +1,43 @@ +import re + +from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult +from anime_downloader.sites.exceptions import NotFoundError +from anime_downloader.sites import helpers + + +class AnimeFreak(Anime, sitename='animefreak'): + sitename = 'animefreak' + search_url = f'https://{sitename}.tv/search/topSearch' + anime_url = 'https://www.animefreak.tv/watch' + QUALITIES = ['360p', '480p', '720p', '1080p'] + + @classmethod + def search(cls, query): + search_results = helpers.get(cls.search_url, + params={'q': query}).json() + search_results = [ + SearchResult( + title=result['name'], + url=f'{cls.anime_url}/{result["seo_name"]}') + for result in search_results.get('data', []) + ] + + return search_results + + def _scrape_episodes(self): + soup = helpers.soupify(helpers.get(self.url)) + # Negative index for episode links in cases where full episode + # list is available or if not default to usual episode list + episode_links = soup.select('ul.check-list')[-1].select('li a') + return [a.get('href') for a in episode_links][::-1] + + +class AnimeFreakEpisode(AnimeEpisode, sitename='animefreak'): + def _get_sources(self): + page = helpers.get(self.url).text + source_re = re.compile(r'loadVideo.+file: "([^"]+)', re.DOTALL) + match = source_re.findall(page) + + if not match: + raise NotFoundError(f'Failed to find video url for {self.url}') + return [('no_extractor', match[0],)] diff --git a/anime_downloader/sites/init.py b/anime_downloader/sites/init.py index 32406be..3e98e08 100644 --- a/anime_downloader/sites/init.py +++ b/anime_downloader/sites/init.py @@ -11,6 +11,7 @@ ALL_ANIME_SITES = [ ('anistream', 'anistream', 'Anistream'), ('animeflv', 'animeflv', 'Animeflv'), ('itsaturday', 'itsaturday', 'Itsaturday'), + ('animefreak', 'animefreak', 'AnimeFreak'), ]