added animevibe (#405)
* Create animevibe.py * added to init * added animevibe to config * added 3rdparty extractor * added extractor to initmaster
parent
458d6d18e4
commit
8b2654c9e7
|
@ -105,6 +105,16 @@ DEFAULT_CONFIG = {
|
||||||
"ptserver"
|
"ptserver"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
'animevibe': {
|
||||||
|
"servers": [
|
||||||
|
"vidstream",
|
||||||
|
"3rdparty",
|
||||||
|
"mp4upload",
|
||||||
|
"hydrax",
|
||||||
|
"gcloud",
|
||||||
|
"fembed"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
import re
|
||||||
|
from anime_downloader.extractors.base_extractor import BaseExtractor
|
||||||
|
from anime_downloader.sites import helpers
|
||||||
|
from anime_downloader import util
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class Thirdparty(BaseExtractor):
|
||||||
|
def _get_data(self):
|
||||||
|
eval_regex = r'eval\(.*\)'
|
||||||
|
file_regex = r"file('|\"|):*.'(http.*?),"
|
||||||
|
soup = helpers.soupify(helpers.get(self.url))
|
||||||
|
packed_js = r'{}'.format(re.search(eval_regex,str(soup)).group())
|
||||||
|
logger.debug('Packed javascript: {}'.format(packed_js))
|
||||||
|
js = util.deobfuscate_packed_js(packed_js)
|
||||||
|
file = re.search(file_regex,js).group(2)
|
||||||
|
return {'stream_url': file}
|
|
@ -96,6 +96,12 @@ ALL_EXTRACTORS = [
|
||||||
'modulename': 'streamx',
|
'modulename': 'streamx',
|
||||||
'regex': 'streamx',
|
'regex': 'streamx',
|
||||||
'class': 'StreamX'
|
'class': 'StreamX'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'sitename': '3rdparty',
|
||||||
|
'modulename': '3rdparty',
|
||||||
|
'regex': '3rdparty',
|
||||||
|
'class': 'Thirdparty'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
import re
|
||||||
|
from anime_downloader.extractors import get_extractor
|
||||||
|
from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult
|
||||||
|
from anime_downloader.sites import helpers
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class AnimeVibe(Anime, sitename='animevibe'):
|
||||||
|
sitename = 'animevibe'
|
||||||
|
url = f'https://{sitename}.tv'
|
||||||
|
@classmethod
|
||||||
|
def search(cls, query):
|
||||||
|
search_results = helpers.soupify(helpers.get(cls.url,params={'s':query})).select('h5.title-av-search-res > a')
|
||||||
|
return [
|
||||||
|
SearchResult(
|
||||||
|
title = a.text,
|
||||||
|
url = a.get('href'))
|
||||||
|
for a in search_results
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _scrape_episodes(self):
|
||||||
|
#First episode
|
||||||
|
episodes = [self.url]
|
||||||
|
soup = helpers.soupify(helpers.get(self.url))
|
||||||
|
episodes.extend([x.get('href') for x in soup.select('div.wrap-episode-list > a')])
|
||||||
|
return episodes
|
||||||
|
|
||||||
|
|
||||||
|
def _scrape_metadata(self):
|
||||||
|
soup = helpers.soupify(helpers.get(self.url))
|
||||||
|
self.title = soup.select('h3.av-episode-title')[0].text
|
||||||
|
|
||||||
|
|
||||||
|
class AnimeVibeEpisode(AnimeEpisode, sitename='animevibe'):
|
||||||
|
def _get_sources(self):
|
||||||
|
soup = helpers.soupify(helpers.get(self.url))
|
||||||
|
iframe = soup.select('iframe')[0]
|
||||||
|
logger.debug('iframe: {}'.format('iframe'))
|
||||||
|
embed = 'https://animevibe.tv' + str(iframe.get('src'))
|
||||||
|
sources = helpers.soupify(helpers.get(embed)).select('option')
|
||||||
|
logger.debug('Sources: {}'.format(sources))
|
||||||
|
sources_list = []
|
||||||
|
extractors = [
|
||||||
|
'3rdparty',
|
||||||
|
'mp4upload',
|
||||||
|
'fembed',
|
||||||
|
'gcloud',
|
||||||
|
'vidstream',
|
||||||
|
'hydrax'
|
||||||
|
]
|
||||||
|
|
||||||
|
prefix = 'https://animevibe.tv/players/'
|
||||||
|
for i in sources:
|
||||||
|
source = None
|
||||||
|
url = i.get('value').replace('iframe.php?vid=','')
|
||||||
|
url = prefix + url if url.startswith('3rdparty') else url
|
||||||
|
#Choosing 3rd-party link is not implemented yet
|
||||||
|
for j in extractors:
|
||||||
|
#the 3rd-party url can contain other extractors
|
||||||
|
if j in url and not ('3rdparty' in url and j != '3rdparty'):
|
||||||
|
extractor = 'gcloud' if j == 'fembed' else j #fembed gets passed to gcloud too
|
||||||
|
source = {
|
||||||
|
'extractor':extractor,
|
||||||
|
'server':j,
|
||||||
|
'url':url,
|
||||||
|
'version':'subbed'
|
||||||
|
}
|
||||||
|
|
||||||
|
if source:
|
||||||
|
sources_list.append(source)
|
||||||
|
|
||||||
|
logger.debug('sources_list: {}'.format(sources_list))
|
||||||
|
return self.sort_sources(sources_list)
|
|
@ -23,7 +23,8 @@ ALL_ANIME_SITES = [
|
||||||
('animekisa','animekisa','AnimeKisa'),
|
('animekisa','animekisa','AnimeKisa'),
|
||||||
('nyaa','nyaa','Nyaa'),
|
('nyaa','nyaa','Nyaa'),
|
||||||
('animedaisuki','animedaisuki','Animedaisuki'),
|
('animedaisuki','animedaisuki','Animedaisuki'),
|
||||||
('justdubs','justdubs','JustDubs')
|
('justdubs','justdubs','JustDubs'),
|
||||||
|
('animevibe','animevibe','AnimeVibe')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue