Added provider Anime8 (.ru) (#488)

* Update config.py

* Add streamx.py

* Update init.py

Co-authored-by: Blatzar <46196380+Blatzar@users.noreply.github.com>
master
Arjix 2020-08-22 19:41:22 +03:00 committed by GitHub
parent c40d181092
commit 41a75c61a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 1 deletions

View File

@ -58,6 +58,9 @@ DEFAULT_CONFIG = {
'version': 'subbed',
'server': 'natsuki',
},
'anime8': {
'version':'subbed'
},
'gogoanime': {
'server': 'cdn',
'version': 'subbed'

View File

@ -20,5 +20,5 @@ class StreamX(BaseExtractor):
return {
'stream_url': file,
'referer': self.url
'referer': file
}

View File

@ -0,0 +1,65 @@
import logging
import re
from anime_downloader.sites.anime import Anime, AnimeEpisode, SearchResult
from anime_downloader.sites import helpers
logger = logging.getLogger(__name__)
class Anime8(Anime, sitename = 'anime8'):
sitename = 'anime8'
@classmethod
def search(cls, query):
soup = helpers.soupify(helpers.get('https://anime8.ru/Search/', params={'s': query}).text)
results = soup.select('div.ml-item > a')
search_results = [
SearchResult(
title = i.find('h2').text,
url = i['href'],
meta_info = {
'version_key_subbed':'(Sub)',
'version_key_dubbed':'(Dub)'
})
for i in results
]
return search_results
def _scrape_episodes(self):
link = helpers.soupify(helpers.get(self.url).text).select_one('div#mv-info > a')['href']
soup = helpers.soupify(helpers.get(link).text)
eps = soup.select('a[class*="btn-eps first-ep last-ep"]')
eps = [x.get('href') for x in eps]
count = range(len(eps) - 1)
for a, b in zip(eps, count):
if '-Preview' in a:
eps.pop(b)
return eps
def _scrape_metadata(self):
soup = helpers.soupify(helpers.get(self.url))
self.title = soup.select('div.thumb.mvic-thumb > img')[0]['alt']
class Anime8Episode(AnimeEpisode, sitename='anime8'):
def _get_sources(self):
resp = helpers.get(self.url)
# Gets the ctk and id from the page used for a post request.
ctk = re.search(r"ctk\s+=\s+'(.*)?';", resp.text).group(1)
_id = re.search(r"episode_id\s*=\s*([^;]*)", resp.text).group(1)
logger.info('ctk: {}'.format(ctk))
logger.info('id: {}'.format(_id))
# The post request returns an embed.
resp = helpers.post("https://anime8.ru/ajax/anime/load_episodes_v2?s=fserver", data = {"episode_id": _id, "ctk": ctk})
# Gets the real embed url. Json could be used on the post request, but this is probably more reliable.
# Skips if no episode found.
if not resp.json().get('status'):
return ''
embed = re.search(r"iframe\s*src.*?\"([^\"]*)", resp.text).group(1).replace('\\','')
return [('streamx', embed)]

View File

@ -3,6 +3,7 @@ from importlib import import_module
ALL_ANIME_SITES = [
# ('filename', 'sitename', 'classname')
('_4anime','4anime','Anime4'),
('anime8','anime8','Anime8'),
('animeonline','animeonline360','AnimeOnline'),
('gogoanime', 'gogoanime', 'GogoAnime'),
('kisscartoon', 'kisscartoon', 'KissCartoon'),