Added manga-py source
This commit is contained in:
87
manga-py-stable_1.x/manga_py/providers/kissmanga_com.py
Normal file
87
manga-py-stable_1.x/manga_py/providers/kissmanga_com.py
Normal file
@@ -0,0 +1,87 @@
|
||||
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
|
||||
Reference in New Issue
Block a user