anime-downloader/anime_downloader/sites/darkanime.py

66 lines
2.1 KiB
Python

import logging
import json
import re
from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult
from anime_downloader.sites import helpers
logger = logging.getLogger(__name__)
class DarkAnime(Anime, sitename='darkanime'):
sitename = 'darkanime'
@classmethod
def search(cls, query):
soup = helpers.soupify(helpers.get('https://app.darkanime.stream/api/v1/animes', params={'term': query}).json()['animesHtml'])
soup = soup.find_all('a', href=True)
return [
SearchResult(
title=x.find('h3').text.strip(),
url='https://app.darkanime.stream' + x['href'],
)
for x in soup
]
def _scrape_episodes(self):
html = helpers.soupify(helpers.get(self.url).text)
eps = html.find('ul', class_='mt-4').find_all('li')
eps = ['https://app.darkanime.stream' + x.a['href'] for x in eps]
eps.reverse()
return eps
def _scrape_metadata(self):
self.title = helpers.soupify(helpers.get(self.url).text).find_all('h2')[0].text.strip()
class DarkAnimeEpisode(AnimeEpisode, sitename='darkanime'):
def _get_sources(self):
server_links = {
'mp4upload': 'https://www.mp4upload.com/embed-{}.html',
'trollvid': 'https://trollvid.net/embed/{}',
}
resp = helpers.soupify(helpers.get(self.url).text).find_all('script') # [-3].string
for i in resp:
if i.string:
if 'sources' in i.string:
res = i.string
hosts = json.loads(re.search(r"(\[[^)]+\])", res).group(1))
logger.debug('Hosts: {}'.format(hosts))
sources_list = []
for i in hosts:
for j in server_links:
if i.get('host') in j and i.get('source'):
sources_list.append({
'extractor': j,
'url': server_links[j].format(i['source']),
'server': j,
'version': i['source']
})
return self.sort_sources(sources_list)