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