88 lines
2.6 KiB
Python
88 lines
2.6 KiB
Python
from sys import stderr
|
|
|
|
from manga_py.crypt import KissMangaComCrypt
|
|
from manga_py.provider import Provider
|
|
from .helpers.std import Std
|
|
|
|
|
|
class KissMangaCom(Provider, Std):
|
|
__local_data = {
|
|
'iv': b'a5e8e2e9c2721be0a84ad660c472c1f3',
|
|
'key': b'mshsdf832nsdbash20asdm',
|
|
}
|
|
|
|
def get_archive_name(self) -> str:
|
|
return '{:0>3}-{}'.format(
|
|
self.chapter_id + 1,
|
|
self.get_chapter_index()
|
|
)
|
|
|
|
def get_chapter_index(self) -> str:
|
|
name = self.re.search(r'/Manga/[^/]+/(.+)\?id=(\d+)', self.chapter)
|
|
return '-'.join(name.groups())
|
|
|
|
def get_main_content(self):
|
|
return self._get_content('{}/Manga/{}')
|
|
|
|
def get_manga_name(self) -> str:
|
|
return self._get_name('/Manga/([^/]+)')
|
|
|
|
def get_chapters(self):
|
|
chapters = self._elements('.listing td a')
|
|
if not len(chapters):
|
|
self.log('Chapters not found', file=stderr)
|
|
return chapters
|
|
|
|
def prepare_cookies(self):
|
|
self._params['rename_pages'] = True
|
|
self.cf_protect(self.get_url())
|
|
self._storage['cookies']['rco_quality'] = 'hq'
|
|
if not self._params['cf-protect']:
|
|
self.log('CloudFlare protect fail!', file=stderr)
|
|
|
|
def __decrypt_images(self, crypt, key, hexes):
|
|
images = []
|
|
for i in hexes:
|
|
try:
|
|
img = crypt.decrypt(self.__local_data['iv'], key, i)
|
|
images.append(img.decode('utf-8', errors='ignore').replace('\x10', '').replace('\x0f', ''))
|
|
|
|
except Exception as e:
|
|
pass
|
|
|
|
return images
|
|
|
|
def __check_key(self, crypt, content):
|
|
# if need change key
|
|
need = self.re.search(r'\["([^"]+)"\].\+chko.?=.?chko', content)
|
|
key = self.__local_data['key']
|
|
if need:
|
|
# need last group
|
|
key += crypt.decode_escape(need.group(1))
|
|
else:
|
|
# if need change key
|
|
need = self.re.findall(r'\["([^"]+)"\].*?chko.*?=.*?chko', content)
|
|
if need:
|
|
key = crypt.decode_escape(need[-1])
|
|
return key
|
|
|
|
def get_files(self):
|
|
crypt = KissMangaComCrypt()
|
|
content = self.http_get(self.chapter)
|
|
key = self.__check_key(crypt, content)
|
|
hexes = self.re.findall(r'lstImages.push\(wrapKA\(["\']([^"\']+?)["\']\)', content)
|
|
if not hexes:
|
|
self.log('Images not found!', file=stderr)
|
|
return []
|
|
return self.__decrypt_images(crypt, key, hexes)
|
|
|
|
def get_cover(self):
|
|
return self._cover_from_content('.rightBox .barContent img')
|
|
|
|
def book_meta(self) -> dict:
|
|
# todo meta
|
|
pass
|
|
|
|
|
|
main = KissMangaCom
|