66 lines
2.1 KiB
Python
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)
|