anime-downloader/anime_downloader/sites/voiranime.py

72 lines
2.5 KiB
Python

import logging
import re
from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult
from anime_downloader.sites import helpers
logger = logging.getLogger(__name__)
class VoirAnime(Anime, sitename='voiranime'):
sitename = 'voiranime'
url = f'https://{sitename}.com/'
@classmethod
def search(cls, query):
search_results = helpers.soupify(helpers.get(cls.url, params={'s': query})).select('.post-title > h3 > a')
search_results = [
SearchResult(
title=i.text,
url=i.get('href'))
for i in search_results
]
return search_results
def _scrape_episodes(self):
html = helpers.get(self.url).text
episodes = list(re.findall(r"<li class=[\"']wp-manga-chapter *[\"']>\n<a href=[\"'](.*?)[\"']>", html))
return episodes[::-1]
def _scrape_metadata(self):
soup = helpers.soupify(helpers.get(self.url))
self.title = soup.select_one('.post-title > h1').text
class VoirAnimeEpisode(AnimeEpisode, sitename='voiranime'):
def _get_sources(self):
base_url = 'https://voiranime.com/'
soup = helpers.soupify(helpers.get(self.url))
servers = [
base_url + x['data-redirect']
for x in soup.select('.host-select > option')
]
"""These could probably be condensed down to one, but would look too spooky"""
# code below doesnt work anymore, since voiranime introduced captcha
multilinks_regex = r'var\s*multilinks\s*=\s*\[\[{(.*?)}]];'
mutilinks_iframe_regex = r"iframe\s*src=\\(\"|')([^(\"|')]*)"
multilinks = re.search(multilinks_regex, str(soup)).group(1)
logger.debug('Multilinks: {}'.format(multilinks))
iframes = re.findall(mutilinks_iframe_regex, multilinks)
logger.debug('Iframes: {}'.format(iframes))
sources = [i[-1].replace('\\', '') for i in iframes]
extractors = {
# url #Extractor #Server in config
'https://gounlimited.to/embed': ['mp4upload', 'gounlimited'],
}
sources_list = []
for i in sources:
for j in extractors:
if j in i:
sources_list.append({
'extractor': extractors[j][0],
'url': i,
'server': extractors[j][1],
'version': 'subbed'
})
return self.sort_sources(sources_list)