Added manga-py source
This commit is contained in:
111
manga-py-stable_1.x/manga_py/providers/dm5_com.py
Normal file
111
manga-py-stable_1.x/manga_py/providers/dm5_com.py
Normal file
@@ -0,0 +1,111 @@
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
import execjs
|
||||
|
||||
from manga_py.fs import is_file
|
||||
from manga_py.provider import Provider
|
||||
from .helpers.std import Std
|
||||
|
||||
|
||||
class Dm5Com(Provider, Std):
|
||||
def get_chapter_index(self) -> str:
|
||||
re = self.re.compile(r'[^\d+](\d+)')
|
||||
return re.search(self.chapter[1]).group(1)
|
||||
|
||||
def get_main_content(self):
|
||||
content = self._storage.get('main_content', None)
|
||||
if content is None:
|
||||
if self.get_url().find('/manhua-'):
|
||||
# normal url
|
||||
name = self._get_name('/manhua-([^/]+)')
|
||||
else:
|
||||
# chapter url
|
||||
selector = '.title .right-arrow > a'
|
||||
name = self.html_fromstring(self.get_url(), selector, 0)
|
||||
name = self._get_name('/manhua-([^/]+)', name.get('href'))
|
||||
content = self.http_get('{}/manhua-{}/'.format(
|
||||
self.domain,
|
||||
name
|
||||
))
|
||||
return content
|
||||
|
||||
def get_manga_name(self) -> str:
|
||||
title = self.text_content(self.content, '.info .title')
|
||||
if title:
|
||||
return title
|
||||
re = self.re.search('/manhua-([^/]+)', self.get_url())
|
||||
return re.group(1)
|
||||
|
||||
def get_chapters(self):
|
||||
items = self._elements('ul.detail-list-select')
|
||||
if not items:
|
||||
return []
|
||||
items = items[0].cssselect('li > a')
|
||||
n = self.http().normalize_uri
|
||||
return [(n(i.get('href')), i.text_content()) for i in items]
|
||||
|
||||
def get_files(self): # fixme
|
||||
content = self.http_get(self.chapter[0])
|
||||
parser = self.document_fromstring(content)
|
||||
pages = parser.cssselect('.chapterpager a')
|
||||
if pages:
|
||||
pages = int(pages[-1].text_content().strip())
|
||||
else:
|
||||
pages = 1
|
||||
s = lambda k: self.re.search(r'%s\s*=[\s"]*(.+?)[\s"]*;' % k, content).group(1)
|
||||
key = parser.cssselect('#dm5_key')[0].get('value')
|
||||
cid = s(r'\bDM5_CID')
|
||||
mid = s(r'\bDM5_MID')
|
||||
sign = s(r'\bDM5_VIEWSIGN')
|
||||
sign_dt = quote_plus(s(r'\bDM5_VIEWSIGN_DT'))
|
||||
chapter_idx = self.re.search(r'/(m\d+)', self.chapter[0]).group(1)
|
||||
url = '{}/{}/chapterfun.ashx?cid={}&page={}&key={}&language=1>k=6&_cid={}&_mid={}&_dt={}&_sign={}'
|
||||
items = []
|
||||
for page in range(pages):
|
||||
data = self.http_get(url.format(
|
||||
self.domain, chapter_idx,
|
||||
cid, page + 1, key, cid,
|
||||
mid, sign_dt, sign,
|
||||
), headers=self._get_headers())
|
||||
item_url = execjs.eval(data)
|
||||
if item_url:
|
||||
items += item_url
|
||||
return items
|
||||
|
||||
def save_file(self, idx=None, callback=None, url=None, in_arc_name=None):
|
||||
self._storage['referer'] = self.chapter[0]
|
||||
_path, idx, _url = self._save_file_params_helper(url, idx)
|
||||
|
||||
if not is_file(_path):
|
||||
self.http(True).download_file(_url, _path, idx)
|
||||
callable(callback) and callback()
|
||||
self.after_file_save(_path, idx)
|
||||
self._archive.lazy_add(_path)
|
||||
return _path
|
||||
|
||||
@staticmethod
|
||||
def _get_headers():
|
||||
return {'Cache-mode': 'no-cache', 'X-Requested-With': 'XMLHttpRequest'}
|
||||
|
||||
def get_cover(self) -> str:
|
||||
return self._cover_from_content('.banner_detail_form .cover > img')
|
||||
|
||||
def book_meta(self) -> dict:
|
||||
rating = self.text_content(self.content, '.right .score', 0)
|
||||
rating = self.re.search(r'(\d\d?\.\d)', rating).group(1)
|
||||
author = self.text_content(self.content, '.banner_detail_form .info .subtitle a')
|
||||
anno = self.text_content(self.content, '.banner_detail_form .info .content')
|
||||
return {
|
||||
'author': author,
|
||||
'title': self.get_manga_name(),
|
||||
'annotation': anno,
|
||||
'keywords': str,
|
||||
'cover': self.get_cover(),
|
||||
'rating': rating,
|
||||
}
|
||||
|
||||
def chapter_for_json(self):
|
||||
return self.chapter[0]
|
||||
|
||||
|
||||
main = Dm5Com
|
||||
Reference in New Issue
Block a user