Update workflows/publish_pypi.yml
[manga-dl.git] / manga_py / providers / mangapark_org.py
blobf8b69932b4e9bf54b84c93b796a3a6577b9f2d8c
1 from manga_py.provider import Provider
2 from .helpers.std import Std
5 class MangaParkOrg(Provider, Std):
6 __url = None
8 def get_chapter_index(self) -> str:
9 return self.chapter[0].replace('.', '-')
11 def get_content(self):
12 return self.http_get(self.__url)
14 def get_manga_name(self) -> str:
15 title = self.html_fromstring(self.get_url(), 'h3 > a, h4 > a', 0)
16 self.__url = self.normalize_uri(title.get('href'))
17 return title.text_content_full().strip()
19 def _print_variants(self, variants):
20 self.log('Please, select lang. (empty for all langs)')
21 for n, i in enumerate(variants):
22 lng = i.cssselect('.card-header a')[0].text_content_full()
23 self.log('\n%d: ' % (n + 1) + lng, end='')
25 def _answer(self, max_digit):
26 while True:
27 answer = self.quest([], 'Answer (digit): ')
28 if len(answer) > 0 and (int(answer) > max_digit or int(answer) <= 0):
29 self.log('Wrong answer! Try one more.')
30 else:
31 return answer
33 def _auto_language(self, variants):
34 language = self.arg('language')
36 if language is not None:
38 for n, variant in enumerate(variants):
39 text = variant.cssselect('.flag + a.ml-1')[0].text_content_full() # type: str
41 if ~text.find('[' + language + ']'):
42 return n + 1
44 return None
46 def _auto_translator(self, variants):
47 translator = self.arg('translator')
49 if translator is not None:
51 for n, variant in enumerate(variants):
52 text = variant.cssselect('.flag + a.ml-1')[0].text_content_full() # type: str
54 lng = text.find(']')
55 if ~text.find(translator, lng):
56 return n + 1
58 return None
60 def _auto_rules(self, variants, default):
61 auto_lang = self._auto_language(variants)
62 auto_translator = self._auto_translator(variants)
64 if auto_lang is not None:
65 return auto_lang
67 if auto_translator is not None:
68 return auto_translator
70 if len(variants) > 1:
71 self._print_variants(variants)
72 return self._answer(len(variants))
74 return default
76 def get_chapters(self):
77 # multi-lang!
78 variants = self._elements('div.card')
79 answer = self._auto_rules(variants, '1')
81 if len(variants) > 1 and not len(answer):
82 parser = self.document_fromstring(self.content)
83 else:
84 parser = variants[int(answer) - 1]
86 items = parser.cssselect('.card-body i + a')
87 result = []
88 re = self.re.compile(r'[Cc]h\.(\d+(?:\.\d+)?)')
89 n = self.normalize_uri
90 for i in items:
91 text = i.text_content_full()
92 result.append((
93 re.search(text).group(1),
94 n(i.get('href')),
96 return result
98 def get_files(self):
99 re = self.re.compile(r'images\s*=\s*(\[.+\]);')
100 content = self.http_get(self.chapter[1])
101 items = self.json.loads(re.search(content).group(1))
102 return items
104 def get_cover(self) -> str:
105 return self._cover_from_content('.order-0 > img')
107 def book_meta(self) -> dict:
108 pass
110 def chapter_for_json(self) -> str:
111 return self.chapter[1]
113 def prepare_cookies(self):
114 self.http().cookies['set'] = 'theme=1&h=1&img_load=4&img_zoom=5&img_tool=4&twin_m=0&twin_c=0&manga_a_warn=1&history=1&timezone=14'
117 main = MangaParkOrg