68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
from manga_py.provider import Provider
|
|
from .helpers.std import Std
|
|
|
|
|
|
class OtakuSmashCom(Provider, Std):
|
|
selector = r'https?://[^/]+/(comics/|read-\w+/|reader/)?([^/]+)'
|
|
prefix = '/'
|
|
|
|
def get_chapter_index(self) -> str:
|
|
selector = self.selector + '/([^/]+)'
|
|
idx = self.re.search(selector, self.chapter)
|
|
return '-'.join(idx.group(3).split('.'))
|
|
|
|
def get_main_content(self):
|
|
return self.http_get(self._get_manga_url())
|
|
|
|
def get_manga_name(self) -> str:
|
|
result = self.re.search(self.selector, self.get_url())
|
|
self.prefix = result.group(1)
|
|
return result.group(2)
|
|
|
|
def get_chapters(self):
|
|
parser = self.document_fromstring(self.content)
|
|
items = self._first_select_options(parser, '.pager select[name="chapter"]', False)
|
|
url = self._get_manga_url()
|
|
return ['{}{}/'.format(url, i.get('value')) for i in items]
|
|
|
|
def get_files(self):
|
|
chapter = self.chapter
|
|
parser = self.html_fromstring(chapter)
|
|
pages = self._first_select_options(parser, '.mid .pager select[name="page"]')
|
|
images = []
|
|
_img = self._get_image(parser)
|
|
_img and images.append(_img)
|
|
self.log('Get pages... Please, wait')
|
|
for page in pages:
|
|
parser = self.html_fromstring('{}{}/'.format(chapter, page.get('value')))
|
|
_img = self._get_image(parser)
|
|
_img and images.append(_img)
|
|
return images
|
|
|
|
def _get_manga_url(self):
|
|
return '{}/{}{}/'.format(self.domain, self.prefix, self.manga_name)
|
|
|
|
def _get_image(self, parser):
|
|
image = parser.cssselect('a > img.picture')
|
|
if not len(image):
|
|
return False
|
|
image = image[0].get('src')
|
|
if image[0] == '/':
|
|
return self.http().normalize_uri(image)
|
|
base_uri = parser.cssselect('base')
|
|
if len(base_uri):
|
|
base_uri = base_uri[0].get('href')
|
|
else:
|
|
base_uri = self.chapter
|
|
return base_uri + image
|
|
|
|
def get_cover(self):
|
|
pass # TODO
|
|
|
|
def book_meta(self) -> dict:
|
|
# todo meta
|
|
pass
|
|
|
|
|
|
main = OtakuSmashCom
|